2010-01-20 4 views
0

Я не знаю, что случилось с кодом ниже, может кто-то помочь мне отлаживатьVerilog отладки

module iloop(z,a); 
    input [31:0] a; 
    output z; 
    reg [4:0] i; 
    reg s, z; 
    initial begin 
    s = 0; 
    for(i=0; i<32; i=i+1) s = s | a[i]; 
    z = !s; 
    end 
    endmodule 

ответ

8

Ваш код имеет бесконечный цикл. Вы объявили i как 5-битный регистр, что означает, что его диапазон значений (десятичный) от 0 до 31. Но ваш цикл for проверяет, является ли значение i < 32, что всегда верно. После того, как i = 31, i прирастает и переворачивается до 0.

$display - твой друг. Если добавить его в свой цикл, вы увидите проблему:

for(i=0; i<32; i=i+1) begin $display(i); s = s | a[i]; end 

Я думаю, что вы хотите i<31.

Или, может быть, вы хотите или все биты a вместе, используя побитовое ИЛИ оператор:

s = |a; 

Вы должны объяснить словами, что вы пытаетесь достичь.

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

  • Нет связанных вопросов^_^