我正在尝试使用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
我有什么遗漏吗?
(输出为0或1)。是否有一些功能限制,我只能通过一位?
答案 0 :(得分:2)
您需要使用位宽声明函数:
function [3:0] do_addition;
请参阅IEEE Std 1800-2012, 13.4功能:
特别是,隐式语法可以为空,在这种情况下 返回类型是逻辑标量。