4FPGA实验报告8位乘法器—徐艺萍
基于FPGA的8位硬件乘法器设计
本科毕业设计基于FPGA的8位硬件乘法器设计摘要VHDL(VHSIC Hardware Description Language)是当今最流行的硬件描述语言之一,能够对最复杂的芯片和最完整的电子系统进行描述。
以硬件描述语言作为设计输入,经过简单的综合与布局,快速烧录至FPGA(Field Programmable Gate Array)上进行测试,是现代IC设计验证的技术主流。
乘法器是处理器进行科学计算和数字信号处理的基本硬件结构,是现代微处理器中的重要部件。
乘法器完成一次乘法操作的周期基本上决定了微处理器的主频。
本文基于FPGA,采用VHDL语言,结合MAX+plusⅡ这个强大的软件平台设计了8位二进制乘法器,并对其进行符号扩展,使其可以统一处理8位带符号数和无符号数。
高速乘法器设计通常分为三个关键步骤:部分积产生、部分积累加和最终结果获得。
本文对部分积产生过程采用改进Booth算法,有效减少部分积加法项;为了统一带符号和无符号数,对部分积进行符号扩展;而对部分积的累加则采取3-2压缩器和4-2压缩器进行压缩;最终结果的获得则以一个根据部分积累加结果到达时间的不同进行延迟优化的选择进位加法器将累加结果和累加进位相加而得。
关键词:乘法器改进Booth算法压缩器选择进位加法器The Circuit Design of 8-bit Hardware Multiplier Based on FPGAKe Xiuyan(College of Engineering, South China Agricultural University, Guangzhou 510642, China) Abstract: VHSIC Hardware Description Language, one of today's most popular hardware description languages, is used to describe the most complex chip and most complete electronic systems.The multiplier is not only the basic hardware structure of the processor for scientific computing and digital signal processing but also an important component of modern microprocessors. This design for 8-bit binary multiplier is based on FPGA, using VHDL language, and proved by the MAX+plusⅡsoftware platform. The multiplicand has an extended sign bit so that the multiplier can unify 8-bit signed and unsigned.High-speed multiplier design is usually divided into three key steps: partial product generation circuit, accumulator and adder. In this paper, the partial product generation process uses the modified Booth algorithm, so that the partial product addition terms can be effectively reduced. The accumulation of partial products takes 3-2 compressor and 4-2 compressor to compress. The final result is obtained with select carry adder.Key words: multiplier the modified Booth algorithm compressor select carry adder目录1 前言 (1)1.1 乘法器的研究背景和意义 (1)1.2 乘法器的研究发展状况 (1)2 总体方案确定 (2)2.1 乘法器设计方案 (2)2.2 硬件描述语言VHDL (3)2.2.1 硬件描述语言 (3)2.2.2 VHDL语言简介 (3)2.2.3 VHDL的基本结构 (4)2.2.4 VHDL的优点 (4)2.3 实验工具MAX+plusⅡ (5)2.3.1 MAX+plusⅡ简介 (5)2.3.2 MAX+plusⅡ的设计流程 (6)2.3.3 MAX+plusⅡ的特点 (6)2.4 现场可编辑门阵列(FPGA) (7)2.4.1 FPGA简介 (7)2.4.2 FPGA的基本结构 (7)2.4.3 FPGA的特点 (8)3 理论分析及设计 (9)3.1 乘法器的数据格式 (9)3.1.1 二进制的表示 (9)3.1.2 无符号数的运算 (9)3.1.3 带符号数的运算 (9)3.1.4 带符号数的符号扩展表示 (9)3.2 乘法器算法 (10)3.2.1 移位相加算法 (10)3.2.2 Booth算法 (11)3.2.3 改进型Booth算法 (12)3.3 加法器 (15)3.3.1 半加器 (15)3.3.2 全加器 (16)3.3.3 串行进位加法器 (16)3.3.4 超前进位加法器 (17)3.3.5 选择进位加法器 (18)3.4 压缩器 (19)4 测试与试验分析 (22)4.1 乘法器的总体结构 (22)4.2 乘法器各个模块的仿真 (23)4.2.1 Booth编码器 (23)4.2.2 Booth译码器 (23)4.2.3 部分积产生电路 (24)4.2.4 压缩器 (25)4.2.5 加法器 (26)4.2.6 顶层文件 (27)5 结论 (28)参考文献 (29)附录 (30)致谢 (33)毕业设计成绩评定表1 前言1.1 乘法器的研究背景和意义微电子技术的迅猛发展,计算机技术的不断进步,带动了集成电路工艺的不断增进,数字芯片的集成度不断提高。
中山学院EDA综合实验报告-8位硬件乘法器设计
在实验老师的指导下,我圆满完成了实验任务,有了不少收获,其中了解到了移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的电路优势,并且在加深了如何通过VerilogHDL生成原理图器件并进行相应仿真,最后学习了应用移位相加原理设计8位乘法器。
3、ADDER8BT的仿真图及分析
如图所示,红色剪头表示8+11=19,绿色剪头表示8+9=17,紫色剪头表示8+9+1=18,这说明S=A+B+CIN。
4、完整乘法器的仿真图及分析
如图所示,红色剪头表示外部按键START按下(给SREG8BT的LOAD高电平)时给ARIEND一个高电平输出,绿色剪头处的Q为31104,而31104<<1结果为0xF300,此处最高位为0xF3,即相乘的结果为0xF3,这里表示B的数值0xF3乘以A的数值0xC8第4位再加上前3位的结果,因为前3位相乘后的结果为0,因此这里相乘的结果为0xF3,紫色剪头也是同理。
如图所示,在第一个2,此时输出Q=1536,其二进制表示为0000 0110 0000 0000,由VerilogHDL代码可知R16S[6:0]<=R16S[7:1]即R16S[6:0] = 0,R16S[15:7] = 12,此结果与Q输出结果一致绿色剪头与紫色剪头也是同理。
学生实验报告
系别
电子信息学院
课程名称
《EDA综合实验》
班级
实验名称
8位硬件乘法器设计
姓名
实验时间
学号
指导教师
成绩
批改时间
报告内容
一、实验目的和任务
1、学习应用移位相加原理设计8位乘法器。
2、了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的
ASIC系统设计实验报告八位乘法器
八位乘法器的设计汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。
由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。
随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。
本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。
1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。
本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。
图1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。
下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。
由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。
)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程图3 四位二进制乘法结构图从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。
FPGA实验分析报告()
FPGA实验报告()————————————————————————————————作者:————————————————————————————————日期:武汉工程大学电气信息学院《FPGA与硬件描述语言》实验报告[ 1 ]专业班级13电信01班实验时间2015 年 10 月 12 日学生学号1304201426 实验地点4B 315学生姓名曾维颖指导教师曹新莉实验项目闪烁的LED实验类别基础实验实验学时4学时实验目的及要求1.掌握QuartusII设计电路的基本流程,熟悉VHDL程序,分别设计分频电路,LED 闪烁延时计数程序。
2.将设计好的LED闪烁电路程序下载到DEII开发板上进行实物测试。
成绩评定表类别评分标准分值得分合计上机表现按时出勤、遵守纪律认真完成各项实验内容30分报告质量程序代码规范、功能正确填写内容完整、体现收获70分说明:评阅教师:日期: 2015年月日实验内容(说明:此部分应包含:实验内容、实验步骤、实验数据与分析过程等)一、实验内容1.用VHDL语言设计分频器,得到0.1Hz——1Hz 的时钟信号;2.设计闪烁延时程序,控制发光二极管的闪烁。
二、实验方法与步骤分频电路的产生1. 分频原理:(50MHz晶振信号怎样分频成你所需要的低频信号。
)50MHz=50×100×100×100Hz,这样就需要1个50Hz分频器,3个100Hz分频器2.50分频器:源程序如下(记作cnt50)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt50 isport( clk : in std_logic;en : in std_logic;clr : in std_logic;cout: out std_logic;q : buffer std_logic_vector (5 downto 0));end cnt50;architecture one of cnt50 isbeginprocess(clk,clr) beginif clr='1' then q<="000000";elsif clk'event and clk='1' thenif en='1' then if q="110001"then q<="000000";else q<=q+1;end if;end if;end if;if q="110001"then cout<='1'; else cout<='0';end if;end process;end one;3.100分频器:(记作cnt100)源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt100 isport( clk : in std_logic;en : in std_logic;clr : in std_logic;cout: out std_logic;q : buffer std_logic_vector (6 downto 0));end cnt100;architecture one of cnt100 isbeginprocess(clk,clr) beginif clr='1' then q<="0000000";elsif clk'event and clk='1' thenif en='1' then if q="1100011"then q<="0000000";else q<=q+1;end if;end if;end if;if q="1100011"then cout<='1'; else cout<='0';end if;end process;end one;4. LED闪烁定时电路:源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt5 isport( clk : in std_logic;en : in std_logic;clr : in std_logic;cout: out std_logic;q : buffer std_logic_vector (2 downto 0));end cnt5;architecture one of cnt5 isbeginprocess(clk,clr) beginif clr='1' then q<="000";elsif clk'event and clk='1' thenif en='1' then if q="100"then q<="000";else q<=q+1;end if;end if;end if;if q="100"then cout<='1'; else cout<='0';end if;end process;end one;5. 顶层文件,将所有底层原件集成为顶层设计文件:三、实验数据与结果分析t50波形图t100波形图实验总结(说明:总结实验认识、过程、效果、问题、收获、体会、意见和建议。
FPGA实验报告
FPGA实验报告FPGA专业:电子信息科学与技术EDA实验一一(实验内容:用原理图输入法设计8位全加器,具体要求参见教材第六章“原理图输入设计方法“的实验与设计部分(6-1) 二(实验目的1、熟悉利用MAX+plus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法;2、通过一个8位全加器的设计把握利用EDA软件进行电子线路设计的详细流程‘三(实验原理一个8位全加器可以由8个1一位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的低位进位输入信号cin相连。
四(实验内容1、设计一位半加器和一位全加器;2、根据1设计8位全加器。
五(实验过程及结果分析(1)半加器原理图如下:波形图如下:封装后如下:(2)一位全加器波形图如下:延迟分析:封装后如下:(3)八位全加器波形图延迟分析:六、总结1 仿真结果都比较理想。
2为了提高加法器的速度,可以采用流水线技术来进行设计以提高数字电路的整体运行速度。
流水线技术就是把在一个时钟周期内执行的操作分成几步较小的操作,并在多个较高速的时钟内完成。
EDA实验二一(实验内容:简单组合电路与时序电路的设计,具体要求参见教材第四章“VHDL设计初步”中的实验与设计(4-1,4-2)。
二(实验目的:熟悉MAX+plus2的VHDL文本设计流程全过程,学习组合电路的设计,多层次电路设计,仿真和硬件测试。
三(实验内容1:利用MAX+PLUS2完成2选1多路选择器的文本编辑输入和仿真测试等步骤。
实验内容2 :引脚锁定以及硬件下载测试。
四(实验报告:1(简单组合电路的设计(1)2选1多路选择器程序如下:波形如下:(2)波形如下:2(简单时序电路的设计 (1)实验内容一:设计触发器程序如下:(2)实验内容二:设计锁存器EDA实验三一(实验内容:8位十六进制频率计设计,具体要求参见教材第五章“VHDL设计进阶”中的实验与设计(5-5)。
1FPGA实验报告4位全加器—徐艺萍
1FPGA实验报告4位全加器—徐艺萍试验⼀4位全加器实验1.实验原理全加器能进⾏加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进位信号。
全加器的真值表如表1所⽰。
表1 全加器真值表4位全加器可以采⽤四个1位全加器级连成并⾏相加串⾏进位的加法器,实现框图如图1所⽰,其中CSA为1位全加器。
由图可以看出,每1位的进位信号送给下1位作为输⼊信号,因此,任1位的加法运算必须在低1位的运算完成之后才能进⾏,因此它的延迟⾮常可观,⾼速运算肯定⽆法胜任。
图1 4位串⾏进位加法器实现框图在图1中,A和B为加法器的输⼊位串,对于四位全加器则位宽为4位,D 为加法器输出位串,和输⼊位串相同,C为进位输⼊( Ci ) 或输出( Co )。
实现代码为:module adder4(cout,sum,ina,inb,cin);output[3:0] sum;output cout;input[3:0] ina,inb;input cin;assign {cout,sum}=ina+inb+cin;endmodule2.实验⽬的⒈熟悉ISE9.1 开发环境,掌握⼯程的⽣成⽅法;⒉了解Verilog HDL语⾔在FPGA 中的使⽤;⒊了解4位全加器的Verilog HDL语⾔实现。
3.实验内容⒈⽤Verilog HDL语⾔设计4位全加器,进⾏功能仿真验证。
⒉使⽤Chipscope Pro ⽣成VIO/ICON 核,在线观测调试。
4.实验准备⒈将USB 下载电缆与计算机及XUPV2Pro 板的J8 连接好;⒉将RS232 串⼝线⼀端与计算机连接好,另⼀端与板卡的J11 相连接;⒊启动计算机,当计算机启动后,将XUPV2Pro 板的电源开关SW11 打开到ON 上。
观察XUPV2Pro 板上的+2.5V,+3.3V,+1.5V 的电源指⽰灯是否均亮。
若有不亮的,请断开电源,检查电源;5.实验步骤⒈创建⼯程及设计输⼊⑴在E:\project\⽬录下,新建名为count8的新⼯程器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30 ff896 -7”,综合⼯具(Synthesis Tool)选“XST (VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator(VHDL/Verilog)”。
8位乘法器的设计
8位乘法器的设计1.实验目的1)学习MAX+plus II软件的基本使用方法。
2)了解VHDL程序的基本逻辑电路的综合设计。
2.实验内容设计并调试好一个8位乘法器,并用MAX+plus II实验开发系统进行系统仿真。
这里的设计思路是由8位加法器构成的以时序逻辑方式设计的8位乘法器。
乘法通过逐位相加原理来实现,从被乘数的最低为开始,若为1,则被乘数左移后与上一次和相加;若为0,左移后与全零相加,直至被乘数的最高位。
8为乘法器有乘法运算控制电路ARICTL、8位右移寄存器SREG8B、16为锁存器REG16B、选通与门ANDARITH、和8位加法器的ADDER8B逻辑构成。
3.实验条件1)开发软件:MAX+plus II。
2)实验设备:装有VISTA系统电脑一台。
4.实验设计1)系统的原理框图2)VHDL源程序--选通与门模块的源程序ANDARITH.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH ISPORT(ABIN: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;--4位二进制并行加法器的源程序ADDER4B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC);END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL A5,B5: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGINA5<='0'&A4;B5<='0'&B4;S5<=A5+B5+C4;S4<=S5(3 DOWNTO 0);CO4<=S5(4);END ARCHITECTURE ART;--8位二进制加法器的源程序ADDER8B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC);END COMPONENT ADDER4B;SIGNAL SC: STD_LOGIC;BEGINU1: ADDER4BPORT MAP(C4=>CIN,A4=>A(3 DOWNTO 0),B4=>B(3 DOWNTO 0), S4=>S(3 DOWNTO 0),CO4=>SC);U2: ADDER4BPORT MAP(C4=>SC,A4=>A(7 DOWNTO 4),B4=>B(7 DOWNTO 4), S4=>S(7 DOWNTO 4),CO4=>COUT);END ARCHITECTURE ART;--6位锁存器的源程序REG16B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(CLK,CLR)ISBEGINIF CLR='1' THEN R16S<="0000000000000000";ELSIF CLK'EVENT AND CLK= '1' THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ARCHITECTURE ART;--8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK,LOAD)ISBEGINIF CLK'EVENT AND CLK='1' THENIF LOAD='1' THEN REG8B<=DIN;ELSE REG8B(6 downto 0)<=REG8B(7 DOWNTO 1);END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;--乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC;ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF START='1'THEN CNT4B<="0000";ELSIF CLK'EVENT AND CLK='1'THENIF CNT4B<8 THENCNT4B <=CNT4B+1;END IF;END IF;END PROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIF START='0' THENIF CNT4B<8 THENCLKOUT <=CLK;ARIEND<='0';ELSE CLKOUT<='0';ARIEND<='1';END IF;ELSE CLKOUT<=CLK;ARIEND<='0';END IF;END PROCESS;END ARCHITECTURE ART;--8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC;ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8),B=>S5,S=>S6(7 DOWNTO 0),COUT=>S6(8));U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.实验结果及总结1)系统仿真情况输入值A=0AH、B=0CH,结果DOUT=0078H;输入值A=0CH、B=0AH,结果DOUT=0078H;输入值A=02H、B=03H,结果DOUT=0006H;仿真图如下:2)仿真分析当START输入信号为“1”,REG16B清零和被乘数A[7..0]向移位寄存器加载。
最新乘法器实验报告
最新乘法器实验报告实验目的:本实验旨在验证乘法器的工作原理,并通过实际操作加深对数字电路中乘法运算实现的理解。
通过构建和测试不同的乘法器电路,我们将分析其性能和适用场景,以及可能的改进方向。
实验设备和材料:1. FPGA开发板2. 集成电路芯片(包括乘法器芯片)3. 示波器4. 电源5. 连接线和面包板6. 计算机辅助设计(CAD)软件7. 数字逻辑分析仪实验步骤:1. 设计一个基本的乘法器电路图,使用CAD软件进行电路模拟。
2. 根据电路图在FPGA开发板上搭建实际电路。
3. 准备测试向量,包括一系列的二进制数值,用于乘法器的输入。
4. 连接电源,使用示波器观察乘法器的输出结果。
5. 对输出结果进行分析,验证其正确性,并记录在实验报告中。
6. 改变输入值,重复步骤4和5,以测试乘法器对不同输入的处理能力。
7. 使用数字逻辑分析仪进一步分析乘法器的性能,包括运算速度和资源消耗。
8. 根据实验结果,提出可能的改进措施和乘法器的应用前景。
实验结果:在本次实验中,我们成功搭建并测试了一个基本的乘法器电路。
通过对不同输入值的测试,我们发现乘法器能够准确地计算出两个二进制数的乘积。
实验数据显示,乘法器的运算速度和资源消耗符合预期,但在处理大数值乘法时存在一定的局限性。
讨论与改进:实验结果表明,所构建的乘法器在处理小数值乘法时表现良好,但在处理大数值时,由于资源限制和运算速度的约束,性能有所下降。
为了改进这一点,可以考虑使用更高效的算法,如Booth算法或Wallace 树算法,来优化乘法器的设计。
此外,通过优化电路布局和使用更高性能的集成电路,也可以提高乘法器的整体性能。
结论:通过本次实验,我们验证了乘法器的基本原理和工作性能,并通过实际操作加深了对其设计和应用的理解。
未来的研究可以集中在提高乘法器的运算速度和减少资源消耗上,以适应更广泛的应用需求。
EDA_8位乘法器_实验报告
南华大学船山学院实验报告(2009 ~2010 学年度第二学期)课程名称EDA实验名称8位乘法器姓名学号专业计算机科学与班级01技术地点8-212 教师一、实验目的:学习和了解八位乘法的原理和过程二、设计思路:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD 器件外接ROM 九九表的乘法器则无法构成单片系统,也不实用。
这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA 构成实验系统后,可以很容易的用ASIC 大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
三、实验逻辑图:四、实验代码:1) 选通与门模块的源程序ANDARITH.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS PORT (ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0) DOUT:OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END ANDARITH;ARCHITECTURE ART OF ANDARITH IS BEGINPROCESS (ABIN ,DIN) BEGINFOR I IN 0 TO 7 LOOPDOUT (I)<=DIN (I)AND ABIN; END LOOP;ARICTLCLKEND PROCESS;END ART;2) 16位锁存器的源程序REG16B.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS PORT (CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR (8 DOWNTO 0)Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN PROCESS (CLK,CLR)BEGINIF CLR = '1' THEN R16S<= "0000000000000000";ELSIF CLK'EVENT AND CLK = '1'THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ART;3) 8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT (CLK:IN STD_LOGIC; LOAD :IN STD _LOGIC; BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0);QB:OUT STD_LOGIC );END SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS (CLK,LOAD)BEGINIF CLK'EVENT AND CLK= '1' THENIF LOAD = '1' THEN REG8<=DIN;ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<= REG8 (0);END ART;4) 乘法运算控制器的源程序ARICTL.VHD LIBRARYUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT ( CLK:IN STD_LOGIC; START:INSTD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUTSTD_LOGIC;ARIEND:OUT STD_LOGIC );END ARICTL;ARCHITECTURE ART OF ARICTL IS SIGNAL CNT4B:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINRSTALL<=START;PROCESS (CLK,START)BEGINIF START = '1' THEN CNT4B<= "0000";ELSIF CLK'EVENT AND CLK = '1' THENIF CNT4B<8 THENCNT4B=CNT4B+1;END IF;END IF;END PROCESS;PROCESS (CLK,CNT4B,START)BEGINIF START = '0' THENIF CNT4B<8 THENCLKOUT <=CLK; ARIEND<= '0';ELSE CLKOUT <= '0'; ARIEND<= '1';END IF;ELSE CLKOUT <=CLK; ARIEND<= '0';END IF;END PROCESS;END ART;5) 8位乘法器的源程序MULTI8X8.VHDLIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTLPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC; ARIEND:OUT STD_LOGIC);END COMPONENT;COMPONENT ANDARITHPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT_STD_LOGIC_VECTOR( 7 DOWNTO 0) ); END COMPONENT;COMPONENT ADDER8B...COMPONENT SREG8B...COMPONENT REG16B...SIGNAL GNDINT:STD_LOGIC;SIGNALINTCLK:STD_LOGIC;SIGNAL RSTALL:STD_LOGIC;SIGNAL QB:STD_LOGIC;SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINDOUT<=DTBOUT;GNDINT<= '0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND); U2:SREG8B PORT MAP(CLK=>INTCLK,LOAD=>RSTALL.DIN=>B,QB=>QB);U3:ANDARITH PORT MAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);U4:ADDER8B PORTMAP(CIN=>GNDINT,A=>DTBOUT(15 DOWNTO 8),B=>ANDSD,S=>DTBIN(7 DOWNTO 0),COUT=>DTBIN(8));U5:REG16B PORT MAP(CLK =>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT);END ART;五、实验结果:六、实验心得:通过本实验基本上了解了八位乘法的工作原理:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
8位二进制乘法器设计报告
EDA课程设计报告------8位二进制乘法器设计班级:学号:姓名:目录一.八位乘法器的设计要求与设计思路••2.1 设计目的••2.2 设计要求••二.八位乘法器的综合设计••3.1 八位乘法器功能••3.2 八位乘法器设计方案••3.3 八位乘法器各功能模块VHDL描述及仿真图形••3.4 八位乘法器顶层模块VHDL设计及下载验证••心得体会••参考文献••一、八位乘法器的设计要求与设计思路1.1实验目的学习并掌握应用8位二进制乘法器的原理、设计、分析和测试方法1.2实验内容利用移位相加原理设计一个8位二进制乘法器。
1.3实验要求用VHDL编写代码,下载验证,并用8段数码管显示乘数和乘积。
二、八位乘法器的综合设计2.1 八位乘法器功能通过调节实验板,输入8位二进制的A和B,八位乘法器能实现其乘积,并在数码管上面显示出来其结果。
2.2乘法器设计方案该乘法器是有由8 位加法器构成的以时序方式设计的8 位乘法器,采用逐项移位相加的方法来实现相乘。
用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下图(a)下面分解8 位乘法器的层次结构,分为以下4 个模块:①右移寄存器模块:这是一个8 位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
②加法器模块:这是一个8 位加法器,进行操作数的加法运算。
③1 位乘法器模块:完成8 位与1 位的乘法运算。
④锁存器模块:这是一个16 位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
FPGA课程设计实验报告
合肥工业大学大学实验报告课程名称: FPGA设计实验名称:移位乘法器设计 & 8位Booth乘法器设计*名:**学号: ********班级:电子科学与技术11-1班指导教师:**合肥工业大学电子科学与应用物理学院制移位乘法器一、实验原理移位和相加乘法原理,乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数右移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
移位乘法器工作流程图二、实验步骤算法主程序module MUL(A,B,data);input [7:0] A;input [7:0] B;output [15:0] data;wire [15:0] data;reg [7:0] D;reg [7:0] A1;reg [7:0] B1;reg C;always @(A or B)beginA1 = A;B1 = B;D = 0;C = 0;repeat(8)beginif(A1[0]==1){C,D} = D + B1;else{C,D} = D + 0;{C,D,A1} = {C,D,A1} >> 1;endendassign data = {D,A1};endmodule移位乘法器测试文件module test;reg [7:0] A;reg [7:0] B;// Outputswire [15:0] data;// Instantiate the Unit Under Test (UUT) MUL uut (.A(A),.B(B),.data(data));initial begin// Initialize InputsA = 0;B = 0;// Wait 100 ns for global reset to finish#20;A = 8'b0000_0010;B = 8'b0000_1101;// Add stimulus hereendendmodule三、实验结果及分析2进制输入输出结果10进制输入输出结果四、体会通过移位乘法器的设计,简单的了解了ISE软件的基本功能,主要菜单选项,以及如何建立一个工程,如何在工程里面写程序和进行编译和综合等。
8位乘法器的程序
8位乘法器的程序8--------- 发表时间2002-5-11-20:53:38 - 来自218.70.61.5 - 佚名的人环境:xilinx ise 4.1+modelsim,我很菜,请多指教entity mult8x8 isPort ( DIN1 : in std_logic_vector(7 downto 0);DIN2 : in std_logic_vector(7 downto 0);CLK : in std_logic;RESET : in std_logic;DONE : out std_logic;DOUT : out std_logic_vector(15 downto 0));end mult8x8;architecture Behavioral of mult8x8 issignal temp,result1,result2 : std_logic_vector(15 downto 0);signal lb,thend : std_logic;beginprocess(CLK,RESET)variable i : integer range 0 to 7;beginif CLK='1' and CLK'event thenif RESET='1' theni:=0;thend<='0';temp<="00000000"&DIN1;lb<=DIN2(0);elsetemp<=temp(14 downto 0)&'0';if i<7 then i:=i+1;lb<=DIN2(i);else i:=0;lb<='0';thend<='1';end if;end if;end if;end process;process(temp)beginif lb='1' then result1<=temp;else result1<="0000000000000000";end if;end process;process(RESET,result1)beginif RESET='1' then result2<="0000000000000000";elseresult2<=result2+result1;end if;end process;process(thend)beginif thend='1' then DOUT<=result2;DONE<='1';else DONE<='0';DOUT<="0000000000000000";end if;end process;end Behavioral;佚名的人的Email: 个人主页: <-回应|<-返回|正确程序如下:--------- 发表时间2002-5-13-15:19:13 - 来自218.17.88.139 - Dick Houlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity mult8x8 isPort ( DIN1 : in std_logic_vector(7 downto 0);DIN2 : in std_logic_vector(7 downto 0);CLK : in std_logic;RESET : in std_logic;DONE : out std_logic;DOUT : out std_logic_vector(15 downto 0));end mult8x8;architecture Behavioral of mult8x8 issignal temp,result1,result2 : std_logic_vector(16 downto 0);signal lb,thend : std_logic;beginprocess(CLK,RESET)variable i : integer range 0 to 8;beginif CLK='1' and CLK'event thenif RESET='1' theni:=0;thend<='0';temp<="000000000"&DIN1;lb<=DIN2(0);elsetemp<=temp(15 downto 0)&'0';if i<=7 thenlb<=DIN2(i);i:=i+1;elsei:=0;lb<='0';thend<='1';end if;end if;end if;end process;process(temp)beginif lb='1' thenresult1<=temp;elseresult1<="00000000000000000";end if;end process;process(CLK,RESET,result1,thend)beginif CLK'event and CLK='0' thenif RESET='1' thenresult2<="00000000000000000";elsif thend='0' thenresult2<=result2+result1;end if;end if;end process;process(thend)beginif thend='1' thenDOUT<=result2(16 downto 1);DONE<='1';elseDONE<='0';DOUT<="0000000000000000";end if;end process;end Behavioral;请仔细对比我的程序和你的不同之处,找出你的程序有哪些错误。
4FPGA实验报告8位乘法器—徐艺萍
实验四8位乘法器实验一、实验原理8位乘法器,输入为两个8位信号,输出结果为16位。
module mult8(out, a, b); //8位乘法器源代码parameter size=8;input[size-1:0] a,b; //两个操作数output[2*size-1:0] out; //结果assign out=a*b; //乘法运算符endmodule本实验采用Chipscope-Pro生成VIO/ICON核,并插入到8位乘法器设计中,在线进行观测和调试。
二、实验目的1. 熟悉ISE9.1 开发环境,掌握工程的生成方法;2. 熟悉SEED-XDTK XUPV2Pro 实验环境;3. 了解Verilog HDL语言在FPGA 中的使用;4. 通过掌握8位乘法器的Verilog HDL设计,了解数字电路的设计。
三、实验内容1. 用Verilog HDL语言设计8位乘法器,进行功能仿真验证。
2. 使用chipscope-Pro 生成VIO/ICON 核,在线观测调试。
四、实验准备1. 将USB 下载电缆与计算机及XUPV2Pro 板的J8 连接好;2. 将RS232 串口线一端与计算机连接好,另一端与板卡的J11 相连接;3. 启动计算机,当计算机启动后,将XUPV2Pro 板的电源开关SW11 打开到ON 上。
观察XUPV2Pro 板上的+2.5V,+3.3V,+1.5V 的电源指示灯是否均亮。
若有不亮的,请断开电源,检查电源。
五、实验步骤⑴创建工程及设计输入①在E:\project\目录下,新建名为mult8的新工程;器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30 ff896 -7”,综合工具(Synthesis Tool)选“XST (VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”②设计输入并保存。
8位乘法器
8位乘法器一:8位乘法器的源程序:module mult8( p, a, b);parameter size = 8;input [size:1] a, b;output [2* size:1] p;reg [2* size:1] p;always @( a or b)Begin:multinteger index;p = 0;for(index=1; index<=size; index=index+1)if (b[index]==1)p = p + (a<<(index));endendmodule二:8位乘法器的测试代码:`timescale 1ns/1ns`include "mult8.v"module tb_mult8;reg[8:1] ina,inb;wire[16:1] p;mult8 tb_mult8(p,ina,inb);initialbegin#10 ina={$random}%255;inb={$random}%255;#10 ina={$random}%255;inb={$random}%255;#10 ina={$random}%255;inb={$random}%255;#10 $finish;endinitial $monitor($time,,,"%d*%d=%d",ina,inb,p);endmodule三:Transcript显示结果:# Reading D:/altera/91/modelsim_ase/tcl/vsim/pref.tcl# Loading project adder# reading D:\altera\91\modelsim_ase\win32aloem/../modelsim.ini# Loading project mult# reading D:\altera\91\modelsim_ase\win32aloem/../modelsim.ini# Loading project mult# Compile of mult8.v was successful.# Compile of tb_mult8.v failed with 1 errors.# 2 compiles, 1 failed with 1 error.# Compile of tb_mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# ** Error: (vsim-3033) E:/mult/tb_mult8.v(11): Instantiation of 'initial$monitor' failed. The design unit was not found.# Region: /tb_mult8# Searched libraries:# E:\mult\work# Error loading design# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# ** Error: (vsim-3033) E:/mult/tb_mult8.v(11): Instantiation of 'initial$monitor' failed. The design unit was not found.# Region: /tb_mult8# Searched libraries:# E:\mult\work# Error loading design# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Error: (vsim-3033) E:/mult/tb_mult8.v(12): Instantiation of 'initial$monitor' failed. The design unit was not found.# Region: /tb_mult8# Searched libraries:# E:\mult\work# Error loading design# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'a'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'b'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 0*10= x# ** Note: $finish : E:/mult/tb_mult8.v(10)# Time: 20 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 10quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'a'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'b'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 0*10= x# ** Note: $finish : E:/mult/tb_mult8.v(10)# Time: 20 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 10quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'a'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'b'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 0*10= x# 20 8*12= x# 30 8*13= x# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 128* 42= 0# 20 232* 92= 96# 30 72* 77=168# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12quit -sim# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 128* 42= 0# 20 232* 92= 96# 30 72* 77=168# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 128* 42= 5376# 20 232* 92=21344# 30 72* 77= 5544# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12四:测试波形如下图所示:。
8位乘法器的设计
本科生毕业论文(设计)8位乘法器的设计姓名:指导教师:院系:信息工程学院专业:计算机科学与技术提交日期: 2010/4/30目录中文摘要 (2)外文摘要 (3)1.绪论 (4)1.1概述 (4)1.2 VHDL和MAX+PIUS简介 (5)1.3 实验平台 (6)2.乘法器初步设计 (7)2.1 设计思想 (7)2.2乘法器原理 (7)2.3乘法器设计流程 (8)3. 乘法器具体设计 (9)3.1右移寄存器的设计 (9)3.2 加法器模块的设计 (10)3.2.1 4位加法器的设计 (10)3.2.2 8位加法器的设计 (11)3.3 乘1模块设计 (13)3.4锁存器模块设计 (14)4. 乘法器仿真 (17)4.1 8位加法器仿真 (17)4.2 乘1模块仿真 (17)4.3 锁存器模块仿真 (18)4.4 8位乘法器仿真 (18)结束语 (19)参考文献 (20)致谢 (21)8位乘法器的设计摘要:在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。
本文主要是在于如何运用标准硬件描述语言(VHDL)完成八位乘法器,以及如何做二进制位相乘的运算过程。
该乘法器是由八位加法器构成的以时序方式设计八位乘法器,通过逐项移位相加来实现乘法功能,并以MAX+Plus II 软件工具进行模拟,仿真并予以显示。
关键字:乘法器;标准硬件描述语言(VHDL);移位相加;MAX+Plu s II8-bit multiplier designAbstract:In the microprocessor chip, the multiplier is a digital signal processing core microprocessor is also a key component of data processing, it is already an essential part of the modern computer. This article is on how to use standard hardware description language (VHDL) to complete eight multipliers, as well as how to make the process of a binary bit multiplication operation. The multiplier is composed of eight adder to timing approach in designing eight multiplier, achieved by adding the multiplication-by-shift function, and in MAX + Plus II software tools for simulation, emulation and be displayed.Keywords: multiplier; standard hardware description language (VHDL); shift sum; MAX + Plus II1.绪论1.1概述本课题的设计来源是基于标准硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language,VHDL)及MAX + Plus II(Multiple Array Matrix Programmable Logic User System)软件开发工具的进行模拟仿真的8位乘法器,用于实现8位移位相加乘法器的乘法运算功能。
8位乘法器实验报告
6.2 8位乘法器的设计1.实验目的(1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。
(2)熟悉GW48-CK EDA实验开发系统的基本使用方法。
(3)学习VHDL基本逻辑电路的综合设计。
2.实验内容设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。
此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。
3.实验条件(1)开发设备:Lattice ispEXPERT。
(2)实验设备:GW48-CK EDA实验开发系统。
(3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。
4.实验设计1)系统的原理框图2)VHDL源程序(1)选通与门模块的源程序ANDARITH.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH ISPORT(ABIN: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;(2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK,CLR)ISBEGINIF CLR='1' THEN R16S<="0000000000000000"; ELSIF CLK'EVENT AND CLK= '1' THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ARCHITECTURE ART;(3)8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK, LOAD)ISBEGINIF CLK'EVENT AND CLK='1'THENIF LOAD='1'THEN REG8B<=DIN;ELSE REG8B(6 DOWNTO 0)<=REG8B(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;(4)乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC; ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF START='1'THEN CNT4B<="0000";ELSIF CLK'EVENT AND CLK='1'THENIF CNT4B<8 THENCNT4B <=CNT4B+1;END IF;END IF;END PROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIF START='0' THENIF CNT4B<8 THENCLKOUT <=CLK;ARIEND<='0';ELSE CLKOUT<='0';ARIEND<='1';END IF;ELSE CLKOUT<=CLK;ARIEND<='0';END IF;END PROCESS;END ARCHITECTURE ART;(5)8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC; ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (CLK: IN STD_LOGIC;CLR: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8)),B=>S5(7 DOWNTO 0),S=>S6(7 DOWNTO 0),COUT=>S6(8); U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.系统仿真文件当ATRRT为高电平时,将16位寄存器清零,当START为低电平时,在CLK为1时进行乘法运算,通过8次移位和加法操作,运算进行8个CLK为1的时钟,之后得到输出结果,且ARIEND为1,乘法运算结束。
8位乘法器设计
8位乘法器设计8位乘法器设计一、摘要纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。
这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA 构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八加法器,所以关键是设计好八位加法器。
二、综述ARICTL是乘法运算控制电路,它的START信号上的上跳沿与高电平有2个功能,即16位寄存器清零和被乘数A[7...0]]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号,乘法时钟信号从ARICTL的CLK输入。
当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,一位乘法器ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,一位乘法器全零输出。
如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止,ARIEND输出高电平,乘法结束。
此时REG16B的输出即为最后的乘积。
三、方案设计与分析方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。
方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度等方面较好,综合各方面的考虑,决定采用第二种方案。
3.1程序清单1.library ieee; ----四位二进制并行加法器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4b isport( cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end;architecture one of add4b issignal sint,aa,bb:std_logic_vector(4 downto 0);beginaa<='0' & a;bb<='0' & b;sint<=aa+bb+cin;s<=sint(3 downto 0);cout<=sint(4);end;2.library ieee; --由两个四位二进制并行加法器级联而成的八位二进制加法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b isport( cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end;architecture one of adder8b iscomponent add4b --对要调用的元件add4b的端口进行说明port( cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end component;signal carryout: std_logic;beginu1:add4b port map(cin,a(3 downto 0),b(3 downto 0),s(3 downto 0),carryout);u2:add4b port map(carryout,a(7 downto 4),b(7 downto 4),s(7 downto 4),cout);end;3.library ieee; --一位乘法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity andarith isport( abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end;architecture one of andarith isbeginprocess(abin,din)beginfor i in 0 to 7 loopdout(i)<=din(i) and abin;end loop;end process;end;4.library ieee; --乘法运算控制器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl isport( clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end;architecture one of arictl issignal cnt4b:std_logic_vector(3 downto 0);beginrstall<=start;process(clk,start)beginif start='1' then cnt4b<="0000";elsif clk'event and clk='1' thenif cnt4b<8 then --小于8则计数,等于8则表明乘法运算已经结束cnt4b<=cnt4b+1;end if;end if;end process;process(clk,cnt4b,start)beginif start='0' thenif cnt4b<8 thenclkout<=clk; ariend<='0';else clkout<='0'; ariend<='1';end if;else clkout<=clk; ariend<='0';end if;end process;end;5.library ieee; --16位锁存器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b isport( clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0)); end; architecture one of reg16b issignal r16s:std_logic_vector(15 downto 0); begin process(clk,clr)beginif clr='1' then r16s<="0000000000000000"; elsif clk'event and clk='1' thenr16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;end if;end process;q<=r16s;end;6.library ieee; --8位右移寄存器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sreg8b isport( clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end;architecture one of sreg8b issignal reg8:std_logic_vector(7 downto 0); beginprocess(clk,load)beginif clk'event and clk='1' thenif load='1' then reg8<=din;else reg8(6 downto 0)<=reg8(7 downto 1); end if;end if;end process;qb<=reg8(0);end;7.library ieee;--8位乘法器顶层设计use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mult8x8 isport( clk:in std_logic;start:in std_logic;a,b:in std_logic_vector(7 downto 0); dout:out std_logic_vector(15 downto 0); ariend:out std_logic);end;architecture struc of mult8x8 is component adder8b isport( cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0); cout:out std_logic);end component;component andarith isport( abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0)); end component; component arictl isport( clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end component;component reg16b isport( clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0)); end component; component sreg8b isport( clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;signal gndint :std_logic;signal intclk :std_logic;signal rstall :std_logic;signal qb :std_logic;signal andsd :std_logic_vector(7 downto 0);signal dtbin :std_logic_vector(8 downto 0);signal dtbout :std_logic_vector(15 downto 0);begindout<=dtbout; gndint<='0';u1:arictl port map( clk,start,intclk,rstall,ariend);u2:sreg8b port map(intclk,rstall,b,qb);u3:andarith port map(qb,a,andsd);u4:adder8b port map(gndint,dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));u5:reg16b port map(intclk,rstall,dtbin,dtbout);end;3.2仿真结果(1)输入波形图(2)输出波形图3.3工作原理图cin a[7..0]b[7..0]s[7..0]coutadder8binst1abin din[7..0]dout[7..0]andarithinst2clkstart clkout rstallariend arictl inst3clk clr d[8..0]q[15..0]reg16b inst5clk loaddin[7..0]qbsreg8b inst6dout[15..0]OUTPUTVCCB[7..0]INPUT VCCA[7..0]INPUT dout5[15..0]OUTPUT二、方案综合评价与结论它由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好,电路原理简单,连线很少,制作起来方便易行,总体来说还是很成功的。
8位二进制乘法器
8位二进制乘EDA实验法器学号:********[2013.12.15] 班级:021151姓名:***指导老师:***一.设计要求8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加,直到所有的部分积都被加过一次。
例如:11010101和10010011相乘,计算过程如下:二.设计方法按照这种算法,可以得到下图所示之框图和简单流程图。
按照这种算法,可以得到下图所示之框图和简单流程图。
图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。
A和Y中的数据在加法器中相加后送入A 中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。
由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。
运算时首先将累加器A清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。
将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。
第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置。
这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。
移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。
基于 FPGA 的8位移位相加型硬件乘法器的设计
基于 FPGA 的8位移位相加型硬件乘法器的设计张建妮【期刊名称】《智能计算机与应用》【年(卷),期】2014(000)004【摘要】Multiplier is very important in digital signal processing module.In this paper,the principle of the hardware mul-tiplier is introduced atfirst.Based on it,a design method is put forward.Finally ,using EDA technology,the hardware -multiplier is implemented through VHDL programming combining with the input mode of schematic diagram onthe FPGA development platform.The design has strong practicability ,high cost -effective,strong operability,etc.%乘法器是数字信号处理中非常重要的模块。
本文首先介绍了硬件乘法器的原理,在此基础上提出了硬件乘法器的设计方法,最后再利用 EDA 技术,在 FPGA 开发平台上,通过 VHDL 编程和图形输入对其进行了实现,具有实用性强、性价比高、可操作性强等优点。
【总页数】4页(P87-89,93)【作者】张建妮【作者单位】西华师范大学物理与电子信息学院,四川南充 637002【正文语种】中文【中图分类】TP2【相关文献】1.基于时序电路的移位相加型8位硬件乘法器设计 [J], 吴桂军;雷勇2.提高ASIC验证的速度与可视性基于FPGA的ASIC/SoC原型设计及基于FPGA 的系统在实时硬件速度下可以实现100%的内部信号可视性 [J], Mario Larouche3.基于FPGA的8位移位相加型硬件乘法器的设计 [J], 张建妮;4.基于ARM和FPGA的经济型数控系统硬件设计与实现 [J], 刘更;王清理;孟伟;赵甫;张宝5.基于Verilog HDL语言的硬件乘法器设计 [J], 刘隽;唐雄民;彭永进因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四8位乘法器实验
一、实验原理
8位乘法器,输入为两个8位信号,输出结果为16位。
module mult8(out, a, b); //8位乘法器源代码
parameter size=8;
input[size-1:0] a,b; //两个操作数
output[2*size-1:0] out; //结果
assign out=a*b; //乘法运算符
endmodule
本实验采用Chipscope-Pro生成VIO/ICON核,并插入到8位乘法器设计中,在线进行观测和调试。
二、实验目的
1. 熟悉ISE9.1 开发环境,掌握工程的生成方法;
2. 熟悉SEED-XDTK XUPV2Pro 实验环境;
3. 了解Verilog HDL语言在FPGA 中的使用;
4. 通过掌握8位乘法器的Verilog HDL设计,了解数字电路的设计。
三、实验内容
1. 用Verilog HDL语言设计8位乘法器,进行功能仿真验证。
2. 使用chipscope-Pro 生成VIO/ICON 核,在线观测调试。
四、实验准备
1. 将USB 下载电缆与计算机及XUPV2Pro 板的J8 连接好;
2. 将RS232 串口线一端与计算机连接好,另一端与板卡的J11 相连接;
3. 启动计算机,当计算机启动后,将XUPV2Pro 板的电源开关SW11 打开到ON 上。
观察XUPV2Pro 板上的+2.5V,+3.3V,+1.5V 的电源指示灯是否均亮。
若有不亮的,请断开电源,检查电源。
五、实验步骤
⑴创建工程及设计输入
①在E:\project\目录下,新建名为mult8的新工程;
器件族类型(Device Family)选择“Virtex2P”,
器件型号(Device)选“XC2VP30 ff896 -7”,
综合工具(Synthesis Tool)选“XST (VHDL/Verilog)”,
仿真器(Simulator)选“ISE Simulator”
②设计输入并保存。
⑵功能仿真
①在sources窗口sources for中选择Behavioral Simulation。
②由Test Bench WaveForm 添加激励源,如图1所示。
仿真结果如图2所示。
图1 波形激励编辑窗口
图2 仿真结果
从图中可以验证由Verilog HDL语言设计的8位乘法器的工作是正确的,不论是输入a的值变化还是输入b的值变化,输出值随之变化,为a与b的乘积。
⑶生成核并添加核
本次试验内容为8位乘法器,不需要使用ILA核。
因此下面使用核生成法生成一个ICON核,一个VIO核就可以了。
①首先对生成的工程进行综合。
②生成核
③添加核
最后的代码如下:
module mult8(out);
parameter size=8;
output[2*size-1:0] out;
wire[size-1:0] a,b;
wire [35 : 0] CONTROL0;
wire [15 : 0] ASYNC_OUT;
wire [15 : 0] ASYNC_IN;
ICON I_ICON(
.CONTROL0(CONTROL0)
);
VIO I_VIO(
.CONTROL(CONTROL0),
.ASYNC_OUT(ASYNC_OUT),
.ASYNC_IN(ASYNC_IN)
);
assign ASYNC_IN[15:0]=out[15:0];
assign a[7:0]=ASYNC_OUT[7:0];
assign b[7:0]=ASYNC_OUT[15:8];
assign out=a*b;
endmodule
⑷在线调试
①设计综合和实现。
②在实现步骤成功后,点击Generate Programming Files,生成bit流文件。
③双击Analyze Design Using Chipscope,出现chipscope Pro Analyzer窗口。
双击图标,出现如图3所示的对话框,点击OK。
图3 操作示意画面1
然后下载bit流文件,具体操作步骤:右击DEV:2 myDevice2(XC2VP30),选择Configure...,如图4所示。
会弹出一个对话框如图5所示,点击“Select New File”,在弹出的对话框中选择mult8.bit文件并打开,再点击OK,如图6所示。
图4 操作示意画面2
图5 操作示意画面3
图6 操作示意画面4
④观测调试
双击VIO console,可以看到异步输入信号和异步输出信号,如图7所示。
图7 调试结果1
分别将异步输入和异步输出信号按照在代码中设定的改为总线形式并重命
名,以更加直观的观测信号。
也可以右键单击各个信号选择Bus Radix 后的
Unsigned Decimal...将各个信号以十进制的形式显示,如图8所示。
图8 调试结果2
用二进制显示方式如图9所示。
图9 调试结果3
可以通过输入不同的数值然后与自己的计算进行比较来验证设计的正确性。
六、总结
通过本次实验,我对以前所学的知识有了更一步的掌握,了解了用V erilog HDL语言如何设计8位乘法器,进行功能仿真。