verilog HDL中的@
always后面跟的是信号的跳变沿,比如always @(posedge a)
如果此时a是从逻辑“0”跳变为不定态“x”,仿真器一般认为是上升沿;
同理,如果此时a是从逻辑“1”跳变为不定态“x”,仿真器一般认为是下降沿。
谢谢啦!是这样的,有关的一道题: 事件A分别在10,20,30发生,而B一直保持X状态,问在30时Count的值是多少。
reg[7:0]Count;
initial
Count=0;
always
begin
@(A) Count=Count+1;
@(B) Count=Count+1;
end;
答案说是Count=1,因为A第一次发生时,Count的值由0变1,然后事件控制@(B)阻挡了进程。 那么这个解释是不是就是说因为B处于不定状态,所以会阻断进程呢?
你确定你这段代码编译通过了?不报错?
@(a)和@(b),这个语法就错了啊,
如果你希望在a,b跳变沿发生变化时,执行动作,你要么写@(posedge a),要么@(negedge a)
如果你的意图是希望在a,b发生电平变化时,执行动作,你就该写
always @(a or b) 或者 always @(*)
begin begin
xxxx xxxx
end end
再回答你的问题,其实这边不管你b是逻辑“1”、逻辑“0”还是不定态“x”,在沿触发电路中只要检测不到他的上升/下降沿,在电平触发电路中,只要检测不到他的信号变化,都不会执行@(xxx)后面的动作。所以你这边,在b不变的情况下(1,0,x都一样),怎么写,代码都只会执行到a那一句,即count=1