verilog 中阻塞与非阻塞的问题
reg[2:0]Q_State;initialbeginQ_State=3’b011;Q_State<=3’b001;$display(“currentvalueofQ_...
reg [2:0] Q_State;
initial
begin
Q_State=3’b011;
Q_State<=3’b001;
$display(“current value of Q_State is %b”, Q_State)
#5
$display(“the display value of Q_State is %b”, Q_State)
end
请问这样运行的结果是current value of Q_State is____________
the display value of Q_State is ____________
求两个空格的答案 并分析原因 越详细越好 展开
initial
begin
Q_State=3’b011;
Q_State<=3’b001;
$display(“current value of Q_State is %b”, Q_State)
#5
$display(“the display value of Q_State is %b”, Q_State)
end
请问这样运行的结果是current value of Q_State is____________
the display value of Q_State is ____________
求两个空格的答案 并分析原因 越详细越好 展开
2个回答
展开全部
先说同一个语句同时使用阻塞式赋值和非阻塞式赋值综合时是通不过的,这种情况只在仿真有效。上面一个空是011,下面是001
阻塞式赋值语句可以这么理解,先要完成本条语句才能执行下一条,即等式左边的变量要先被更新。而阻塞式是先计算右边的值,再在下一时刻同时赋值,电路里面下一刻我理解为下一个时钟沿,仿真里我只能说下一时刻···
那么这一段代码的执行顺序可以这样理解,”Q_State=3’b011“先执行完毕,Q_State变为011,然后Q_State<=3’b001开始执行(计算右边的值),同时display”Q_State“(此时Q_State未更新,即值仍为011),同时延时5个单位,Q_State更新为001,延时完毕后display”Q_State“。
阻塞式赋值语句可以这么理解,先要完成本条语句才能执行下一条,即等式左边的变量要先被更新。而阻塞式是先计算右边的值,再在下一时刻同时赋值,电路里面下一刻我理解为下一个时钟沿,仿真里我只能说下一时刻···
那么这一段代码的执行顺序可以这样理解,”Q_State=3’b011“先执行完毕,Q_State变为011,然后Q_State<=3’b001开始执行(计算右边的值),同时display”Q_State“(此时Q_State未更新,即值仍为011),同时延时5个单位,Q_State更新为001,延时完毕后display”Q_State“。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询