如果我有一个三位简单的状态机,总共会有8个状态。 Verilog中的代码在这里:
module state_machine( input clk , input reset );
`define s0 3'b 000
`define s1 3'b 001
`define s2 3'b 010
`define s3 3'b 011
`define s4 3'b 100
`define s5 3'b 101
`define s6 3'b 110
`define s7 3'b 111
reg [2:0] state;
initial
state = {$random%3};
always @(posedge clk) begin
if (reset==0)
state= `s0;
else
case (state)
`s0: state =`s1 ;
`s1: state =`s2 ;
`s2: state =`s3 ;
`s3: state =`s4 ;
`s4: state =`s5 ;
`s5: state =`s6 ;
`s6: state =`s7 ;
`s7: state ={$random%3} ;
default: state =`s0
endcase
end
endmodule
但是现在我想为具有(2 ^ N)个状态的N个位创建一个简单的状态机。这意味着现在我们只有3位,所以有(2 ^ 3)= 8状态。所以对于N位,我们将有2 ^ N位。
我是如何做到的。拜托,我真的很想要你的帮助。
答案 0 :(得分:0)
听起来你应该将它作为具有加载功能的计数器来实现。当你的负载信号被置位时,你加载你的输入(为你的情况可以分配一个随机值)。之后它作为普通计数器运行。您可以使用计数器宽度的参数创建n位计数器。
然后你可以使用按位"&"减少运算符以检查计数值何时全部为1并且准备好翻转,并使用它来触发负载。