-2
我想知道是否有人可以對如何在Verilog中編寫fsm模式進行編碼,從而生成8個LED上的4種不同模式,並且LED改變每個節拍脈衝。 我知道我應該使用狀態寄存器和組合下一個狀態邏輯,但是我不知道如何去編寫它。有限狀態機verilog
我希望有人能提供一個例子。
我想知道是否有人可以對如何在Verilog中編寫fsm模式進行編碼,從而生成8個LED上的4種不同模式,並且LED改變每個節拍脈衝。 我知道我應該使用狀態寄存器和組合下一個狀態邏輯,但是我不知道如何去編寫它。有限狀態機verilog
我希望有人能提供一個例子。
在不知道每個細節的情況下很難提供示例......但最簡單的情況可能看起來像是具有四種狀態和異步復位的狀態機。時間的每個上升沿都會改變狀態。對於每一個國家,數據的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。希望能幫助到你。
4種模式,以及LED如何改變?你是說有4個靜態模式,你只是每個時鐘脈衝順序顯示它們,還是4個動態移動模式,其中的FSM變化是由一個按鈕或某物觸發的? –
是的,有4個按鈕可以觸發4種不同的模式,每種模式都會觸發8個LED以圖案移動,即從左到右,從右到左。 – intensified