私はVerilogを多少新しくしています。だからこの質問は非常に簡単かもしれません。 私はVerilogを使って有限状態機械をシミュレートしようとしています。 簡単な説明: 三つの状態があります:0,1 & 2.デフォルトでは、状態は、入力が入力10 状態である場合にのみ、2〜01 状態の変化である場合にのみ1を0 状態変化であります入力が00の場合のみ0に戻ります。 コードは正常にシミュレートされていますが、出力が得られません。問題を手伝ってください。エラーフリーの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スタイルでは、ネットと変数をportと同じ名前で再宣言するべきではありません。 'output [3:0]'を 'output reg [3:0]'に変更し、 'State'の' wire'と 'reg'宣言を削除してANSIヘッダスタイルに準拠させてください。 'state'はまた、ブロックしていない代入(' <= ')、代入をブロックする(' = ')で割り当てられるべきです。 – Greg