|
verilog一个关于简化ont-hot编码问题
parameter[3:0]
s0=4'd0,
s1=4'd1,
s2=4'd2,
s3=4'd3;
[email=always@(posedge]always@(posedge[/email] clk or rest)
if(rest)begin
state<=5'b0;
state[s0]<=1'b'1;
end
else state<=next;
[email=always@(state]always@(state[/email] or x)begin
next=5'b0;
y=1'b0;
case(1'b1)
state[s0]:
begin
if(......) next[s1]=1'b1;
state[s0]: if(......) next[s1]=1'b1;else.....
state[s1]: if(......) next[s2]=1'b1;else.....
state[s2]: if(......) next[s3]=1'b1;else.....
state[s3]: if(......) next[s0]=1'b1;else...
end
endcase
end
endmodule
这个是简化的one-hot编码,每个状态向量只有一位为1,其余为0;
我不明白的是,当所有状态都循环一遍的时候,那么next就不是只有一个1了,因为过程中没有给next清零,要复位时state才会全部清零.
,这时state中也不只一位为1,那么case(1'b1)下,究竟如何执行? |
|