Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有限状态机verilog_Verilog_Fsm - Fatal编程技术网

有限状态机verilog

有限状态机verilog,verilog,fsm,Verilog,Fsm,我想知道是否有人能解释一下如何在Verilog中编码一个模式fsm,它在8个LED上产生4种不同的模式,并且LED每一个滴答声脉冲都会改变。 我知道我应该使用状态寄存器和组合下一状态逻辑,但我不确定如何编写它 我希望有人能举个例子。如果不知道每个细节,就很难举个例子。。。但最简单的情况可能看起来像一个具有四个状态和异步重置的状态机。在时钟的每一个上升沿上,状态都会发生变化。对于每个状态,7位数据被“驱动”到led(您可以将其扩展到8个led没有问题,只需更多键入): 模块fsm\u示例(时钟、复

我想知道是否有人能解释一下如何在Verilog中编码一个模式fsm,它在8个LED上产生4种不同的模式,并且LED每一个滴答声脉冲都会改变。 我知道我应该使用状态寄存器和组合下一状态逻辑,但我不确定如何编写它


我希望有人能举个例子。

如果不知道每个细节,就很难举个例子。。。但最简单的情况可能看起来像一个具有四个状态和异步重置的状态机。在时钟的每一个上升沿上,状态都会发生变化。对于每个状态,7位数据被“驱动”到led(您可以将其扩展到8个led没有问题,只需更多键入):

模块fsm\u示例(时钟、复位、数据);
输入线clk;//时钟输入
输入线复位\u n;//异步复位(低电平有效)
输出注册表[6:0]数据;//数据驱动到七段显示。。。
//恒定状态枚举
localparam状态_0=2'd0;
localparam状态_1=2'd1;
localparam状态_2=2'd2;
localparam STATE_3=2'd3;
//当前FSM状态(最多2位,足以保存0到3之间的值)
reg[1:0]状态;
//时钟驱动的状态机。每一次都会改变状态
//提高时钟的边缘。
始终@(posedge clk或negedge重置)开始
如果(!reset_n)开始

说明哪4种模式,以及LED如何变化?您是说有4个静态模式,您只是在每个时钟脉冲中按顺序显示它们,还是说有4个动态移动模式,其中FSM更改由按钮或其他东西触发?是的,有4个按钮触发4种不同的模式,每个模式将触发8个LED以一种模式移动,即从左到右、从右到左。
module fsm_example(clk, reset_n, data);

   input wire clk;     // Clock input
   input wire reset_n; // Asynchronous reset (active low)
   output reg [6:0] data; // Data driven to seven-segment display...

   // Constant state enumeration
   localparam STATE_0 = 2'd0;
   localparam STATE_1 = 2'd1;
   localparam STATE_2 = 2'd2;
   localparam STATE_3 = 2'd3;

   // Current FSM state (up to 2 bits, enough to hold values from 0 to 3)
   reg [1:0] state;

   // Clock-driven state machine. Changes state on every
   // raising edge of the clock.
   always @ (posedge clk or negedge reset_n) begin
      if (!reset_n) begin
         state <= STATE_0;
      end else begin
         case (state)
           STATE_0: state <= STATE_1;
           STATE_1: state <= STATE_2;
           STATE_2: state <= STATE_3;
           STATE_3: state <= STATE_0;
         endcase
      end
   end

   // State to output data mapping.
   always @ (state) begin
      case (state)
        STATE_0: data = 7'b0111111; // 0x0
        STATE_1: data = 7'b0000110; // 0x1
        STATE_2: data = 7'b1011011; // 0x2
        STATE_3: data = 7'b1001111; // 0x3
      endcase
   end

endmodule