特权同学SD卡代码疑问begin end 中连续出现两个 if 如何分析?

2020-02-28 18:40发布

如题:

代码中如果两个if同时都满足,是按先后顺序执行? 还是两句同时执行?



代码如下:

CMD_RES:
              begin
                   if(retry_rep == 8'hff)
                               cmd_nstate <= CMD_IDLE;        //响应超时,返回IDLE重新发起命令

                  if(spi_rx_rdy && (!spi_tx_enr & !spi_rx_enr))
                       begin                                
                           case(sdinit_cstate)
                               SD_RD_PT,SD_RD_BPB:
                                       //接收到RD命令的起始字节8'hfe,立即读取后面的512B        
                                       if(spi_rx_dbr == 8'hfe)
                                                  cmd_nstate <= CMD_RD;        
                                      else
                                                  cmd_nstate <= CMD_RES;
                                                                        
                               SDINIT_CMD0,SDINIT_CMD55,SDINIT_ACMD41,SDINIT_CMD16:
                                       if(spi_rx_dbr == 8'hff)
                                               cmd_nstate <= CMD_RES;        
                                       else        
                                               //产生正确响应,结束当前命令         
                                               cmd_nstate <= CMD_CLKE;        
                                                                        
                                default:
                                      cmd_nstate <= CMD_CLKE;
                           endcase
                     end
                        
                else
                     cmd_nstate <= CMD_RES;                        
             end
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
zyj_hb
2020-03-01 02:19
本帖最后由 zyj_hb 于 2013-5-24 21:58 编辑

我记得是 begin end 之间是顺序执行, fork join之间是并行执行。如果不是顺序执行的话,里面的语句是没有意义的。最后附的值有效。不能在平行语句中对同一变量进行赋值(如果只是看逻辑关系可以编译通过,如果要综合会报错)。

一周热门 更多>