调试中的典型错误

这几天在写驱动加密芯片的代码产生了一个典型的错误:代码如下

 1 always @ ( posedge clk_100 or negedge rst_n    )    begin
 2     if ( !rst_n )    begin
 3         rst_flg <= 1'b0                                        ;
 4     end 
 5     else if ( rst_strt == 1'b1 )    begin
 6         rst_flg <= 1'b1                                        ;
 7     end 
 8     else if ( end_rst == 1'b1 )    begin
 9         rst_flg <= 1'b0                                        ;
10     end 
11     else begin
12         rst_flg <= rst_flg                                     ;
13     end 
14 end 

这段代码的本意是在rst_strt有效时,给出一个复位标志;在复位结束时,清零复位标志。但是使用上述代码是有优先级的,即需要rst_strt先无效,之后才能响应end_rst。实际中没有考虑到rst_strt及时的清除。

原文地址:https://www.cnblogs.com/cornhill/p/5694642.html