У меня проблема с дизайном счетчика. Я пытаюсь реализовать MIPS с одним циклом с Verilog, поэтому я пытаюсь реализовать счетчик программ.
Мне просто нужна основная идея о том, как построить счетчик и проверить его. Я новичок в Verilog, поэтому я не знаю, где я ошибся.
Это мой counter.v
:
module PC (Clk, CLR, Q);
input Clk, CLR;
output [31:0] Q;
reg [31:0] tmp;
always @(posedge Clk or posedge CLR)
begin
if (CLR)
tmp = 4'b0000;
else
tmp = tmp + 1'b1;
end
assign Q = tmp;
endmodule
А это мой тестовый файл:
define DELAY 20
module PC_testbench ();
reg clk ;
reg clr ;
wire [31:0] q;
PC exec ( clk , clr , q );
initial clk = 0;
initial clr = 0;
initial begin
clk=~clk;
#`DELAY;
clk=~clk;
#`DELAY;
clk=~clk;
#`DELAY;
clk=~clk;
end
initial begin
$monitor("clk = %b pc_next = %b ",clk , q );
end
endmodule
Я получил 32 х в качестве результата. Есть идеи?
Это мой результат:
# clk = 1 pc_next = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# clk = 0 pc_next = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# clk = 1 pc_next = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# clk = 0 pc_next = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx