Embedded Verilog中N位通用状态机
如果我有一个三位的简单状态机,总共有8个状态。Verilog中的代码如下所示:Embedded Verilog中N位通用状态机,embedded,verilog,Embedded,Verilog,如果我有一个三位的简单状态机,总共有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
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
但是现在我想为N个比特和2^N个状态创建一个简单的状态机。这意味着现在我们只有3位,所以有2^3=8个状态。对于N位,我们将有2^N位
我怎样才能做到。求你了,我真的需要你的帮助
听起来您应该将其实现为带有加载函数的计数器。当您的加载信号被断言时,您加载您的输入,对于您的情况,该输入可以被分配一个随机值。之后,它作为一个正常的计数器工作。可以使用计数器宽度的参数创建n位计数器
然后,您可以使用逐位&reduce运算符检查计数值何时全部为“1”并准备好翻滚,并使用该运算符触发加载 请注意,每个状态的十进制值都是前一个+1,因此您可以只使用触发器的状态always@posedge时钟。。。使用非阻塞在我看来,你几乎想建立一个计数器,但它不是包装到零,而是包装到一个随机数。是的,先生@Marty。。我想要一个从随机数开始的计数,然后转到每个状态。但是countr可能是n个比特