赞
踩
当前的FPGA中一般都集成了硬件资源乘法器,我们可以在IP CORE 里调用,也可以直接在HDL里直接用"*"来实现乘法,EDA工具会自动综合成乘法器。
对于无符号数乘法,需要扩宽结果的位数,比如两个4位无符号数相乘,结果是8位的。
reg [3:0]a;
reg [3:0]b;
output reg [7:0]c;
always@(posedge clk or negedge rst_n)
if(!rst_n)
begin
c<=8'd0;
end
else
begin
c<=a*b;
end
可以在定义端口的时候直接将变量定义成有符号数
reg signed [3:0]data_a;
也可以在运算的时候用$signed函数将无符号数直接转换为有符号数:
wire [3:0]data_a;
wire signed [3:0]data_b;
assign data_b=$signed(data_a);
如果想将有符号数扩宽为更高位数的有符号数,可以将无符号数的最高位补充至最高位即可,举个例子-4,用四位二进制数表示为4’b1100,用八位二进制表示-4,只需在其前面补上4个符号位即可:8’b1111_1100。
wire signed [3:0]data_a;
wire signed [7:0]data_b;
assign data_b={4{data_a[3],data_a}};
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。