verilog 8位乘法器构建(附门级电路失败构建)

这篇博客介绍了8位乘法器的构建过程,包括实验原理、行为级建模的Verilog代码实现、测试激励文件的编写、数码管接入电路的设计,以及在尝试门级建模时遇到的问题和失败经验。作者强调了Verilog作为硬件描述语言与软件编程思维的区别,并分享了构建乘法器的心得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8位乘法器的构建

实验原理

8位乘法器有多种构建方式

  1. 门级建模:先构建一位全加器,构建出16位全加器,构建1*8乘法器,将乘数a每一位与另一个乘数b相乘,结果加到最终结果里,然后左移一位进行下一步。(正文附录有失败方法可供参考)
  2. 数据流建模:乘数a每一位与乘数b相与,再将结果移相当的位相加,此方法太麻烦且很难使用循环,所以此报告不讨论。
  3. 行为建模:抽象算法,取出乘数a的一位,如果为1,则d相加结果,否则不进行任何操作,最后d左移一位(一开始把b的值赋给b)

行为级建模乘法器

verilog代码实现

module a8bitmulti(a,b,c,out1,out2,out3,out4);
	   input [7:0]a,b;//输入
	   output reg[15:0]c;
	   integer i,b1;
	   output reg[7:0] out1,out2,out3,out4;
     always @(a,b)
            begin
	           b1=a;
	           c = 16'b0000_0000_0000_0000;//结果赋初值
	           for (i=0;i<8;i=i+1)
		          begin
			         if(b[i] == 1) //如果为一就相加
				    c = c + b1;
		                  b1 = b1*2;//移位
		          end 
            end
endmodule

测试激励文件

verilog代码

// 8位乘法器的测试激励
`timescale 1us/1us
module test_multiple_8x8;
	reg[7:0] X,Y,c1,c2,c3,c4;
	wire[15:0] Z;
	
	a8bitmulti test(X,Y,Z);
	
	initial
	begin![]()
		X = 8'b00000000; Y = 8'b00000000;
	#10 X = 8'b01010100; Y = 8'b00000000;
	#10 X = 8'b10011010; Y = 8'b01010111;
	#10 X = 8'b10100111; Y
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值