我正在尝试使用Pong P. Chu的书来学习Verilog.我有一个关于如何评估和实现always块的问题.作者代码中的一种风格令我感到困惑.
在这个例子中,他用一个带有两个输出寄存器'y1'和'y2'的FSM编码.我困惑的部分是在NEXT STATE LOGIC和OUTPUT LOGIC总是阻塞,在begin语句之后,always@*y1和y0被设置为0.我似乎无论状态如何,y1和y0将在每个时钟切换为0循环和信号变化.根据书中的状态图,在状态0或1时,reg y1应该等于1.
那么y1在每个时钟周期切换到0然后回到它在当前状态下的值吗?我认为情况并非如此,我只是对如何评估块感到困惑.有人可以解释代码的这一部分正在做什么.我迷路了.谢谢
module fsm_eg_2_seg
(
input wire clk, reset, a, b,
output reg y0, y1
);
//STATE DECLARATION
localparam [1:0] s0 =2'b00,
s1=2'b01,
s2=2'b10;
// SIGNAL DECLARATION
reg [1:0] state_reg, state_next ;
//STATE REGISTER
always @(posedge clk, posedge reset)
if (reset)
state_reg <= s0;
else
state_reg <= state_next;
//NEXT STATE LOGIC AND OUTPUT LOGIC
always @*
begin
state_next = state_reg; // default next state: the same
y1 = 1'b0; // default …Run Code Online (Sandbox Code Playgroud) verilog ×1