Output for tidak diketahui, bukan 1 di Verilog

Saya menggunakan Icarus iVerilog untuk mensintesis dan menguji kode saya, tetapi saya mendapatkan nilai yang tidak diketahui padahal secara logika angka 1 seharusnya muncul. Berikut ini contoh dari apa yang saya coba lakukan.

reg [8:0] a = 000110100;
wire [8:0] b = 0;

generate
    genvar i;
    for (i = 8; i > -1; i = i - 1)
    begin:loop
        assign b[i] = |a[8:i];
    end
endgenerate

Ini akan menghasilkan beberapa gerbang dalam bentuk

b[8] = a[8];
b[7] = a[8] | a[7];
b[6] = a[8] | a[7] | a[6];
b[5] = a[8] | a[7] | a[6] | a[5];
...

Hasil yang saya harapkan adalah

000111111

Saya benar-benar mengerti

000xxxxxx

Saya tidak dapat menemukan alasan apa pun untuk tanda x tersebut, dan saya mulai curiga ini adalah masalah dengan iVerilog.


person adragon202    schedule 31.07.2016    source sumber
comment
Apakah alat sintesis Anda mendukung inisialisasi deklarasi variabel?   -  person dave_59    schedule 01.08.2016
comment
Saya dapat mencobanya di alat lain besok, tetapi ada dua hal yang dapat Anda coba saat ini: 1) menggunakan i>=0 alih-alih i>-1, dan 2) menghitung maju dari 0, bukan mundur dari 8.   -  person teadotjay    schedule 01.08.2016


Jawaban (1)


Harap hapus tugas dalam deklarasi di bawah ini. Kabel penetapan ke 0 dalam deklarasi membuat konflik dengan penugasan 1 di blok genvar

 wire [8:0] b = 0;

mengubah

wire [8:0] b;

hal ini dikarenakan

wire [8:0] b = 0;

bukan inisialisasi, ini adalah penugasan berkelanjutan. Ini setara dengan

wire [8:0] b;
assign b = 0;

Oleh karena itu, konflik.

person babyworm    schedule 01.08.2016