小白问题,百思不得其解
为什么输出的b会和a一起变化,我觉得应该会在下一个上升沿才变化。
怎么解释呢? 下一個的方式
...............
else if (a) c<=1'b1'
else b<= c;
小小白问楼主,这是c语言吗?51的,还是ARM的 你在激励里面将a置1的时间提前0.05us试试看,然后再试试其它时间看看 always 是并行的,同时执行两个if,不要用c来学verilog。想想电路一开通,所有部分都是同时运行。 szghzhao 发表于 2014-3-14 22:35
小小白问楼主,这是c语言吗?51的,还是ARM的
verilog 我猜:
因为你的a变化刚好在上升沿,所以b也跟着变了。
你试试在下降沿变化a always 块里面没有见到有begin...end呢?你不加的话编译器就认为你的第二条语句不在这个always块里面啊。那么它就成了相当于一个组合逻辑。你加上begin...end就好了 我也是小白。但是实际电路中,这个会出现亚稳态。 <=是非阻塞赋值
=是阻塞赋值
这个你应该学习一下 你的理解没错,代码也没错。我猜出现这种情况的原因是,你的激励信号a没有使用clk同步。你试试将a和clk错开,就能看出你要的结果了。 楼上正解,把你的顶层module放上了看看就知道了。 已解决
modelsim仿真的时候时序是不严格的,所以如果需要严格的时序,则激励需要严格按照先后来进行编写,比如a的变化是在clk之后的,则a变化之前要等待clk变化。
4楼说的也对。
激励更改一下
initial
begin
a = 1'b0;
#100
@(posedge clk);
a = 1'b1;
#20 $stop;
end
这样做就不会 從模組看, a是一個非同步輸入. 把激勵改成同步來讓結果符合預期只是掩耳盜鈴的做法.
Jach 发表于 2014-3-20 17:24
從模組看, a是一個非同步輸入. 把激勵改成同步來讓結果符合預期只是掩耳盜鈴的做法.
...
那正确的做法是什么呢 if xx=xx
必须要加else,即不相等时,b的状态, gerpayt 发表于 2014-3-20 21:14
那正确的做法是什么呢
問題是: 你要的是甚麼? 一起變可以接受嗎? 下一個升緣再變嗎? 還是都可以?
页:
[1]