实验三 8位乘法器的设计
实验三 8位算术逻辑运算实验
![实验三 8位算术逻辑运算实验](https://img.taocdn.com/s3/m/43f13227915f804d2b16c146.png)
实验一 讲解结束 实验开始
二、实验环境
硬件:DVCC-C8JH 实验箱。
三、实验内容
1、算术逻辑运算功能发生器 74LS181(U31、U32) 以手动方式用二进制开关S3、S2、S1、S0、CN、M来 模拟74LS181(U31、U32)的功能控制信号S3、S2、 S1、S0、CN、M ; 2、其它电平控制信号以手动方式用二进制开关 LDDR1、LDDR2、ALUB、SWB来模拟 3、通过跳线器切换,其中ALUB`、SWB`为低电平 有效,LDDR1、LDDR2为高电平有效。 另有信号T4为脉冲信号,在手动方式下进行实验时, 只需将跳线器J23上T4与手动脉冲发生开关的输出端 SD相连,按动手动脉冲开关,即可获得实验所需的单
⑴ 连接线路,仔细查线无误后,接通电源。
⑵ 用二进制数码开关KD0~KD7向DR1和DR2寄存器置数。方法:关闭 ALU输出三态门(ALUB`=1),开启输入三态门(SWB`=0),输入脉冲 T4按手动脉冲发生按钮产生。
六、 实 验 数 据
七、思考题
1、在向DR1和DR2寄存器置数时S3、S2、S1、 S0、M、Cn如何设置? 2、DR1置数完成后,如果不关闭控制端, LDDR1会怎样? 3、为什么在读取74LS181的输出结果时要打开 输出三态门的控制端ALUB’ ?
四、 实 验 线 路 连 接
四、实验线路连接(续)
本实验用到4个主要模块:⑴低8位运算器模块,⑵数 据输入并显示模块,⑶数据总线显示模块,⑷功 能开关模块(借用微地址输入模块)。 根据实验原理详细接线如下: ⑴ ALUBUS连EXJ3; ⑵ ALUO1连BUS1; ⑶ SJ2连UJ2; ⑷ 跳线器J23上T4连SD; ⑸ LDDR1、LDDR2、ALUB、SWB四个跳线器拨在左 边(手动方式); ⑹ AR跳线器拨在左边,同时开关AR拨在“1”电平。
移位相加8位乘法器的设计
![移位相加8位乘法器的设计](https://img.taocdn.com/s3/m/1a0d7100bb68a98271fefafe.png)
EDA技术课程大作业设计题目:移位相加8位乘法器的设计院系:电子信息与电气工程学院学生姓名:学号:200902070017专业班级:09电子信息工程专升本2010年12月3日移位相加8位乘法器的设计1.设计背景和设计方案1.1设计背景EDA技术(即Electronic Design Automation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Ddscription Langurage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
它在硬件实现方面融合了大规模集成电路制造技术、IC版图设计、ASIC 测试和封装、FPGA(Gield Peogrammable Gate Array)/CPLD(Complex Programmable Logic Device)编程下载和自动测试等技术;在计算机辅助工程方面融合了计算机辅助设计(CAD),计算机辅助制造(CAM),计算机辅助测试(CAT),计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等。
本文介绍设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能1.2设计方案此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八位加法器,所以关键是设计好八位加法器。
方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。
方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好。
应用移位相加原理设计8位乘法器
![应用移位相加原理设计8位乘法器](https://img.taocdn.com/s3/m/0a89221a87c24028915fc328.png)
应用移位相加原理设计8位乘法器1.顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity multi8x8 isport(clkk,start:in std_logic;a,b:in std_logic_vector(7 downto 0);dout:out std_logic_vector(15 downto 0));end entity;architecture struc of multi8x8 iscomponent arictlport(clk,start:in std_logic;clkout,rstall: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 adder8bport(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 sreg8bport(clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;component reg16bport(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end component;signal gndint,intclk,rstall,newstart,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';process(clkk,start)beginif(start='1')thennewstart<='1';else if(clkk='0')thennewstart<='0';end if;end if;end process;u1:arictl port map(clk=>clkk,start=>newstart,clkout=>intclk,rstall=>rstall);u2:sreg8b port map(clk=>intclk,load=>rstall,din=>b,qb=>qb);u3:andarith port map(abin=>qb,din=>a,dout=>andsd);u4:adder8b port map(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 architecture;2.各部件1)arictl—控制元件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl isport(clk,start:in std_logic;clkout,rstall:out std_logic);end entity;architecture bhv of arictl issignal cnt4b:std_logic_vector(3 downto 0);beginprocess(clk,start)beginrstall<=start;if(start='1')thencnt4b<="0000";else if(clk'event and clk='1')thenif(cnt4b<8)thencnt4b<=cnt4b+1;end if;end if;end if;end process;process(clk,cnt4b,start)beginif(start='0')thenif(cnt4b<8)thenclkout<=clk;elseclkout<='0';end if;elseclkout<=clk;end if;end process;end architecture;2)sreg8b—8位移位寄存器元件library ieee;use ieee.std_logic_1164.all;entity sreg8b isport(clk,load:in std_logic;din: in std_logic_vector(7 downto 0);qb:out std_logic );end sreg8b;architecture behav 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 behav;3)andarith—一位乘法元件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 andarith;architecture behav of andarith isbeginprocess(abin,din)beginfor i in 0 to 7 loopdout(i)<=din(i) and abin;end loop;end process;end behav;4)adder8b—8位加法元件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 adder8b;architecture behav of adder8b 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)reg16b—16位移位寄存器元件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is --16 bit shift register port(clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end entity;architecture bhv of reg16b issignal r16s:std_logic_vector(15 downto 0);beginprocess(clk,clr)beginif(clr='1') thenr16s<="0000000000000000" ;else if(clk'event and clk='1')thenr16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;end if;end if;end process;q<=r16s;end architecture;。
中山学院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/4a84e02ba55177232f60ddccda38376baf1fe0a3.png)
8位乘法器设计范文1.乘法器的基本原理乘法器的基本原理是通过将两个数中的每一位进行相乘,得到部分乘积,然后将所有部分乘积相加得到最终的乘积。
以两个8位数A和B相乘为例,可以将A的每一位与B的每一位相乘,然后将部分乘积相加,得到一个16位的结果。
2.乘法器的电路结构一种常见的8位乘法器电路结构是使用一位乘法器和8位加法器组合而成。
这种结构可以将乘法操作分解为多个阶段,简化电路设计。
首先,使用一个一位乘法器对A的每一位分别与B的所有位进行相乘,得到8个部分乘积。
然后,使用8位加法器将这些部分乘积相加,得到最终的乘积。
3.一位乘法器的设计一位乘法器是8位乘法器的基本组成部分。
它是一个计算两个单独位的乘法结果的电路。
常见的一位乘法器实现方法包括使用门电路、Karnaugh图和有限状态机等。
3.1使用门电路的一位乘法器设计一位乘法器可以通过使用与门、或门和非门来实现。
基本原理是将两个输入位相与得到部分乘积的低位,然后使用或门和非门对部分乘积和进位进行处理,得到最终的乘积位和进位位。
3.2 使用Karnaugh图的一位乘法器设计Karnaugh图是一种按照二进制输入和输出函数绘制的图表。
它可以帮助分析和简化布尔代数函数。
使用Karnaugh图可以快速绘制并简化一位乘法器的逻辑电路。
3.3使用有限状态机的一位乘法器设计有限状态机是一种具有有限个状态和状态转移规则的模型。
可以使用有限状态机模型来描述和实现一位乘法器的行为。
这种设计方法可以更好地描述一位乘法器的状态转移关系,但也需要更复杂的控制电路。
4.8位乘法器的实现使用一位乘法器的设计方法,可以将乘法器分为两个阶段:部分乘积生成和部分乘积相加。
首先,使用8个一位乘法器对A的每一位与B的每一位进行相乘,得到8个部分乘积。
然后,使用8位加法器将这些部分乘积相加,得到最终的乘积。
这个设计方法的优点是每个一位乘法器可以独立并行地进行计算,提高了计算效率。
而且,部分乘积生成和部分乘积相加可以分别设计和优化,使得整个乘法器的电路结构更清晰。
ASIC系统设计实验报告八位乘法器
![ASIC系统设计实验报告八位乘法器](https://img.taocdn.com/s3/m/4d0ef851b52acfc788ebc91e.png)
八位乘法器的设计汪明 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可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。
实验三 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/fb11475de45c3b3567ec8b93.png)
end
endmodule
4.基于时序电路的移位相加乘法器-8位加法器
module adder8(cin,A,B,S,cout);
input cin;
input[7:0] A,B;
output[7:0] S;
output cout;
assign {cout,S}=cin+A+B;
2016年10月31日
学号
指导教师
王红航
成绩
批改时间
2016年月日
报告内容
一、实验目的和任务
1.学习应用移位相加原理设计8位乘法器。
2.了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的电路优势。
二、实验原理介绍
图1 8位乘法器逻辑原理图
图2 8位移位相加乘法器运算逻辑波形图
三、设计代码(或原理图)、仿真波形及分析
input [7:0] A;
output qb;
reg[7:0] reg8;
always@(posedge clk or posedge load)
begin
if(load) reg8<=A;
else reg8[6:0]<=reg8[7:1];//移位相加_8位二进制加法器
end
assign qb=reg8[0];
1.基于时序电路的移位相加乘法器-16位移位寄存器
module sreg(clk,clr,d,q);
input clk,clr;
input [8:0] d;
output[15:0] q;
reg[15:0] reg16;
always@(posedge clk or posedge clr)
8位乘法器的设计
![8位乘法器的设计](https://img.taocdn.com/s3/m/c30112086c85ec3a87c2c533.png)
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]向移位寄存器加载。
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/9c6c292a2cc58bd63186bdf1.png)
合肥学院课程设计报告题目:移位相加型8位硬件乘法器系别:电子信息与电气工程系专业:通信工程班级: 13通信工程(1)班学号:姓名:导师:石朝毅成绩:2016年 6 月 11 日移位相加型8位硬件乘法器设计摘要本次设计是基于时序结构的8位移位相加型乘法器,使用软件QuartusII进行仿真设计。
完成此乘法器,我们需要首先设计该乘法器的组件,包括REGSHT模块、SREG8BT模块、AND8B模块和ADDER8BT模块,并对所有元件进行仿真,无误后可进行乘法器的设计。
设计方法使用的是元件例化,具体原理是通过逐项相加来实现乘法功能,最终完成整体的VHDL程序设计并仿真。
关键词:时序;乘法器;元件例化目录第一章前言 (1)1.1设计概述 (1)1.1.1问题提出与原理 (1)1.1.2设计需要 (1)第二章设计过程及结果 (2)2.1设计思路 (2)2.1.1设计须知 (2)2.1.2基本步骤 (2)2.2设计代码及仿真 (3)2.2.1元件REGSHT设计代码及仿真结果 (3)2.2.2元件SREG8BT设计代码及仿真结果 (4)2.2.3元件AND8B设计代码及仿真结果 (5)2.2.4元件ADDER8BT设计代码及仿真结果 (7)2.2.5总模块设计代码及仿真结果 (8)第三章总结 (11)致谢 (12)第一章前言1.1设计概述1.1.1问题提出与原理采用元件例化的设计方法,设计一个移位相加型8位硬件乘法器设计。
下图所示为一个基于时序结构的8位移位相加型乘法器。
图1设计原理图1.1.2设计需要(1)元件REGSHT设计,并仿真;(2)元件SREG8BT,并仿真;(3)元件AND8B,并仿真;(4)元件ADDER8BT,并仿真;(5)整体VHDL程序设计,包括元件例化,并仿真。
第二章设计过程及结果2.1设计思路2.1.1设计须知首先建立文件夹在软件工作的环境下,注意对于不同的器件的设计不能放在同一个文件夹当中这样会造成编译时出现混乱的错误现象。
8位乘法器实验报告
![8位乘法器实验报告](https://img.taocdn.com/s3/m/eda5884e5022aaea998f0fa2.png)
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,乘法运算结束。
八位串 并行乘法器设计
![八位串 并行乘法器设计](https://img.taocdn.com/s3/m/6983f353767f5acfa1c7cdb6.png)
八位串并行乘法器设计作品功能如下:1、输入方式:通过八位拨码开关输入相乘的八位二进制数,按键1和按键2控制乘法器锁存输入的八位二进制数,通过按键3来启动乘法运算。
2、LCD直接显示之前运算的结果。
3、系统时钟采用实验板上提供的50MHz时钟信号源提供时钟的测频基准时间信号。
4、设计成同步电路模式。
一、设计目的:1)熟悉EDA环境下的复杂逻辑模块的设计方法、设计过程及其注意事项;2)学习EDA软件Quartus-II的使用;3)学习硬件描述语言VHDL/Verilog HDL并进行编程;4)学习串并-行乘法器的基本原理和LCD显示的基本原理、控制流程。
二、设计要求:1、采用硬件描述语言VHDL/Verilog HDL设计八位串并行乘法器模块及LCD显示控制模块,并在Quartus-II环境下编译;2、在Quartus-II环境下编辑仿真激励波形,并模拟;3、在MAX-II实验板下载调试;4、撰写设计报告。
三、设计方案:VerilogHDL设计流程:注:1.总体方案是芯片级的2.软件仿真用来检测程序上的逻辑错误3.硬件仿真要根据需要搭成硬件电路,检查逻辑和时序上的错误设计八位串-并行乘法器分为以下三个模块:锁存(按键控制),乘法器(移位相加),LCD显示模块。
拨码开关控制输入数据,key1和key2键进行输入锁存,key1键锁存数据data1,key2键锁存数据data2,等待执行乘法运算,key3键实现乘法的开始运算,结果锁存到数据overcome。
最后,将data1,data2,overcome结果显示到LCD屏幕上。
四、设计过程:1、锁存器模块设计:(参见文件中的reg_bbit.v)module reg_bbit(clk,rst,dain,en,data_reg);input clk,rst,en;input[8:1]dain;output[8:1]data_reg;reg[8:1]data_reg=0;always@(posedge clk or negedge rst)if(!rst)data_reg=8'b 00000000;else if(!en)data_reg=dain;else data_reg=data_reg;endmodule逻辑关系表:仿真图如下:(参见文件中的reg_bbit.vwf)电路图实现:2、乘法运算模块:(参见文件中的mult_8gate.v)module mult_8gate(clk,rst,en,a,b,overcome);parameter size=8;input clk,rst,en;input[8:1]a,b;output[16:1]overcome;reg[16:1]overcome=0;reg[16:1]overcome1=0;integer i=1;always@(posedge clk or negedge rst)begin if(~rst)begin i=1;overcome1=16'b 0000000000000000;end else begin if(i==1)overcome1=16'b 0000000000000000;if(b[i]&&i=8&&!en)begin overcome1=overcome1+(a(i-1));i=i+1;end if(~b[i]&&!en&&i=8)begin overcome1=overcome1;i=i+1;end if(i=8&&en)begin i=1;end if(i 8&&!en)begin overcome1=overcome1;end if(en)begin i=1;overcome1=overcome1;end end end always@(posedge en) begin overcome=overcome1;i=1;end/*always@(negedge en)begin overcome1=0;for(i=1;i=size;i=i+1)if(b[i])overcome1=overcome1+(a(i-1));else overcome1=overcome1;end always@(posedge en)overcome=overcome1;*/endmodule仿真图如下:(参见文件中的mult_8gate.vwf)3、乘法运算和锁存器综合模块:(参见文件中的mul.v)电路实现图Verilog HDL语言编程:module mul(clk,rst,start,en1,en2,daina,dainb,overcome,a,b);input clk,rst;input en1,en2,start;output[8:1]a,b;wire[8:1]a,b;input[8:1]daina,dainb;output[16:1]overcome;reg_bbit u0(clk,rst,daina,en1,a);reg_bbit u1(clk,rst,dainb,en2,b);mult_8gate u2(clk,rst,start,a,b,overcome);endmodule仿真图如下:(参见文件中的mul.vwf)en1是key1键,en2是key2键,start是key3键。
EDA_8位乘法器_实验报告
![EDA_8位乘法器_实验报告](https://img.taocdn.com/s3/m/a1d1275f763231126edb1173.png)
南华大学船山学院实验报告(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位乘法器的设计
![毕业论文-8位乘法器的设计](https://img.taocdn.com/s3/m/a62509711fd9ad51f01dc281e53a580216fc507b.png)
本科生毕业论文(设计)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位乘法器的设计吴小东指导老师:华婷婷(黄山学院信息工程学院,黄山,安徽 245041)摘要:在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。
本文主要是在于如何运用标准硬件描述语言(VHDL)完成八位乘法器,以及如何做二进制位相乘的运算过程。
该乘法器是由八位加法器构成的以时序方式设计八位乘法器,通过逐项移位相加来实现乘法功能,并以MAX+Plus II 软件工具进行模拟,仿真并予以显示。
关键字:乘法器;标准硬件描述语言(VHDL);移位相加;MAX+Plu s II8-bit multiplier designWu xiaodongDirector:hua tingting(College of InformationEngineering,HuangshanUniversity,Huangshan,Anhui,245041) Abstract: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无符号乘法器[整理版]
![8无符号乘法器[整理版]](https://img.taocdn.com/s3/m/3122e207fd4ffe4733687e21af45b307e871f930.png)
8位无符号乘法器设计实验一、乘法原理:乘法通过逐项移位相加原理来实现,从乘数的最低位开始,若为1,则被乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至乘数的最高位。
二、原理框图:三、实验所需程序代码:module mult8(out,a,b,clk);output[15:0] out;input[7:0] a,b;input clk;wire[15:0] out;reg[14:0] temp0=15'b000000000000000;reg[14:0] temp1=15'b000000000000000;reg[14:0] temp2=15'b000000000000000;reg[14:0] temp3=15'b000000000000000;reg[14:0] temp4=15'b000000000000000;reg[14:0] temp5=15'b000000000000000;reg[14:0] temp6=15'b000000000000000;reg[14:0] temp7=15'b000000000000000;function[7:0] mult8x1; //该函数实现8×1 乘法input[7:0] operand;input sel;beginmult8x1= (sel) ? (operand) : 8'b00000000;endendfunctionalways @(posedge clk) //调用函数实现操作数b 各位与操作数a 的相乘begintemp7<=mult8x1(a,b[0]);temp6<=((mult8x1(a,b[1]))<<1);temp5<=((mult8x1(a,b[2]))<<2);temp4<=((mult8x1(a,b[3]))<<3);temp3<=((mult8x1(a,b[4]))<<4);temp2<=((mult8x1(a,b[5]))<<5);temp1<=((mult8x1(a,b[6]))<<6);temp0<=((mult8x1(a,b[7]))<<7);endassign out= temp0+temp1+temp2+temp3+temp4+temp5+temp6+temp7; //加法器endmodule四、功能仿真结果:功能仿真选取a和b两个数都为最大值255(11111111),则结果out=255*255=65025(1111111000000001)功能仿真结果如图所示见下页:(注:采用上升沿触发)。
EDA课程设计八位乘法器
![EDA课程设计八位乘法器](https://img.taocdn.com/s3/m/62e77341336c1eb91a375d92.png)
EDA课程设计报告实验名称:八位乘法器实验地点:@@@@班级:@@@@@学号:@@@@@姓名:@@@@目录一.引言1.1 EDA技术的概念••1.2 EDA技术的特点••1.3 EDA设计流程••1.4 VHDL介绍••二.八位乘法器的设计要求与设计思路••2.1 设计目的••2.2 设计要求••三.八位乘法器的综合设计••3.1 八位乘法器功能••3.2 八位乘法器设计方案••3.3 八位乘法器实体设计••3.4 八位乘法器VHDL设计••3. 5八位乘法器仿真图形••心得体会••参考文献••一、引言1.1 EDA技术的概念EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
1.2 EDA技术的特点利用EDA技术进行电子系统的设计,具有以下几个特点:①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
1.3 EDA设计流程典型的EDA设计流程如下:1、文本/原理图编辑与修改。
首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。
2、编译。
完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。
3、综合。
将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
EDA课设八位硬件乘法器
![EDA课设八位硬件乘法器](https://img.taocdn.com/s3/m/cfd917186fdb6f1aff00bed5b9f3f90f76c64da4.png)
8位硬件乘法器一、设计目的①学习移位相加时序式乘法器的设计方法②学习层次化设计方法③学习原理图调用VHDL模块方法④熟悉EDA仿真分析方法二、设计原理〔1〕设计原理由加法器构成的时序逻辑方式的乘法器的原理是,通过逐项移位相加原理来实现,从被乘数的最低位开始,假设为,假设为1,那么乘数左移与上一次和相加;假设为0,左移后以全零相加,直至被乘数的最高位。
在下列图中。
ARICTL是乘法运算控制电路,它的START信号的上升沿与高电平有两个功能,即16位存放器清0和被乘数A向移位存放器SREG8B加载;它的低电平那么作为乘法使能信号。
CLK为乘法时钟信号,当被乘数加载于8位右移存放器SEG8B后,在时钟同步下由低位至高位逐位移出,当其为1时,与门ANDARITH翻开,8位乘数B在同一节拍进入8位加法器,与上一节拍锁存在16位锁存器REG26B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁存进此锁存器;而当被乘数的移出位为0时,与门全0输出。
如此往复,直至8个时钟脉冲后,乘法运算过程中止,此时REG16B的输出值即为最后乘积。
原理图如下:〔2〕乘法器中各模块〔电路的总体框图〕说明:此电路由五局部组成它们,分别是控制器,锁存器,存放器,乘法器,加法器。
1控制器是一个乘法器的控制模块,用来接受实验系统上的连续脉冲。
2锁存器起锁存的作用,它可以锁存8位乘数。
3移位存放器起移位的作用,便于被乘数可以逐位移出。
4乘法器功能类似一个特殊的与非门。
5加法器用于8位乘数和高8位相加。
三、选择器件与功能模块选择器件:SREG8B(移位存放器)REG16B(16位琐存器)ARICTL〔运算控制器〕ANDARITH(1位乘法器)ADDER8B〔8位加法器〕数码管〔显示结果〕功能模块:1.8位右移存放器SREG8BLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8 IS PORT ( CLK : IN STD_LOGIC; LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);EN:IN STD_LOGIC;QB : OUT STD_LOGIC );END SREG8;ARCHITECTURE behave OF SREG8 ISSIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS (CLK,LOAD,EN)BEGINIF EN='1' THENIF LOAD = '1' THEN REG8 <= DIN;ELSIF CLK'EVENT AND CLK = '1' THENREG8(6 DOWNTO 0) <= REG8(7 DOWNTO 1);END IF;END IF;END PROCESS;QB <= REG8(0);END behave;时序仿真图:2. 8为加法器ADDER8BLIBRARY 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;时序仿真图:3. 选通与门模块:ANDARITHLIBRARY 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 andarith;ARCHITECTURE behave OF andarith ISBEGINPROCESS(ABIN, DIN)BEGINFOR I IN 0 TO 7 LOOPDOUT(I) <= DIN(I) AND ABIN;END LOOP;END PROCESS;END behave;时序仿真图:4. 16为锁存存放器REG16LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16 IS PORT ( CLK,CLR,EN : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END REG16;ARCHITECTURE behave OF REG16 ISSIGNAL R16S : STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK, CLR,EN)BEGINIF EN='1' THENIF 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 IF;END PROCESS;Q <= R16S;END behave;时序仿真图:5.运算控制器ARICTLLIBRARY 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 ART5 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 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 ARCHITECTURE ART5;时序仿真图:四、实验数据记录及结果实验电路图:引脚分布图:仿真结果:进行仿真时,先分别将A,B置数,之后将置入的数据锁存,摁下控制CLK的按钮进行计算,当最左边灯亮起时那么为运算结束,左边灯为结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三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左右,这正是器件延时特征的反映。