如何为Verilog比较器测试平台代码添加一个名为Unsigned / Signed的输入?

时间:2018-04-20 16:58:59

标签: verilog comparator system-verilog test-bench

我是编码verilog的新手。

这是3位比较器的代码。我需要帮助添加一个名为“US' (未签名/签名)到我的测试平台代码。当信号为高(无符号模式)时,比较器将数字解释为无符号数。当信号为低(签名模式)时,比较器将数字解释为带符号的数字。

module comparator(A,B,G,E,L,US);
  input [2:0]A;
  input [2:0]B;
  input US;
  output G,E,L;

  reg G,E,L;

  always@(*)
  begin
    if(US==0)
      begin

        L=$signed(A)<$signed(B);
        E=$signed(A)==$signed(B);
        G=$signed(A)>$signed(B);
      end
    else 
        L = A < B;
        E = A==B;
        G = A > B;
    end  
endmodule 

TEST BENCH CODE:

`timescale 1ns /1ps
module comparator_tb();
  reg [2:0]A=3'b000;
  reg [2:0]B=3'b000;
  reg US;
  wire G,E,L;
  integer i,j;

  comparator uut(A,B,G,E,L,US);

  initial begin 

    for(i=0;i<8;i=i+1) 
      begin 
        for(j=0;j<8;j=j+1)
          begin
           #50
           B=B+1;
           end
        A = A+1;
        B=3'b000;   
      end
  #100
  $stop;
  end
endmodule

1 个答案:

答案 0 :(得分:0)

我想你想在你的测试台上切换美国。类似下面的东西?

由于US被声明为wire(默认),因此您需要assign声明:

integer us_count;
assign US = us_count;

initial begin 
 for(us_count = 0; us_count < 1; us_count++) begin
  for(i=0;i<8;i=i+1) 
  begin 
    for(j=0;j<8;j=j+1)
      begin
       #50
       B=B+1;
       end
    A = A+1;
    B=3'b000;   
  end
 end
 #100
 $stop;
end

如果您将其声明为reg,则可以直接在循环中使用它而不是us_count,并且不需要assign

reg US;
initial begin 
  for (US = 0; US < 1; US++)
  ...

其余的取决于你想要如何测试它。