在Verilog中将状态机概括为N位

时间:2015-02-07 19:51:06

标签: 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     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位。

我是如何做到的。拜托,我真的很想要你的帮助。

enter image description here

1 个答案:

答案 0 :(得分:0)

听起来你应该将它作为具有加载功能的计数器来实现。当你的负载信号被置位时,你加载你的输入(为你的情况可以分配一个随机值)。之后它作为普通计数器运行。您可以使用计数器宽度的参数创建n位计数器。

然后你可以使用按位"&"减少运算符以检查计数值何时全部为1并且准备好翻转,并使用它来触发负载。