关于verilog中两个always的关系问题

modulepinlvji(clk,datain,reset,enclk,outdata);inputclk,datain,reset,enclk;output[9:0]... module pinlvji(clk,datain,reset,enclk,outdata);
input clk,datain,reset,enclk;
output [9:0]outdata;
reg [9:0]outdata;
reg [9:0]tep;
always @(posedge datain or posedge reset)
begin
if(reset)
tep<=0;
else if(enclk)
begin
tep<=tep+1;

end
else if(!enclk)
tep<=0;

end
always @(negedge enclk or posedge reset)
begin
if(reset)
outdata<=0;
else
outdata<=tep;
end
endmodule
可以看到第一个always中有这么一句
if(!enclk)
tep<=0;
而第二个always中
always @(negedge enclk or posedge reset)
用enclk做了下降沿,并且把tep的值赋给了outdata,那么tep<=0,先执行,还是outdata<=tep现执行呢?这两个差别太大了,求高手指点,我现在对两个always中的数据谁先谁后执行快崩溃了,各位帮帮忙吧,谢谢啦!
展开
 我来答
风雷小草
2012-05-06 · TA获得超过1711个赞
知道小有建树答主
回答量:1174
采纳率:0%
帮助的人:696万
展开全部
第一个always块中把enclk当成普通信号而把datain当时钟信号,第二个always块中把enclk当时钟信号,这在一般的设计当中是不允许的。如果非要这样用,则因为有多个时钟,需要特别做同步处理,否则做成的硬件不能正常工作。
追问
不知道怎么回事,仿真的结果是正确的。那么对于我这个问题该怎么改正呢?
追答
你说仿真是正确的,一定是你仿真的test case不全面,只仿到了其中的一种情况,覆盖率太低。简单地说,就是你碰巧把你想像的情况仿出来了,而实际上电路的输入信号是随机的。建议你先把设计改成只有一个时钟再说吧。
xiaowind000
2012-05-14 · TA获得超过550个赞
知道小有建树答主
回答量:237
采纳率:85%
帮助的人:79.3万
展开全部
先避开硬件电路的实现不谈,只谈语法:
首先,你先不用管谁先执行,谁后执行,先弄清楚两个always语句是什么情况下执行的
那么,知道了这两个always语句是什么情况下执行,基本也就知道了你想要的先后顺序
---------------
既然你的仿真结果是正确的,那你应该可以从波形上看到执行的先后顺序呀??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赤日の流转413
2012-05-07 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:72.8万
展开全部
最好把这些写在一个always里面,用个状态机就搞定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
臧锐迟问芙
2019-01-10 · TA获得超过1092个赞
知道小有建树答主
回答量:2511
采纳率:100%
帮助的人:13.6万
展开全部
稳定的,你在第一个always里给那个变量赋值,这个变量从时钟上升沿到真正值的变化会有一个tco的时间,这个你应该懂的吧,这个tco加上布线延时的时间会比保持时间th长,所以你在第二个always里用if来判断变量的值做不同的处理是没有问题的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式