У меня есть простой 8-битный модуль проверки четности для проверки результатов и установки флагов.Выход модуля Verilog равен X даже при назначении значения
Выход этого модуля всегда X, и я не могу на всю жизнь выяснить, почему. Вот код:
module parity8 (p, low8);
output p;
input [7:0] low8;
wire [3:0] pchka;
wire [1:0] pchkb;
wire parity_bar;
xor2$ xora0 (pchka[0], low8[0], low8[1]),
xora1 (pchka[1], low8[2], low8[3]),
xora2 (pchka[2], low8[4], low8[5]),
xora3 (pchka[3], low8[6], low8[7]),
xorb0 (pchkb[0], pchka[0], pchka[1]),
xorb1 (pchkb[1], pchka[2], pchka[3]),
xorp (parity_bar, pchkb[0], pchkb[1]);
inv1$ pinv (p, parity_bar);
endmodule
parity_bar всегда имеет правильное значение, и я попытался сделать еще один провод Ptest, который заменил р на последней строке. Ptest имел правильное значение, поэтому я попытался добавить:
assign p = ptest;
Однако выход модуля еще X. Даже пытался назначая р = 1'b1; и это не изменилось. Надеюсь, это не что-то очевидное, спасибо за вашу помощь.
Похоже, что есть еще один драйвер на 'p', либо из другого модуля, либо как' reg' в тестовом стенде. Выходы подмодулей должны быть подключены к типам проводов и не иметь других драйверов. – Greg
Это может быть так. В модуле, вызывающем parity8, я не был уверен, что лучший способ инициализировать мой флаг-вектор до 0 (очень новый для verilog), поэтому я сделал: assign flags = 32'b0; Причина, по которой я думал, что это не проблема, заключается в том, что существуют другие модули, которые выполняют аналогичные задачи для вычисления флага и приводят другой бит. Они отлично работают. Во всяком случае, я вывешу водителя на этот бит и дам вам знать, работает ли он. Спасибо – Xionraseri
Можете ли вы также добавить в него код testbench? –