0
我對verilog有點新。所以這個問題可能很簡單。 我試圖模擬一個使用verilog的有限狀態機。 簡要說明: 有三種狀態:0,1 & 2.默認情況下,狀態爲0。 狀態變爲1僅當輸入爲01 的狀態更改爲2僅當輸入是10 狀態只有當輸入爲00時才變回0。 代碼已成功模擬,但Im沒有輸出。請幫我解決這個問題。沒有得到模擬輸出的錯誤免費verilog代碼
代碼:(State.v)
module State(
input clk,
input reset,
input [3:0] in,
output [3:0] out,
output [3:0] state
);
wire clk,reset;
wire [3:0] in;
reg [3:0] out;
reg [3:0] state;
always @(posedge clk or posedge reset)
begin
if (reset == 1)
begin
state = 0;
end
else
begin
case (state)
0: if(in == 2'b01)
state = 1;
else
state = 0;
1: if(in == 2'b10)
state = 2;
else
state = 1;
2: if(in == 2'b00)
state = 0;
else
state = 2;
default: state = 0;
endcase
end
end
always @(*)
begin
case (state)
0: out = 2'b00;
1: out = 2'b01;
2: out = 2'b10;
default: out = 2'b00;
endcase
end
endmodule
測試平臺:(StateTestBench.v)
module StateTestBench;
// Inputs
reg clk;
reg reset;
reg [3:0] in;
// Outputs
reg [3:0] out;
reg [3:0] state;
always
begin
#1 clk = !clk;
end
// Instantiate the Unit Under Test (UUT)
State uut (
.clk(clk),
.reset(reset),
.in(in),
.out(out),
.state(state)
);
initial begin
// Initialize Inputs
clk = 0;
reset = 0;
#1 reset = 1;
#10 reset = 0;
#5 in = 2'b00;
#10 in = 2'b01;
#10 in = 2'b10;
end
endmodule
應該有一個編譯器警告,因爲您正在混合ANSI和非ANSI標題樣式。使用ANSI風格,您不應該重新聲明與端口名稱相同的網絡和變量。將'output [3:0]'更改爲'output reg [3:0]'並移除'State'中的'wire'和'reg'聲明以符合ANSI標題樣式。 'state'也應該被分配非阻塞賦值('<='),而不是阻塞賦值('=')。 – Greg