乘法器的Verilog实现
实现一个无符号的乘法器电路
原理
乘法的原理实际上就是移位相加
/*
1 1 0 1(13)
* 1 1(3)
----------------
1 1 0 1
1 1 0 1
----------------
1 0 0 1 1 1(39)
*/
伪代码实现
A:被乘数,位宽N
B:乘数 ,位宽M
init i=0,acc=0
while i < N:
if (B[0] == 1)
acc = A+acc
else:
acc = acc
A = A << 1
B = B >> 1
i = i + 1
Verilog代码
模块接口设计
- 通过参数
N、M可以自由配置乘法器的位宽 o_mult_ready信号表明乘法器空闲,此书如果检测到i_data_valid信号,模块开始工作。o_result_valid高电平期间,表示输出结果有效。
multiplier #(
parameter N = 4,
parameter M = 4
)(
input i_clk ,
input i_rst_n ,
input i_data_valid ,
input [N-1:0] i_mult1 , //i_mult1 * i_mult2
input [M-1:0] i_mult2 ,
output [N+M-1:0] o_result ,
output o_result_valid ,
output o_mult_ready
);
Modelsim仿真

7337

被折叠的 条评论
为什么被折叠?



