使用Verilog在ModelSim中实现布尔函数的问题

时间:2019-04-15 23:20:32

标签: verilog modelsim

我希望实现 Y =(〜A&〜B&C)| (A&〜B&〜C)| (〜A&B&〜C)。以下是我在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

我能够同时编译这两个代码,但是在仿真过程中,所有输出均设置为零,并且无论输出波形运行多长时间都不会改变。

我尝试单独分配每个案例,例如:

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;

并且它也可以编译,但再次提供相同的输出。

我希望遍历三个输入的所有可能组合,并在满足布尔函数的条件之一时使输出等于一。

0 个答案:

没有答案