8位乘法器设计

上传人:z****2 文档编号:209888110 上传时间:2023-05-15 格式:DOCX 页数:13 大小:245.22KB
收藏 版权申诉 举报 下载
8位乘法器设计_第1页
第1页 / 共13页
8位乘法器设计_第2页
第2页 / 共13页
8位乘法器设计_第3页
第3页 / 共13页
资源描述:

《8位乘法器设计》由会员分享,可在线阅读,更多相关《8位乘法器设计(13页珍藏版)》请在装配图网上搜索。

1、EDA 大作业基于 VHDL 的 8 位乘法器设计1.乘法器原理8 位乘法器可用移位和加法来实现,两个 8 位数相乘,总共需要执行 8 次加 法运算和 8 次移位运算,由乘数的末位值确定被乘数是否与原部分积相加,从乘 数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘 数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘 数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。实现原码一位乘法的硬件逻辑结构图如下图所示。用寄存器R0存放部分积; R0存放乘数Y,并且最低位Yn作判断为;RO和R1都具有右移功能并且是连通的; 寄存器R2存放被乘数X,加

2、法器完成部分积与位积求和,计数器记录相加移位的 操作次数。8 位乘法器的顶层设计主要分成四大功能模块 ,并可根据分解的层次进行 设计, 各个功能模块作用介绍如下:1) 右移寄存器模块:是指寄存器中所存的代码能够在移位脉冲的作用 下依次左移或右移,本设计采用的一个8位寄存器,能存放 8位二进制代码,需用 8 个触发器来构成,它可将乘法运算中的被乘数加 载于其中,同时进行乘法运算的移位操作。2) 加法器:本设计用到一个8 位加法器,主要进行操作数的加法运算3) 乘1模块:主要实现8位与1位的乘法运算。4) 锁存器:它所实现的功能是把当前的状态锁存起来,使 CPU 送出的数 据在接口电路的输出端保持

3、一段时间锁存后状态不再发生变化,直 到解除锁定。本次设计采用 16 位锁存器,同时也是一个右移寄存器, 在时钟信号作用下,进行输入值的移位与锁存。2.乘法器设计流程本设计采用移位和加法来实现两个 8 位二进制数相乘。由乘数的末尾值来 确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时,乘数 也右移一位,由次低位作新的末位,空出最高位放部分积的最高位。例如被乘数 为 00000101,乘数为 01101111,初始条件下,部分积为0,乘数最低位为 1,加 被乘数,和为 00000101,使其右移一位,形成新的部分积为 00000010,乘数同 时右移一位,原和最低位 1 被放到乘数

4、的最高位,此时,乘数最低位为 1,加 00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类 推,循环8 次,总共需要进行8 次相加和 8 次移位操作,最终得出乘积结果。其 设计流程图所如下所示:38 位乘法器的顶层设计8 位移位相加乘法器的原理图如下图所示。在图中, START 信号的上 升沿及其高电平有两个功能,即 16 位寄存器清零和被乘数 A7 0向移 位寄存器 SREG8B 加载;它的低电平则作为乘法使能信号。 CLK 位乘法时钟 信号。当被乘数被加载于 8 位右移寄存器 SREG8B 后,随着每一时钟节拍, 最低位在前,由低位至高位逐位移出。当

5、为 1 时, 1 位乘法器 ANDARTIH 打 开,8位乘数B70在同一节拍进入8位加法器,与上一次锁存在16位 锁存器中的高 8 位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存 器。而当被乘数的移出位为 0 时,与门全零输出。如此反复,直至 8 个时 钟脉冲后。最后乘积完整出现在 REG16B 端口。移位相加乘法器的原理图如 下:ANDARITHCLKARIENDSTARTCLKOUTR STALLCINCOUT- 0B7. 0根据上图移位相加乘法器的原理图 ,利用元例化的方法可得乘法器乘 法器的顶层设计的 VHDL 的代码如下 :LIBRARY IEEE;USE IEEE.STD_L

6、OGIC_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)ISBE

7、GINIF START=1THEN CNT4B=0000;ELSIF CLKEVENT AND CLK=1THENIF CNT4B8 THENCNT4B =CNT4B+1;END IF;END IF;END PROCESS;PROCESS(CLK,CNT4B,START)ISBEGINIF START=0 THENIF CNT4B8 THENCLKOUT =CLK;ARIEND=0;ELSE CLKOUT=0;ARIEND=1;END IF;ELSE CLKOUT=CLK;ARIEND=0;END IF;END PROCESS;END ARCHITECTURE ART;LIBRARY IEEE

8、;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_V

9、ECTOR(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;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);E

10、ND ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(CLK,LOAD)ISBEGINIF CLKEVENT 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;LIBRARY IEEE;USE IEEE.STD_LOGIC

11、_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

12、CLKEVENT AND CLK= 1 THENR16S(6 DOWNTO 0)=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)=D;END IF;END PROCESS;QCIN,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;LIBRARY IEEE;USE IEEE.STD_LOGIC

13、_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;LIBRARY

14、 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:

15、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_LO

16、GIC;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 ADDER8BCOMPONENT 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

17、 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

18、DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT=S7; S1CLK,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 POR

19、T MAP(CLK=S2,CLR=S3,D=S6(8 DOWNTO 0),Q=S7(15DOWNTO 0);END ARCHITECTURE ART;4乘法器仿真1) 系统仿真情况输入值 A=OAH、B=OCH,结果 D0UT=0078H;输入值 A=0CH、 B=0AH, 结果 DOUT=0078H;输入值 A=02H、 B=03H, 结果 DOUT=0006H;仿真图如下:abc MULTI8X8.vhd| 令 Compilation Report - Flow Summary| 也 MULTI8X8.vwf*| 令 Simulation Report - Simulation Wavef

20、ormsMaster Time Bar:0 ps0190 X00C8 0078 X00001_11113 psei|eei f $ e frm2) 仿真分析当START输入信号为“1”,REG16B清零和被乘数A7.O向移位寄存器加载。 此后 START 信号为“0”,乘法进行。乘法时钟从 ARICTL 的 CLK 输入。当被乘数 加载于 8 位右移寄存器 SREG8B 后,随着每一时钟节拍,最低位在前,由低位至 高位逐位移出。当为 1 时,与门 ANDARITH 打开,8 位乘数 B 在同一节拍进入八 位加法器,与上一次锁存在 16 位锁存器 REG16B 中高 8 位进行相加,其和在下一 时钟节拍的上升沿被锁进此寄存器。而当被乘数移出位为 0 时,与门全零输出。 如此往复,直至八个时钟脉冲后,有 ARICTL 的控制,乘法运算终止 ARIEND 输出 高电平,以此点亮发光管,以示乘法结束。此时,REG16B的输出值即为最后乘 积。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!