2016-06-06 3 views
-2

Профессор дает код ниже. И я должен понять, почему это никогда не остановится.мой verilog testbench никогда не останавливается

модуль tb_problem1();

reg a, b, c, d, e; 
wire x; 
reg [4:0] ins; 

problem1 dut(a, b, c, d, e, x); 

initial begin 
    ins = 0; 
    while(ins < 32) begin 
     {a, b, c, d, e} = ins; 
     #20; 
     ins = ins + 1; 
    end 
end 

endmodule 

Это потому, что мы должны сделать ins = ins+1'b1;?

+1

Вместо того, чтобы давать вам рыбу ... отладка 101: '$ display'. Профман разрешает доступ в Интернет во время тестов, не так ли? – toolic

ответ

4

5-разрядное значение без знака поддерживает диапазон от 0 до 31. Добавление 1 в 31 приведет к сбросу msb и возврату 0. Поэтому значение 32 никогда не будет достигнуто.

Попробуйте сделать ins 6-битным значением.

+0

- это нормально, если я делаю ins <31; ? – Frank

+0

Тогда условие для 'a, b, c, d, e', всего одного, не произойдет. A do-while будет работать с 'ins <31' – Greg

+0

Получил это, спасибо. – Frank

Смежные вопросы