Как присвоить значения Don't Care в таблице истинности тестового стенда?

Я хочу создать тестовый стенд для кодера с приоритетом 4-2. Я пытался присвоить значения Don't Care переменным reg, когда должен был, но произошла ошибка:

(test.v(14): (vlog-2730) Неопределенная переменная: 'x'.).

Код моего тестового стенда:

module enc_4_to_2_behavioral_test;

reg InD3,InD2,InD1,InD0;
wire OutY1,OutY0,OutZeros;

enc_4_to_2_behavioral CUT1(.D3(InD3),.D2(InD2),.D1(InD1),.D0(InD0),.Y1(OutY1),.Y0(OutY0),.Zeros(OutZeros));

initial

begin

        InD3=0; InD2=0; InD1=0; InD0=0;
    #10 InD3=1; InD2=0; InD1=0; InD0=0; 
    #10 InD3=x; InD2=1; InD1=0; InD0=0;
    #10 InD3=x; InD2=x; InD1=1; InD0=0;
    #10 InD3=x; InD2=x; InD1=x; InD0=1;
    #10 $stop;
end

initial $monitor($time, ,"InD3=%b, InD2=%b, InD1=%b, InD0=%b, OutY1=%b, OutY0=%b, OutZeros=%b", InD3,InD2,InD1,InD0,OutY1,OutY0,OutZeros);
endmodule

Как я могу решить эту ошибку?


person sifislaz    schedule 09.11.2019    source источник


Ответы (1)


Вам нужно указать базу с помощью x. Например: InD0 = 1'bx;

Указание базы необязательно в вашем коде с 0 и 1, но я везде внес изменения для согласованности:

initial begin
        InD3=1'b0; InD2=1'b0; InD1=1'b0; InD0=1'b0;
    #10 InD3=1'b1; InD2=1'b0; InD1=1'b0; InD0=1'b0; 
    #10 InD3=1'bx; InD2=1'b1; InD1=1'b0; InD0=1'b0;
    #10 InD3=1'bx; InD2=1'bx; InD1=1'b1; InD0=1'b0;
    #10 InD3=1'bx; InD2=1'bx; InD1=1'bx; InD0=1'b1;
    #10 $stop;
end

Как видно из сообщения об ошибке, без спецификатора base Verilog обрабатывает простое x как имя переменной.

person toolic    schedule 27.04.2020