Проблема с реализацией булевой функции в ModelSim с Verilog - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу реализовать Y = (~ A & ~ B & C) | (A & ~ B & ~ C) | (~ A & B & ~ C) в ModelSim 10,7b. Вот что я имею в ModelSim.

boolean_function.v

`timescale 1ns/1ps
module boolean_function (Ain, Bin, Cin, Yout);
  input Ain, Bin, Cin;
  output Yout;

  assign Yout = (~Ain & ~Bin & Cin) | (Ain & ~Bin & ~Cin) | (~Ain & Bin & ~Cin);
endmodule

boolean_function_tb.v

`timescale 1ns/1ps
module boolean_function_tb();
  reg Ain, Bin, Cin;
  wire Yout;

  boolean_function bf(.Ain(Ain),.Bin(Bin),.Cin(Cin),.Yout(Yout));

  initial
  begin
    Ain = 0; Bin = 0; Cin = 0;
    #50;
    Ain = 0; Bin = 0; Cin = 1;
    #50;
    Ain = 0; Bin = 1; Cin = 0;
    #50;
    Ain = 0; Bin = 1; Cin = 1;
    #50;
    Ain = 1; Bin = 0; Cin = 0;
    #50;
    Ain = 1; Bin = 0; Cin = 1;
    #50;
    Ain = 1; Bin = 1; Cin = 0;
    #50;
    Ain = 1; Bin = 1; Cin = 1;
    #50;
  end
endmodule

Я могу скомпилировать оба кода, но во время моделирования все выходы установлены на ноль и не меняются независимо от того, как долго работает выходной сигнал.

Я пытался назначить каждому из случаев seperateley, такие как:

assign Yout = (~Ain & ~Bin & Cin);
assign Yout = (Ain & ~Bin & ~Cin);
assign Yout = (~Ain & Bin & ~Cin);

Это тоже удалось компилировать, но результат остался прежним.

Я также изменил строки тестового стенда

  Ain = 0; Bin = 0; Cin = 0;

в формате

  Ain = 0'b0; Bin = 0'b0; Cin = 0'b0;

и это также было в состоянии скомпилировать, но снова выдать тот же вывод.

Я собираюсь просмотреть все возможные комбинации трех входов и сделать вывод равным единице при выполнении одного из условий булевой функции.

...