特权同学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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
qin552011373
1楼-- · 2020-02-28 23:46
应该是要看是并行还是顺序执行的吧
GoldSunMonkey
2楼-- · 2020-02-29 04:22
谁先满足,先执行谁
resxpl
3楼-- · 2020-02-29 09:47
 精彩回答 2  元偷偷看……
GoldSunMonkey
4楼-- · 2020-02-29 10:02
resxpl 发表于 2013-5-23 22:58
测试一下,就能知道了.
发现还是有人对于reg赋值没有太明白啊.

你这个说法是两个if平行的,
如果是分级就是谁先执行谁。
另外平行语句,是不能对同一个值赋值的。
GoldSunMonkey
5楼-- · 2020-02-29 12:20
resxpl 发表于 2013-5-23 22:58
测试一下,就能知道了.
发现还是有人对于reg赋值没有太明白啊.

咳咳,我觉得
平行:(假设这个语法都是正确的)
   if a>3
      b=5
   if a>5
      b=6.
那么在a=6的条件下,肯定是b=6(但是这个语法肯定是错的)

但是
   if a>3
      b=5
   else if a>5
      b=6.
如果出现a=6的情况下,b=5
GoldSunMonkey
6楼-- · 2020-02-29 15:55
咳咳,所以我不说了

一周热门 更多>