我想知道是否有人可以阐明如何在 Verilog 中编码一个模式 fsm,该模式在 8 个 LED 上产生 4 种不同的模式,并且 LED 会改变每个滴答脉冲。我知道我应该使用状态寄存器和组合下一个状态逻辑,但我不确定如何编写它。
我希望有人可以提供一个例子。
如果不了解每个细节,很难提供示例……但最简单的情况可能看起来像具有四个状态和异步复位的状态机。状态在时钟的每个上升沿都会发生变化。对于每个状态,7 位数据被“驱动”到 LED(您可以将其扩展到 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
如果您了解一点 Verilog,则代码非常简单。希望能帮助到你。