Я несколько новичок в verilog. Поэтому этот вопрос может быть очень простым. Я пытаюсь имитировать конечную машину с использованием verilog. Краткое описание: Есть три состояния: 0,1 & 2. По умолчанию, государство 0. состояние изменяется на 1, только если вход 01. состояние изменяется на 2, только если вход 10. состояние изменяется обратно на 0, только если ввод равен 00. Код успешно моделируется, но 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
Testbench: (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' также должно быть назначено неблокирующими назначениями (' <= '), а не блокировкой назначений (' = '). – Greg