|
发表于 2016-3-18 16:42:46
|
显示全部楼层
dout <= (din_a*din_b)>>4;
是软件的思想,编译成汇编对应三个步骤,1、计算乘法的结果,2、把结果移位,3、再将结果赋值
Verilog是硬件,每步都要对应的硬件来实现的,顺序跟软件计算的是一样的,但这是硬件,不是软件,每个语句都对应一个确切的输入输出的硬件结构
你注释掉的才是确定的结构:第一句代表一个乘法器,第二句代表一组寄存器
进一步,你可以这样写:
module multiply(
input clk,
input signed [3:0] din_a, // bit3=符号位, bit2~bit0=整数位
input signed [7:0] din_b, // bit7=符号位, bit6~bit4=整数位, bit3~bit0=小数位
output signed [7:0] dout
);
reg signed [11:0] dout_r = 0;
always @ (posedge clk) begin
dout_r <= din_a*din_b;
end
assign dout = dout_r[11:4];
endmodule
这样dout可以提前一个周期输出结果。 |
|