📄 ripple_carry_mult.v
字号:
// N比特乘M比特的二进制行波进位乘法器
module ripple_carry_mult(x_in, y_in, p);
parameter N = 4,
M = 4;
input [N-1:0] x_in;
input [M-1:0] y_in;
output [N+M-1:0] p;
reg [N+M-1:0] p;
reg [M:0] cin[N:0], pin[N:0], cout[N:0], pout[N:0];
integer i, j;
always @(x_in or y_in)begin
for(i=0; i<=M-1; i=i+1)
cin[i][0] = 'b0;
pin[0] = 0;
for(i=0; i<=N-1; i=i+1)begin
for(j=0; j<=M-1; j=j+1)begin
basic_mul_cell(x_in[i], y_in[j], cin[i][j], pin[i][j],
cout[i][j], pout[i][j]);
cin[i][j+1] = cout[i][j];
if(j==0) p[i] = pout[i][j];
if(j>0) pin[i+1][j-1] = pout[i][j];
end
pin[i+1][M-1] = cin[i][M];
end
for(i=0; i<=M-1; i=i+1)
p[i+N] = pin[N][i];
end
// 下面的任务实现了图16.3中的基本单元的运算
task basic_mul_cell(input x_i, y_j, cin, pin, output cout, pout);
reg int_p;
begin
int_p = x_i & y_j;
cout = (cin & pin)|(cin & int_p)|(pin & int_p);
pout = cin ^ int_p ^ pin;
end
endtask
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -