在Verilog中使用功能块添加

时间:2017-12-01 19:07:31

标签: function verilog

我正在尝试使用verilog中的函数来重复特定的代码逻辑,即Addition。我想在函数中使用4位二进制加法器。我在Vivado中尝试了以下内容,但有点奇怪的是输出总是有一位值:

module my_divider(A,B,Sum); 

input [3:0] A;
input [3:0] B;
output [3:0] Sum;

function do_addition;
    input  [3:0] int_A,int_B; 
    reg   [3:0] v_Temp; // Local Variable
    begin    
       v_Temp = A + B;
       do_addition=v_Temp[3:0];
    end
  endfunction


assign Sum[3:0] = do_addition(A,B);
endmodule

Testbench如下:

module div_tb;

reg [3:0] A,B;
wire [3:0] Sum;
my_divider DUT(.A(A),.B(B),.Sum(Sum));

initial
begin
A=4'b0000;
B=4'b0000;
#50;
A=4'b0010;
B=4'b0001;
#50
A=4'b0001;
B=4'b1000;
end

initial
#150
$finish;

endmodule

输出: enter image description here

我有什么遗漏吗?

(输出为0或1)。是否有一些功能限制,我只能通过一位?

1 个答案:

答案 0 :(得分:2)

您需要使用位宽声明函数:

function [3:0] do_addition;

请参阅IEEE Std 1800-2012, 13.4功能

  

特别是,隐式语法可以为空,在这种情况下   返回类型是逻辑标量