阵列乘法器——(3,6,12)位阵列乘法器,推广到任意位,可仿真可综合。其中加法器可到之前文章查看。


module mult24(A,B,S);
	input	[23:0]A,B;
	output	[47:0]S;

	wire	[23:0]stage11,stage12,stage13,stage14;
	wire	[23:0]stage2;
	wire	stage2_c;
	wire	[23:0]stage31,stage32;

	//Stage1
	mult12	block1(A[11:0],B[11:0],stage11);
	mult12	block2(A[11:0],B[23:12],stage12);
	mult12	block3(A[23:12],B[11:0],stage13);
	mult12	block4(A[23:12],B[23:12],stage14);

	//Stage2
	adder24  block5(.A(stage12),.B(stage13),.S(stage2),.Cout(stage2_c));

	//Stage3
	adder24	block6(.A({{12{1'b0}},stage11[23:12]}),.B(stage2),.S(stage31),.Cout());
	adder24	block7(.A(stage14),.B({{11{1'b0}},stage2_c,stage31[23:12]}),.S(stage32),.Cout());

	assign	S = {stage32,stage31[11:0],stage11[11:0]};

endmodule
///ok
module mult12(A,B,S);	
	input	[11:0]A,B;
	output	[23:0]S;

	wire	[11:0]stage11,stage12,stage13,stage14;
	wire	[11:0]stage2;
	wire	stage2_c;
	wire	[11:0]stage31,stage32;

	//Stage1
	mult6	block1(A[5:0],B[5:0],stage11);
	mult6	block2(A[5:0],B[11:6],stage12);
	mult6	block3(A[11:6],B[5:0],stage13);
	mult6	block4(A[11:6],B[11:6],stage14);

	//Stage2
	adder12  block5(.A(stage12),.B(stage13),.S(stage2),.Cout(stage2_c));

	//Stage3
	adder12	block6(.A({{6{1'b0}},stage11[11:6]}),.B(stage2),.S(stage31),.Cout());
	adder12	block7(.A(stage14),.B({{5{1'b0}},stage2_c,stage31[11:6]}),.S(stage32),.Cout());

	assign	S = {stage32,stage31[5:0],stage11[5:0]};
endmodule

///ok
module mult6(A,B,S);
	input	[5:0]A,B;
	output	[11:0]S;

	wire	[5:0]stage11,stage12,stage13,stage14;
	wire	[5:0]stage2;
	wire	stage2_c;
	wire	[5:0]stage31,stage32;

//Stage1
	mult3	block1(A[2:0],B[2:0],stage11);
	mult3	block2(A[2:0],B[5:3],stage12);
	mult3	block3(A[5:3],B[2:0],stage13);
	mult3	block4(A[5:3],B[5:3],stage14);

//Stage2
	adder6  block5(.A(stage12),.B(stage13),.S(stage2),.Cout(stage2_c));

//Stage3
	adder6	block6(.A({3'b000,stage11[5:3]}),.B(stage2),.S(stage31),.Cout());
	adder6	block7(.A(stage14),.B({2'b00,stage2_c,stage31[5:3]}),.S(stage32),.Cout());

	assign	S = {stage32,stage31[2:0],stage11[2:0]};
endmodule

ok
module mult3(A,B,S);
	input [2:0] A;
	input [2:0] B;
	output [5:0] S;

	wire [2:0] P0, P1, P2;
	wire c0, c1, c2, c3, c4, s1, s2;

// stage 1
	assign P0[2] = A[2] & B[0];
	assign P0[1] = A[1] & B[0];
	assign P0[0] = A[0] & B[0];

// stage 2
	assign P1[2] = A[2] & B[1];
	assign P1[1] = A[1] & B[1];
	assign P1[0] = A[0] & B[1];

// stage 3
	assign P2[2] = A[2] & B[2];
	assign P2[1] = A[1] & B[2];
	assign P2[0] = A[0] & B[2];

// Add all stages
	assign S[0] = P0[0];
	FA  block1(.a(P0[1]),.b(P1[0]),.cin(0),.s(S[1]),.cout(c0));
	FA  block2(.a(P0[2]),.b(P1[1]),.cin(P2[0]),.s(s1),.cout(c1));
	FA  block3(.a(c0),.b(s1),.cin(0),.s(S[2]),.cout(c2));
	FA  block4(.a(P2[1]),.b(P1[2]),.cin(c1),.s(s2),.cout(c3));
	FA  block5(.a(c2),.b(s2),.cin(0),.s(S[3]),.cout(c4));
	FA  block6(.a(c4),.b(P2[2]),.cin(c3),.s(S[4]),.cout(S[5]));
endmodule

ok
module FA(a,b,cin,s,cout);
	input a,b,cin;
	output s,cout;

	wire g,p,c1;

	and(g,a,b);
	xor(p,a,b);
	xor(s,p,cin);

	and(c1,p,cin);
	or(cout,c1,g);
endmodule

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 补码阵列乘法器是一种硬件电路,用于执行乘法操作。在 Logisim 中实现 6 补码阵列乘法器需要以下步骤: 1. 首先,创建一个 Logisim 电路,并在电路图中添加一个时钟信号和两个 6 补码输入端口。 2. 使用 Logisim 提供的元件,实现一个 6 全加器电路,用于执行加法操作。 3. 将两个 6 补码输入分别连接到两个 6 全加器电路的输入端口中,并连接时钟信号以完成电路的时序控制。 4. 通过串联多个全加器电路,实现乘法的部分积逐计算。具体而言,6 补码阵列乘法器可以由 6 个全加器电路按相连组成,完成部分积的计算。 5. 在电路图中添加一个 12 寄存器,以存储部分积的结果。 6. 将各个全加器电路的输出连接到寄存器的输入端口中,以便将结果存储到寄存器中。 7. 添加一个计数器电路,用于控制乘法操作的进行。 8. 将计数器的输出连接到电路中完成计算的控制逻辑,使得乘法操作在恰当的时钟脉冲下执行。 9. 将寄存器的输出连接到输出端口,以便读取乘法结果。 总之,通过合理地设计和连接元件,可以在 Logisim 中实现一个 6 补码阵列乘法器。这个乘法器可以执行两个 6 补码的乘法运算,并将结果输出。 ### 回答2: 6补码阵列乘法器是一种用于对两个6二进制补码进行相乘的电路。在logisim软件中,可以使用逻辑门和触发器等基本逻辑元件来模拟这个电路。 首先,将两个6补码分别输入到电路的输入端。这两个6补码分别表示被乘数和乘数。然后,使用逻辑门和触发器等元件来实现乘法运算。具体的步骤如下: 1. 首先,通过两个6全加器,分别对被乘数和乘数的每一进行加法运算。将两个6全加器的结果作为乘法器的输入。 2. 接下来,使用一组逻辑门(例如AND门和OR门),对全加器的输出进行逻辑运算。通过逻辑门的连接,将两个6全加器的输出连接到一起,得到乘法运算的中间结果。 3. 然后,使用一组触发器(例如JK触发器)来存储和传输中间结果。通过将触发器的输入和输出连接到逻辑门上,可以实现数据的传输和存储。 4. 最后,使用一组逻辑门和触发器来实现6补码的结果输出。通过将输出触发器的输出连接到一组逻辑门上,可以将结果输出到电路的输出端。 这样,就可以实现6补码阵列乘法器。在logisim软件中,可以通过逻辑元件的连接和设置来模拟这个电路,并且可以通过输入不同的6二进制补码来进行测试和验证。 ### 回答3: 6补码阵列乘法器是一种数字电路,用于实现两个6补码数的乘法运算。这种乘法器可以使用logisim软件进行模拟和设计。 首先,我们需要将输入的两个6补码数分别拆分为符号、整数部分和小数部分。符号用于表示数的正负,整数部分和小数部分用于表示数的大小。然后,我们需要对输入的两个数进行乘法运算。 在实现乘法运算时,我们可以使用乘-累加算法。具体操作如下: 1. 将第一个补码数乘以第二个补码数的每一,并将乘积结果先存储在一个数组中。 2. 对乘积数组中的每一进行累加,得到最终的乘积结果。如果乘积结果的数超过6,则需要进行舍入操作。 3. 判断乘积结果的符号,并输出最终的6补码乘积。 在logisim软件中,我们可以使用逻辑门和触发器等基本组件来实现乘法运算。首先,我们可以使用多路选择器将两个数的每一进行选择和传输。然后,通过逻辑门和触发器等组件完成乘-累加算法中的乘法和累加操作。最后,使用MUX选择器来选择和传输输出的6补码乘积。 通过使用logisim软件进行模拟和设计,我们可以验证和调试6补码阵列乘法器的功能,并确保其正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值