В следующем коде мое состояние должно было измениться с 2 на 3, когда счетчик больше 4, но в моем сигнале оно переходит до 9 и начинает изменять состояние только с 1 до 2, когда оно должно было перейти к 3.
Суммарный вывод - это 16-битный регистр вывода, а number_one - мой четырехбитный ввод, данный пользователем.
module project7(clock , reset , number_one , total_output , present , next , counter );
input clock , reset ;
input [3:0] number_one ; // 4 bit input from the user
output reg[16:1] total_output = 0 ;
output reg[3:0] present = 0 , next = 0 ;
output reg [3:0]counter = 0;
//output reg [3:0] number1 , number2 , number3 , number4 ;
parameter s1 = 4'd1 , s2 = 4'd2 , s3 = 4'd3 , s4 = 4'd4;
always@(*)
begin
case(present)
s1 :begin if (number_one == 4'd0 && counter == 0) next = s1 ;
else if ( number_one <= 4'd9 && counter <= 4'b0100 ) next = s2 ;
else next = s3 ; end
s2 : next = s1 ;
s3 : next = s3 ;
default : next = s1 ;
endcase
end
always @ (posedge clock or posedge reset)
if(reset) present <=s1;
else
present<=next;
always@(posedge clock)
begin
case(present)
s1 :
begin
counter <= counter +1 ;
total_output <= {number_one , total_output[16:5]};
end
s2 : begin
counter <= counter +1 ;
total_output <= {number_one , total_output[16:5]};
end
s3 : begin
total_output <= total_output ;
end
endcase
end
endmodule
Вот мой код тестового стенда.
module simulation();
reg clock ;
reg reset ;
reg [3:0] number_one ;
wire [16:1] total_output ;
wire [3:0] present , next;
wire [3:0] counter ;
wire [3:0] number1 , number2 , number3 , number4;
project7 uut (clock , reset , number_one , total_output , present , next , counter , number1 , number2 , number3 , number4 );
initial
clock =1 ;
always
#50 clock = ~clock;
initial begin
reset = 1'b1;#100;
reset = 1'b0;#100;
end
initial begin
number_one[3:0] = 4'd3;#100;
number_one[3:0] = 4'd4;#100;
number_one[3:0] = 4'd2;#100;
number_one[3:0] = 4'd1;#100;
number_one[3:0] = 4'd5;#100;
end
endmodule