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

[复制链接]
3673|25
 楼主| zhpg009 发表于 2013-5-22 22:01 | 显示全部楼层 |阅读模式
如题:

代码中如果两个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
qin552011373 发表于 2013-5-22 22:18 | 显示全部楼层
应该是要看是并行还是顺序执行的吧
GoldSunMonkey 发表于 2013-5-23 21:59 | 显示全部楼层
谁先满足,先执行谁
resxpl 发表于 2013-5-23 22:58 | 显示全部楼层
本帖最后由 resxpl 于 2013-5-23 23:33 编辑

测试一下,就能知道了.
发现还是有人对于reg赋值没有太明白啊.

两个if都满足的话, 咳咳, 应该是最后一个生效.
GoldSunMonkey 发表于 2013-5-24 21:31 | 显示全部楼层
resxpl 发表于 2013-5-23 22:58
测试一下,就能知道了.
发现还是有人对于reg赋值没有太明白啊.

你这个说法是两个if平行的,
如果是分级就是谁先执行谁。
另外平行语句,是不能对同一个值赋值的。

评分

参与人数 1威望 +5 收起 理由
星星之火红 + 5

查看全部评分

GoldSunMonkey 发表于 2013-5-24 21:35 | 显示全部楼层
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

评分

参与人数 3威望 +12 收起 理由
Tianya283 + 3
星星之火红 + 5
xjsxjtu + 4

查看全部评分

GoldSunMonkey 发表于 2013-5-24 21:40 | 显示全部楼层
咳咳,所以我不说了

评分

参与人数 2威望 +8 收起 理由
Tianya283 + 3
星星之火红 + 5

查看全部评分

resxpl 发表于 2013-5-24 21:41 | 显示全部楼层
本帖最后由 GoldSunMonkey 于 2013-5-25 23:33 编辑

是的, 就是这个意思

xjsxjtu 发表于 2013-5-24 21:42 | 显示全部楼层
嗯,学习啦
GoldSunMonkey 发表于 2013-5-24 21:43 | 显示全部楼层
resxpl 发表于 2013-5-24 21:41
是的, 就是这个意思

嗯,我们是一样的:)

评分

参与人数 1威望 +3 收起 理由
Tianya283 + 3

查看全部评分

zyj_hb 发表于 2013-5-24 21:53 | 显示全部楼层
本帖最后由 zyj_hb 于 2013-5-24 21:58 编辑

我记得是 begin end 之间是顺序执行, fork join之间是并行执行。如果不是顺序执行的话,里面的语句是没有意义的。最后附的值有效。不能在平行语句中对同一变量进行赋值(如果只是看逻辑关系可以编译通过,如果要综合会报错)。
GoldSunMonkey 发表于 2013-5-25 23:32 | 显示全部楼层
zyj_hb 发表于 2013-5-24 21:53
我记得是 begin end 之间是顺序执行, fork join之间是并行执行。如果不是顺序执行的话,里面的语句是没有 ...

看看我的解释就明白了
星星之火红 发表于 2013-5-25 23:39 | 显示全部楼层
感谢,猴哥啊
yghanwuji 发表于 2013-5-27 17:01 | 显示全部楼层
学习了
habc987 发表于 2013-5-27 22:15 | 显示全部楼层
begin   end是顺序执行的
GoldSunMonkey 发表于 2013-5-27 23:53 | 显示全部楼层
星星之火红 发表于 2013-5-25 23:39
感谢,猴哥啊

不客气啊
GoldSunMonkey 发表于 2013-5-27 23:53 | 显示全部楼层
habc987 发表于 2013-5-27 22:15
begin   end是顺序执行的

是的啊
GoldSunMonkey 发表于 2013-5-27 23:54 | 显示全部楼层
yghanwuji 发表于 2013-5-27 17:01
学习了

欢迎常来

评论

您真热情  发表于 2013-5-28 09:03

评分

参与人数 1威望 +3 收起 理由
Tianya283 + 3

查看全部评分

LongChip 发表于 2013-5-28 23:18 | 显示全部楼层
厉害啊
Tianya283 发表于 2013-5-28 23:18 | 显示全部楼层
不错啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:进取

16

主题

139

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部