打印
[verilog]

always中的if语句判断出问题

[复制链接]
2164|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
michealw|  楼主 | 2014-9-1 19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天写了一段Verilog代码 但是仿真的时候总是得不到我想要的结果 ,后来发现是always中的if语句判断出问题
下面是我的代码片段:
                               if (onesDetected == 1)
                                begin
                                        tmp_reg[4:0] <=  {1'b0, tmp_reg[4:1]};
                                end
                               
                                // 若没有检测到连续的1 就直接把缓冲区的数据右移动
                                else
                                begin                             
                                        tmp_reg <= {1'b0, tmp_reg[15:1]};
                                        counter <= counter + 4'b0001;
                                end
                                //移动一个字节后重新装载数据
                                if (counter == 4'b1000)
                                begin
                                        counter <= 0;
                                        flag <= 1;
                                        inProgress_i <= 0;
                                        tmp_reg[15:8] <= data_reg;  //传输开始先要移动两个字节的0 才开始正式的传输有效的的帧
                                end

我现在要的效果是,当counter=7的周期里面,若 if (onesDetected == 1) 成立 则counter 保持为7,若 if (onesDetected == 1)不成立时counter则变为零。但是我上面的代码做不到这一点
主要是由于counter是采用非阻塞赋值造成counter=7的周期结束时,若 if (onesDetected == 1)不成立 ,counter的值变成了 8.但是if (counter == 4'b1000)的判断还是按照counter= 7来进行的则counter无法再counter=7周期结束时
变为0,最后 我将counter <= counter + 4'b0001这条语句改为阻塞性赋值 counter = counter + 4'b0001;就可以达到我想要的结果,但是在看Verilog的书籍时 都会提出在always的时序逻辑中不要用阻塞性赋值 所以觉得这个解决办法
有些不妥。希望哪位大神给出一个好的解决方案!!!



相关帖子

沙发
llf021421| | 2014-9-2 00:09 | 只看该作者
帮顶!排版太难看了

使用特权

评论回复
板凳
罪人乙| | 2014-9-2 15:09 | 只看该作者
逻辑好混乱...

使用特权

评论回复
地板
siyida| | 2014-9-2 17:15 | 只看该作者
两个if语句应嵌套使用

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
michealw + 2
5
michealw|  楼主 | 2014-9-3 09:48 | 只看该作者
怎么感觉嵌入使用也不会有效果的  非阻塞赋值都是在一个周期结束时 同时赋值 所以每一个判断语句的效果都会延时一个周期,我现在要的效果是只要判断语句中的变量的值发生了改变 就要立刻以改变后的值 作为判断条件!  

使用特权

评论回复
6
michealw|  楼主 | 2014-9-3 10:10 | 只看该作者
siyida 发表于 2014-9-2 17:15
两个if语句应嵌套使用

感谢 ,嵌入使用的确可以 !

使用特权

评论回复
7
小嘿| | 2014-9-3 12:06 | 只看该作者
讨论阻塞不阻塞,起码把你的时钟信号给出来啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

26

帖子

0

粉丝