移位相加型8位硬件乘法器设计
基于FPGA的8位硬件乘法器设计
![基于FPGA的8位硬件乘法器设计](https://img.taocdn.com/s3/m/def193d6050876323112125a.png)
本科毕业设计基于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 乘法器的研究背景和意义微电子技术的迅猛发展,计算机技术的不断进步,带动了集成电路工艺的不断增进,数字芯片的集成度不断提高。
8位乘法器设计
![8位乘法器设计](https://img.taocdn.com/s3/m/7be56c77dcccda38376baf1ffc4ffe473368fd8c.png)
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); beginprocess(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 iscomponent 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位硬件乘法器电路电子课程设计](https://img.taocdn.com/s3/m/cd8ee08d3186bceb19e8bba2.png)
移位相加8位硬件乘法器电路电子课程设计电子课程设计---移位相加8位硬件乘法器电路设计学院:电子信息工程学院班级: 通信071501姓名:许瀛指导老师:高文华2009年12月目录一.设计任务与要求 (2)二.总体框图 (3)三.选择器件 (4)四.功能模块 (5)五.总体设计电路图………………………………………………………………15六.心得体会 (17)移位相加8位硬件乘法起一、设计任务与要求设计一个乘法器的控制模块,接受实验系统上的连续脉冲,当给定启动/清零信号后,能自动发出CLK信号驱动乘法运算,当8个脉冲后自动停止。
设计一个纯组合电路的8X8等于16位的乘法器(选择不同的流水线方式),具体说明并比较这几种乘法器的逻辑资源占用情况和运行速度情况。
二、总体框图控制16位锁存器/分段8位右移1位乘8位加7段数码1、模块功能A、运算控制模块:控制电路的起始和终止。
B、8位右移寄存器:在时钟脉冲的作用下,高位寄存器的数码送给低位寄存器,作为低位寄存器的次态输出;每输入一个时钟脉冲,寄存器的数据就顺序向右移动一位。
C、1位乘法器:D、8位加法器:E、16位锁存器/右移寄存器:此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八位加法器,所以关键是设计好八位加法器。
方案:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好。
综合各方面的考虑,决定采用方案二。
2、设计思路:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA 构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
基于fpga八位硬件乘法器课程设计
![基于fpga八位硬件乘法器课程设计](https://img.taocdn.com/s3/m/fb7f6a9785254b35eefdc8d376eeaeaad1f316e6.png)
基于FPGA的八位硬件乘法器课程设计,可以分以下几个步骤进行:
1. 确定设计要求:根据要求,设计一个能对两个八位二进制数进行乘法运算的硬件电路。
需要考虑到输入、输出、各种控制信号等。
2. 确定设计方案:根据设计要求,确定具体的设计方案。
可以使用Verilog语言进行描述,包括输入输出端口的定义、状态转移的描述等。
3. 编写Verilog代码:根据设计方案,编写Verilog代码。
代码需要对各种信号进行定义,并实现相应的逻辑功能。
4. 进行仿真:在编写完代码后,进行功能仿真。
可以使用ModelSim等仿真工具进行验证。
对代码进行仿真测试,在设计出现问题时可以及时进行调试和修改。
5. 进行综合和布局布线:通过综合和布局布线操作,将Verilog代码映射到FPGA芯片上,并生成bit文件,用于烧录到FPGA芯片中。
6. 进行验证:将bit文件烧录到FPGA芯片中,进行验证。
可以通过开发板上的按键等方式,输入两个八位二进制数并进行乘法运算,同时显示结果。
设计八位硬件乘法器需要了解数字电路设计基础知识和Verilog语言的使用。
同时,需要熟练掌握FPGA开发板的使用,以及相关的开发工具(如Quartus II等)的使用。
基于FPGA的8位移位相加型硬件乘法器的设计
![基于FPGA的8位移位相加型硬件乘法器的设计](https://img.taocdn.com/s3/m/0a1b4255b307e87101f6964e.png)
基于FPGA的8位移位相加型硬件乘法器的设计作者:张建妮来源:《智能计算机与应用》2014年第04期摘要:乘法器是数字信号处理中非常重要的模块。
本文首先介绍了硬件乘法器的原理,在此基础上提出了硬件乘法器的设计方法,最后再利用EDA技术,在FPGA开发平台上,通过VHDL编程和图形输入对其进行了实现,具有实用性强、性价比高、可操作性强等优点。
关键词:硬件乘法器;加法器; VHDL中图分类号:TP2 文献标识码:A文章编号:2095-2163(2014)04-0087-04Abstract:Multiplier is very important in digital signal processing module. In this paper, the principle of the hardware multiplier is introduced at first. 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 on the FPGA development platform. The design has strong practicability ,high cost-effective, strong operability, etc.Key words:Hardware-Multiplier; Adder; VHDL0引言在数字信号处理中,经常会遇到卷积、数字滤波、FFT等运算,而在这些运算中则存在大量类似ΣA(k)B(n-k)的算法过程。
因此,乘法器是数字信号处理中必不可少的一个模块。
中山学院EDA综合实验报告-8位硬件乘法器设计
![中山学院EDA综合实验报告-8位硬件乘法器设计](https://img.taocdn.com/s3/m/f55c5f172af90242a895e588.png)
在实验老师的指导下,我圆满完成了实验任务,有了不少收获,其中了解到了移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的电路优势,并且在加深了如何通过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、了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的
8位运算器课程设计
![8位运算器课程设计](https://img.taocdn.com/s3/m/9f63ee8cc0c708a1284ac850ad02de80d4d80631.png)
8位运算器课程设计一、课程目标知识目标:1. 学生能理解8位运算器的原理与功能,掌握二进制与十进制的转换方法。
2. 学生能运用8位运算器进行基本的算术运算,如加、减、乘、除,并理解运算过程中的溢出与进位现象。
3. 学生了解8位运算器在计算机硬件中的作用,及其在信息技术中的应用。
技能目标:1. 学生能够独立完成8位运算器的模拟操作,解决实际问题。
2. 学生通过8位运算器的操作,提高逻辑思维和问题解决能力。
3. 学生能够运用所学知识,对简单的计算机程序进行初步的分析与设计。
情感态度价值观目标:1. 学生培养对计算机硬件及编程的兴趣,激发学习信息技术的热情。
2. 学生通过学习8位运算器,认识到科技发展对生活的影响,增强创新意识。
3. 学生在团队协作中培养沟通与合作的意识,提高团队荣誉感。
课程性质:本课程为信息技术学科的教学内容,旨在帮助学生掌握计算机硬件基础知识,提高编程技能。
学生特点:考虑到学生所在年级,已具备一定的逻辑思维和问题解决能力,对信息技术有较高的兴趣。
教学要求:结合学生特点,通过实例教学,使学生在实践中掌握8位运算器的相关知识,提高学生的动手操作能力和团队协作能力。
将课程目标分解为具体的学习成果,以便于教学设计和评估。
二、教学内容1. 引言:介绍8位运算器的基本概念,引出二进制与十进制的转换,让学生初步了解8位运算器的原理。
- 教材章节:第一章 计算机硬件基础,第1节 计算机硬件概述2. 二进制与十进制的转换方法:- 教材章节:第一章 计算机硬件基础,第2节 数字逻辑基础3. 8位运算器的算术运算:- 加法、减法、乘法、除法的运算规则及运算过程- 溢出与进位现象的分析- 教材章节:第一章 计算机硬件基础,第3节 算术逻辑单元4. 8位运算器在实际应用中的案例分析:- 简单计算机程序的初步分析与设计- 教材章节:第二章 计算机指令与编程,第1节 计算机指令概述5. 8位运算器在计算机硬件中的作用:- 介绍CPU中的算术逻辑单元(ALU)- 教材章节:第一章 计算机硬件基础,第4节 中央处理器6. 实践操作:- 使用模拟软件进行8位运算器的操作- 解决实际问题,提高逻辑思维和问题解决能力- 教材章节:第三章 计算机操作实践,第1节 计算机操作基础教学进度安排:本章节内容共需6个课时,其中理论教学4课时,实践操作2课时。
基于FPGA的8位硬件乘法器设计
![基于FPGA的8位硬件乘法器设计](https://img.taocdn.com/s3/m/def193d6050876323112125a.png)
本科毕业设计基于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 乘法器的研究背景和意义微电子技术的迅猛发展,计算机技术的不断进步,带动了集成电路工艺的不断增进,数字芯片的集成度不断提高。
8bit booth乘法器
![8bit booth乘法器](https://img.taocdn.com/s3/m/647170f93086bceb19e8b8f67c1cfad6195fe9b5.png)
8bit booth乘法器8位乘法器是一种能够完成两个8位二进制数的乘法运算的电子器件。
在数字电路和计算机学中,乘法器是实现算术运算的重要组件之一。
由于乘法涉及到多位数的运算,所以乘法器的设计将会比加法器复杂一些,但因为其实现是数字逻辑的原理之一,所以乘法器仍然是非常常见且广泛应用的电路。
8位乘法器由多个基本的逻辑门组成,这些逻辑门能够根据一个简单的算法将两个输入的数相乘得出一个结果。
下面将会详细介绍8位乘法器的工作原理、设计方法和优缺点。
1. 工作原理8位乘法器的工作原理是通过模拟手算乘法的过程来实现:将其中一个乘数按照二进制数的位数将其分为多个数字,然后逐位与另一个乘数相乘;然后将相乘所得的结果相加,得到最终的积。
8位乘法器通常采用Booth乘法算法。
Booth乘法算法是一种数值优化的乘法算法,其基本思想是在乘法过程中尽量减少加法器的使用次数。
Booth乘法使用了“移位-加/减”操作,通过每次将操作数向右移一位,从而将相乘的过程分解成一系列的加/减运算。
具体来讲,假设我们要将A和B两个8位二进制数相乘,现在以A=00101011和B=00011101为例说明Booth乘法的具体流程:1) 将A和B扩展为9位宽,即A=000101011和B=000011101;2) 将B的最低位和次低位相连,得到"01",将其作为操作码,表示下一步的移位和加/减操作的类型;3) 将A向左移一位,再加上操作码;4) 根据操作码,选择加法或减法,得到一个结果,存储在寄存器中;5) 将寄存器向右移一位,得到下一步的操作码;6) 重复3)到5)的步骤,共进行8次,即完成了整个乘法的计算。
Booth乘法的关键就在于它的“加减优化”机制。
当操作码为“01”时,表示需要对寄存器进行减法操作,而这个减法实际上是通过加上B 的补码来实现的;同样,当操作码为“10”时,表示需要对寄存器进行加法操作,但实际上是通过减去B的补码来实现的。
实验三 8位乘法器的设计
![实验三 8位乘法器的设计](https://img.taocdn.com/s3/m/119fa53031126edb6f1a109c.png)
实验三8位乘法器的设计一、实验目的1)了解8位乘法器的工作原理2)熟悉MAX+plusII软件的基本使用方法3)熟悉EDA实验开发的基本使用方法4)学习VHDL程序中数据对象,数据类型,顺序语句,并行语句的综合使用二、实验内容设计一个由8位加法器构成的以时序逻辑方式设计的8位乘法器。
其乘法原理是:乘法通过逐项位移相加原理来实现,以被乘数的最低位开始,若为1,则乘数左移后与上一次和相加,若为0,左移后以全零相加,直至被乘数的最高位。
三、实验条件开发软件:MAX+plus II 9.23 Baseline硬件设备:装有windows7的pc机四、实验设计1)系统的原理框架图2)VHDL源程序andarith.vhd源代码library 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;arictl.vhd源代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl isport(clk:in std_logic; start: in std_logic; clkout:out std_logic; rstall: out std_logic; ariend: 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;sreg8b.vhdlibrary ieee;use ieee.std_logic_1164.all;entity sreg8b isport (clk: in std_logic;load: in std_logic;din: std_logic_vector(7 downto 0);qb: out std_logic);end entity sreg8b;architecture art of sreg8b issignal reg8:std_logic_vector(7 downto 0); beginprocess(clk, load)isbeginif 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 architecture art;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;Adder8b.vhd源代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b isport( c8:in std_logic;a8:in std_logic_vector(7 downto 0);b8: in std_logic_vector(7 downto 0);s8: out std_logic_vector(7 downto 0);co8: 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=>c8,a4=>a8(3 downto 0),b4=>b8(3 downto 0), s4=>s8(3 downto 0),co4=> sc);u2:adder4bport map(c4=>sc, a4=>a8(7 downto 4),b4=>b8(7 downto 4),s4=>s8(7 downto 4),co4=>co8);end architecture art;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( c8:in std_logic;a8:in std_logic_vector(7 downto 0);b8: in std_logic_vector(7 downto 0);s8: out std_logic_vector(7 downto 0);co8: out std_logic);end component adder8b;component sreg8b isport (clk: in std_logic;load: in std_logic;din: 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(c8=>s1,a8=>s7(15 downto 8),b8=>s5,s8=>s6(7 downto 0),co8=>s6(8));u5:reg16b port map(clk=>s2,clr=>s3,d=>s6,q=>s7);end architecture art;3)管脚图五、实验结果及总结系统时序仿真结果从系统仿真结果可以看出,本系统完全符合设计要求,同时从仿真结果可以看出,从输入到输出有一定的延时,在11ns左右,这正是器件延时特征的反映。
移位相加8位硬件乘法器电路计
![移位相加8位硬件乘法器电路计](https://img.taocdn.com/s3/m/322f43de26fff705cc170a18.png)
电子技术课程设计----移位相加8位硬件乘法器电路计学院: 华科学院专业: 通信工程班级:通信052201H姓名: 张茹学号:200522080122指导教师:柴婷婷2007年12月30日一,设计任务与要求--------------------(3)1,内容2,要求二,总体框图---------------------------(3)1,电路的总体框图2,框图的说明3,设计思路4,方案设计三,选择器件与功能模块-----------------(5)1,选择器件各功能模块及功能说明四,功能模块----------------------------(8)1,ADDER8B的模块2,ANDARITH的模块3,ARICTL的模块4,REG16B的模块5,SREG8B的模块五,总体设计电路图----------------------(14)1,总体原理图2,仿真波形图3,管脚分配图4,硬件验证情况六,心得体会--------------------------------------(18)移位相加8位硬件乘法器一.设计任务与要求1.内容: 由8位加法器构成的以时序逻辑方式设计的8位乘法器乘法通过逐向移位加原理来实现,从被乘数的最低位开始,若为1,则乘数左移与上一次和相加;若为0,左移后以全零相加,直至被乘数的最高位。
2.要求: (1) 重点掌握VHDL设计电路模块(2)在掌握8位加法器设计的基础上,进一步掌握8×8位乘法器的设计;(3)进一步学习开发系统,掌握MAX+PLUS II的设计流程。
二.总体框图(电路的总体框图)1,说明:此电路由五部分组成2,它们分别是控制器,锁存器,寄存器,乘法器,加法器。
1控制器是一个乘法器的控制模块,用来接受实验系统上的连续脉冲。
2锁存器起锁存的作用,它可以锁存8位乘数。
3移位寄存器起移位的作用,便于被乘数可以逐位移出。
4乘法器功能类似一个特殊的与非门。
基于 FPGA 的8位移位相加型硬件乘法器的设计
![基于 FPGA 的8位移位相加型硬件乘法器的设计](https://img.taocdn.com/s3/m/606d39fea48da0116c175f0e7cd184254b351b37.png)
基于 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], 刘隽;唐雄民;彭永进因版权原因,仅展示原文概要,查看原文内容请购买。
8位乘法器设计范文
![8位乘法器设计范文](https://img.taocdn.com/s3/m/54894f866037ee06eff9aef8941ea76e58fa4a97.png)
8位乘法器设计范文乘法器是计算机中常见的一种算术逻辑单元(ALU),用于执行两个数相乘的操作。
在计算机体系结构中,乘法器的设计是非常重要的,因为它对计算机的性能和功耗有很大的影响。
本文将介绍一种设计8位乘法器的方法,包括乘法器的原理、设计要点和优化技术等。
以下是本文的详细内容。
乘法器的原理:乘法操作可以通过多次的加法和移位操作来实现。
具体来说,乘法操作可以分解为一系列的部分积相加。
例如,8位二进制数A和B的乘积可以通过以下步骤计算得到:1.取出乘数A的最低位,判断该位是否为1,若为1,则将被乘数B加到一个累加器中;2.将乘数A向右移位一位,将被乘数B向左移位一位;3.重复以上两步,直到乘数A的所有位都被处理完。
设计要点:在设计8位乘法器时,需要考虑以下几个关键要点:1.输入和输出:8位乘法器的输入包括两个8位的二进制数A和B,输出为一个16位的二进制数,表示A和B的乘积;2.延迟:乘法器的延迟是指执行完一次乘法操作所需要的时钟周期数。
延迟越短,计算速度越快;3.精度:乘法器应能够正确计算任意两个8位数的乘积,所以输出的位数应足够表示结果;4.功耗:乘法器的功耗是指在执行乘法操作时消耗的能量,应尽量减小功耗以提高系统的能效。
优化技术:为了提高8位乘法器的性能和功耗,可以采用以下几种优化技术:1.并行计算:将乘法操作拆分成多个部分积相加的过程,并行计算可以显著减小乘法器的延迟;2.压缩编码:利用矩阵乘积的性质,对部分积进行压缩编码,减少中间结果的位数,从而减小乘法器的面积和功耗;3.位分块技术:将输入的位数按照一定的规则分成多个块,对每个块进行乘法操作,然后将部分积相加得到最终结果;4.低功耗技术:采用节能的电路设计和优化布局,例如使用低阈值电平、降低电压和电流等。
总结:本文介绍了8位乘法器的设计原理、设计要点和优化技术。
乘法器是计算机中常用的算术逻辑单元,对计算机的性能和功耗有很大的影响。
通过采用并行计算、压缩编码、位分块和低功耗技术等优化技术,可以提高乘法器的性能和功耗效率。
基于时序电路的移位相加型8位硬件乘法器设计
![基于时序电路的移位相加型8位硬件乘法器设计](https://img.taocdn.com/s3/m/fec55affb04e852458fb770bf78a6529647d3513.png)
基于时序电路的移位相加型8位硬件乘法器设计
吴桂军;雷勇
【期刊名称】《科技信息》
【年(卷),期】2011(0)31
【摘要】由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强.
【总页数】1页(P501)
【作者】吴桂军;雷勇
【作者单位】重庆工程职业技术学院电子工程与自动化系中国重庆 400037;重庆工程职业技术学院电子工程与自动化系中国重庆 400037
【正文语种】中文
【相关文献】
1.基于改进型选择进位加法器的32位浮点乘法器设计
2.基于FPGA的8位移位相加型硬件乘法器的设计
3.基于 FPGA 的8位移位相加型硬件乘法器的设计
4.基于Ⅱ型ONB并行乘法器的设计与实现
5.基于Verilog HDL语言的硬件乘法器设计
因版权原因,仅展示原文概要,查看原文内容请购买。
8位二进制乘法器设计报告
![8位二进制乘法器设计报告](https://img.taocdn.com/s3/m/402fb9dd28ea81c758f578b6.png)
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 位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。
移位相加乘法器
![移位相加乘法器](https://img.taocdn.com/s3/m/d53e909d69dc5022aaea00f4.png)
设计一个8位二进制乘法电路,采用移位相加的方法实现八位二进制数相乘。
二、 设计思路与实现方案:1.设计思路: 8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
2.实现方案:图一: 乘法器原理框图图二:设计流程图start锁存器清零 控制器置被乘数A 移位寄存器置乘数B 将控制器设定为8位循环计数 将B 右移一位判断是否为1 将A 与锁存器高八位相加后在下个时钟送到锁存器 是否计到八个时钟周期YES NO模块一:8位右移寄存器:源程序:library 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 sreg8b;architecture behave of sreg8b issignal reg8:std_logic_vector(7 downto 0);beginprocess(clk,load)beginif load='1'then reg8<=din;elsif clk'event and clk='1'thenreg8(6 downto 0 )<=reg8(7 downto 1);end if;end process;qb<=reg8(0);end behave;仿真波形:每个时钟周期将输入右移一位输出。
图三:8位右移寄存器仿真结果模块二:8位加法器:源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8 isport(b,a:in std_logic_vector(7 downto 0);s:out std_logic_vector(8 downto 0));end adder8;architecture behave of adder8 isbegins<='0'&a+b;end behave;仿真波形:图四:8位加法器仿真结果模块三、16位锁存器源程序源程序:library ieee;use ieee.std_logic_1164.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);as:out std_logic_vector(7 downto 0));end reg16b;architecture behave of reg16b issignal r16s:std_logic_vector(15 downto 0);beginprocess(clk,clr)beginif clr='1'then r16s<=(others=>'0');elsif clk'event and clk='1' thenr16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;as<= r16s(15 downto 8);end if;end process;q<=r16s;end behave;仿真波形:将输入右移一位锁存在锁存器reg16高8位,as位reg16的高8位输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院课程设计报告题目:移位相加型8位硬件乘法器系别:电子信息与电气工程系专业:通信工程班级: 13通信工程(1)班学号:姓名:导师:石朝毅成绩:2016年 6 月 11 日移位相加型8位硬件乘法器设计摘要本次设计是基于时序结构的8位移位相加型乘法器,使用软件QuartusII进行仿真设计。
完成此乘法器,我们需要首先设计该乘法器的组件,包括REGSHT模块、SREG8BT模块、AND8B模块和ADDER8BT模块,并对所有元件进行仿真,无误后可进行乘法器的设计。
设计方法使用的是元件例化,具体原理是通过逐项相加来实现乘法功能,最终完成整体的VHDL程序设计并仿真。
关键词:时序;乘法器;元件例化目录第一章前言............................................ 错误!未定义书签。
设计概述............................................. 错误!未定义书签。
问题提出与原理..................................... 错误!未定义书签。
设计需要........................................... 错误!未定义书签。
第二章设计过程及结果.................................. 错误!未定义书签。
设计思路............................................. 错误!未定义书签。
设计须知........................................... 错误!未定义书签。
基本步骤........................................... 错误!未定义书签。
设计代码及仿真....................................... 错误!未定义书签。
元件REGSHT设计代码及仿真结果...................... 错误!未定义书签。
元件SREG8BT设计代码及仿真结果..................... 错误!未定义书签。
元件AND8B设计代码及仿真结果....................... 错误!未定义书签。
元件ADDER8BT设计代码及仿真结果.................... 错误!未定义书签。
总模块设计代码及仿真结果........................... 错误!未定义书签。
第三章总结............................................ 错误!未定义书签。
致谢................................................... 错误!未定义书签。
第一章前言设计概述问题提出与原理采用元件例化的设计方法,设计一个移位相加型8位硬件乘法器设计。
下图所示为一个基于时序结构的8位移位相加型乘法器。
图1设计原理图设计需要(1)元件REGSHT设计,并仿真;(2)元件SREG8BT,并仿真;(3)元件AND8B,并仿真;(4)元件ADDER8BT,并仿真;(5)整体VHDL程序设计,包括元件例化,并仿真。
第二章设计过程及结果设计思路设计须知首先建立文件夹在软件工作的环境下,注意对于不同的器件的设计不能放在同一个文件夹当中这样会造成编译时出现混乱的错误现象。
对于每个元器件的设计有两种方法:可以利用原理图输入法,或者利用文本输入法进行设计。
本次设计使用的是文本输入法。
要注意在写文本输入时要注意实体名与你程序中名字一致。
然后,依次按照实验指导书的步骤进行设计。
先功能仿真,然后时序仿真,最后下载编译。
基本步骤(1)为本项设计建立文件夹任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹,此文件夹将被EDA软件默认为工作库(Work Library)。
一个设计项目可以包含多个设计文件,一般不同的设计项目最好放在不同的文件夹中。
注意:文件名不能用中文,且不可带空格。
(2)输入设计项目和存盘a.打开Quartus II,单击“File”菜单,将鼠标移到New Project Wizard…选项并单击,b.选择File--New,选择原理图编辑器,双击“Block Diagram/Schematic File”,或者选中该项后单击“OK”按钮。
(或者选择File New,选择VHDL File 进行文本设计)(3)选择目标器件并编译,在Assignments选项的下拉菜单中选择器件选择项Device...,在Family(器件序列栏)中选定目标器件对应的序列名,EP1C6对应的是Cyclone系列。
在Available Devices里选择EP1C6Q240C8(有时需要把Show advanced devices的勾消去,以便显示出所有速度级别的器件)。
注意:所选器件必须与目标板的器件型号完全一致。
(4)在总VHDL程序中需要将要用到的之前设计好的元件添加到当前工程中来,添加方法如下:Project—Add/Remove File in Project,找到之前的元件add即可,之后方可进行总程序的编译。
(5)仿真时,首先选择Edit—EndTime设置时间为30us,之后导入输入输出端口,选择Pins:All将需要的端口添加,之后给输入端口进行赋值或添加时钟进行时序仿真。
设计代码及仿真元件REGSHT设计代码及仿真结果LIBRARY IEEE;USE regsht ISPORT(CLK,CLR:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END regsht;ARCHITECTURE behav OF regsht ISSIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(CLK,CLR)BEGINIF CLR='1' THEN R16S<=(OTHERS=>'0');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 behav;图2 REGSHT时序仿真图分析:此处锁存器模块即16位右移寄存器可利用IF语句来完成其输入值的锁存当清零CLR=‘1’信号到来时定义的信号量R16S锁存输入值即R16S清零否则在时钟信号CLK上升沿作用下将R16S的低8位进行移位操作同时将8位输入数据D锁存到R16S的高8位最后传送给Q输出。
在乘法器的顶层设计中乘数与被乘数的乘积也将出现在REG16B端口。
元件SREG8BT设计代码及仿真结果LIBRARY IEEE;USE sreg8bt ISPORT(CLK,LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB:OUT STD_LOGIC);END sreg8bt;ARCHITECTURE behav OF sreg8bt ISSIGNAL REG8:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(CLK,LOAD)BEGINIF CLK'EVENT AND CLK='1' THENIF LOAD='1' THENREG8<=DIN;ELSE REG8(6 DOWNTO 0)<=REG8(7 DOWNTO 1);END IF;END IF;END PROCESS;QB<=REG8(0);END behav;图3 SREG8BT时序仿真图分析:8位右移寄存器是当时钟信号CLK处于上升沿时当LOAD=‘1’时将8位被乘数加载进去而当LOAD=‘0’时数据进行移位操作。
同时定义一个信号REG8用来装载新数据及移位后的操作数在完成这些操作后寄存器的最低位REG8(0)传送给QB输出。
元件AND8B设计代码及仿真结果LIBRARY IEEE;USE and8b ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END and8b;ARCHITECTURE behav OF and8b ISBEGINPROCESS(ABIN,DIN)BEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I) AND ABIN;END LOOP;END PROCESS;END behav;图4 AND8B时序仿真图分析:加法器是由两个4位二进制加法器U1和U2组成的8位加法器逻辑电路其中U1用来装载8位加法器中两个加数的低四位而U2则用来装载高4位。
元件ADDER8BT设计代码及仿真结果LIBRARY IEEE;USE adder8bt 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 adder8bt;ARCHITECTURE behav OF adder8bt ISSIGNAL SINT,AA,BB:STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINAA<='0'&A;BB<='0'&B;SINT<=AA+BB+CIN;S<=SINT(7 DOWNTO 0);COUT<=SINT(8);END behav;图5 ADDER8BT时序仿真图分析:8位加法器的设计是由两个4位加法器U1,U2所形成的在下面程序中定义一个信号量CARRY_OUT将4位加法器U1的COUT赋给CARRY_OUT ,再将CARRY_OUT的值赋给4位加法器U2的进位CIN,8位加法器的高四位低四位分别来自于4位加法器U2和U1。
总模块设计代码及仿真结果LIBRARY IEEE;USE MULT8B ISPORT(CLK0,LD:IN STD_LOGIC;A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Q0:BUFFER STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY MULT8B;ARCHITECTURE BEHAV OF MULT8B ISCOMPONENT SREG8BTPORT(CLK,LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB:OUT STD_LOGIC);END COMPONENT;COMPONENT AND8BPORT(ABIN:IN STD_LOGIC;DIN :IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT ADDER8BTPORT(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 REGSHTPORT(CLK,CLR:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END COMPONENT;SIGNAL NET1:STD_LOGIC;SIGNAL NET4:STD_LOGIC;SIGNAL NET3:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL NET2:STD_LOGIC_VECTOR(8 DOWNTO 0);BEGINU1:SREG8BTPORT MAP(CLK=>CLK0,LOAD=>LD,DIN=>A,QB=>NET1);U2:AND8BPORT MAP(DIN=>B,ABIN=>NET1,DOUT=>NET3);U4:ADDER8BTPORT MAP(A=>Q0(15 DOWNTO 8),B=>NET3,CIN=>NET4,S=>NET2(7 DOWNTO 0),COUT=>NET2(8));U3:REGSHTPORT MAP(CLK=>CLK0,CLR=>LD,D=>NET2,Q=>Q0); END ARCHITECTURE BEHAV;图6 总模块时序仿真图第三章总结本次设计是个综合性设计,我们需要熟悉很多知识才能完成本次设计。