⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ripple_carry_mult.v

📁 上传文件为:常用乘法器verilog设计.rar
💻 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 + -