EDA实习之8位乘法器设计

合集下载

EDA实验--8位二进制乘法电路

EDA实验--8位二进制乘法电路

EDA数字系统设计实验——8位二进制乘法电路学院:电子工程学院学号:0210****姓名:***8位二进制乘法电路1.选题目的:通过八位二进制乘法器设计实验,进一步熟悉VHDL语言的电路设计,及数字电路的基本知识,为以后进一步在数字电路学习上奠定基础。

2.设计要求8位二进制乘法采用移位相加的方法。

即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。

直到所有的部分积都被加过一次。

例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:1 1 0 1 0 1 0 1× 1 0 0 1 0 0 1 11 1 0 1 0 1 0 1 N0与被乘数相乘的部分积,部分积右移一位1 1 0 1 0 1 0 1 N1与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 0 0 1 1 1 1 1 1 11 0 0 1 1 1 1 1 1 1 两个部分积之和,部分积之和右移一位+ 0 0 0 0 0 0 0 0 N2与被乘数相乘的部分积0 1 0 0 1 1 1 1 1 1 10 1 0 0 1 1 1 1 1 1 1 与前面部分积之和相加,部分积之和右移一+ 0 0 0 0 0 0 0 0 N4与被乘数相乘的部分积· · ·· · · N7与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 1 1 1 0 1 0 0 1 0 0 1 1 1 1 与前面部分积之和相加0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 右移一位得到最后的积为了实现硬件乘法器,根据上面的乘法的计算过程可以得出3点:一是只对两个二进制数进行相加操作,并用寄存器不断累加部分积;而是将累加的部分积左移(复制的被乘数不移动);三是乘数的对应位若为0时,对累加的部分积不产生影响(不操作)。

中山学院EDA综合实验报告-8位硬件乘法器设计

中山学院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、了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的

8位乘法器设计范文

8位乘法器设计范文

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位加法器将这些部分乘积相加,得到最终的乘积。

这个设计方法的优点是每个一位乘法器可以独立并行地进行计算,提高了计算效率。

而且,部分乘积生成和部分乘积相加可以分别设计和优化,使得整个乘法器的电路结构更清晰。

8位硬件乘法器设计

8位硬件乘法器设计
dout[i]<=B[i]&abin;
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位硬件乘法器电路计

电子技术课程设计----移位相加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乘法器功能类似一个特殊的与非门。

EDA课程设计八位乘法器

EDA课程设计八位乘法器

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、综合。

将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。

8位乘法器的设计

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]向移位寄存器加载。

8位乘法器设计范文

8位乘法器设计范文

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位乘法器实验报告

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位乘法器设计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二、方案综合评价与结论它由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好,电路原理简单,连线很少,制作起来方便易行,总体来说还是很成功的。

八位串 并行乘法器设计

八位串 并行乘法器设计

八位串并行乘法器设计作品功能如下: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位乘法器_实验报告

南华大学船山学院实验报告(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位二进制乘法器设计报告

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 位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

毕业论文-8位乘法器的设计

毕业论文-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位乘法器的设计吴小东指导老师:华婷婷(黄山学院信息工程学院,黄山,安徽 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位乘法器电路设计

移位相加 8 位硬件乘法器电路设计纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于 PLD 器件外接 ROM 九九表的乘法器则无法构成单片系统,也不实用。

这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由 FPGA 构成实验系统后,可以很容易的用 ASIC 大型集成芯片来完成,性价比高,可操作性强。

关键词:FPGA,PLD,ROM1 设计任务与要求1.1 内容由 8 位加法器构成的以时序逻辑方式设计的 8 位乘法器乘法通过逐向移位加原理来实现,从被乘数的最低位开始,若为 1,则乘数左移与上一次和相加;若为 0,左移后以全零相加,直至被乘数的最高位。

1.2 要求重点掌握 VHDL 设计电路模块;在掌握 8 位加法器设计的基础上,进一步掌握8×8 位乘法器的设计;进一步学习开发系统,掌握MAX+PLUS II 的设计流程。

2 总体框图2.1 方案设计此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八加法器。

所以关键是设计好八位加法器方案一八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器它的原理简单,资源利用率和进位速度方面都比较好。

综合各方面的考虑,决定采用方案二。

3 选择器件与功能模块3.1 选择器件SREG8B(移位寄存器);REG16B(16 位琐存器);ARICTL(运算控制器);ANDARITH(1 位乘法器);ADDER8B(8 位加法器);数码管(显示结果)。

3.2 基本原理图 1 基本原理图本乘法器如图 1 所示:由五个模块组成。

其中 ARICTL 是乘法运算控制电路,它的 START 信号上的上跳沿与高电平有 2 个功能,即 16 位寄存器清零和被乘数 A[7..0]]向移位寄存器 SREG8B 加载;它的低电平则作为乘法使能信号,乘法时钟信号从 ARICTL 的 CLK 输入。

EDA课设八位硬件乘法器

EDA课设八位硬件乘法器

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:10446234常州大学EDA 技术课程设计报告题目:移位相加8位硬件乘法器设计学生:朱京学院(系):信息科学与工程学院专业班级:电子102 指导教师:李文杰一、设计题目移位相加8位硬件乘法器设计二、设计背景纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。

基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。

其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为1,则乘数左移后与上次的和相加,若为0,左移后与全0相加,直至被乘数的最高位。

三、设计内容及要求设计内容:设计移位相加8位硬件乘法器,完成8位被乘数A[7..0]和8位乘数B[7..0]的乘法运算,得到16位的乘法运算输出DOUT[15..0]。

(1)设计8位移位寄存器SREG8B,当被乘数加载于SREG8B后,随时钟节拍,最低位在前,由低位至高位逐位移出。

(2)设计与门,根据移位寄存器输出是否为1,决定输入加法器的是8位乘数还是全零。

(3)设计8位加法器,将8位乘数或全零与16位锁存器的高8位进行相加。

(4)设计16位锁存器REG16B,在时钟到来时,锁存来自加法器的输出至高8位,并右移低8位。

要求:1)根据系统设计要求,采用自顶向下的方法,划分系统主要模块,画出整体设计原理框图。

2)根据工作原理、用硬件描述语言对设计内容实现,列出设计程序清单,给出仿真波形图和调试中存在问题及解决方法。

3)设计内容下载至目标芯片,在EDA的GW48型实验箱进行功能验证。

4)谈谈该课题的课程设计中遇到的问题,获得哪些技能和体会,以及建设性意见。

四、设计步骤和安排:(1)题目安排;图书馆查相关资料;(2)设计原理研究,总体设计;(3)各主要模块的VHDL设计。

各模块的设计仿真分析。

(4) 完成系统顶层文件设计,系统总体功能的仿真分析。

(5) 将设计内容进行硬件配置,在GW48实验箱上进行调试。

(6) 撰写课程设计报告、答辩并提交报告。

目录1产品设计介绍 (1)1.1 概念: (1)1.2 意义: (1)1.3主要功能: (1)1.4设计平台: (1)1.4.1硬件平台: (1)1.4.2软件平台: (1)2方案设计及实现 (2)2.1系统实现原理 (2)2.2 设计步骤 (2)2.2.1系统介绍: (2)2.2.2原理框图: (2)2.3主要模块之8位右移寄存器模块的设计 (4)2.3.3源代码: (4)2.3.4仿真图: (5)2.3.5仿真分析: (5)2.4主要模块之8位加法寄存器模块的设计 (6)2.4.3源代码: (6)2.4.4仿真图: (6)2.5主要模块之选通与门模块的设计 (7)2.5.3源代码: (7)2.5.4仿真图: (8)2.5.5仿真分析: (8)2.6主要模块之16位锁存器的设计 (9)2.6.4仿真图: (10)2.6.5仿真分析: (10)2.7系统总体仿真 (11)2.7.1仿真图: (11)2.7.2仿真分析: (11)3硬件调试 (11)3.1调试方法: (11)3.2调试步骤: (11)3.3调试结果及分析: (12)4心得体会及总结 (12)5参考文献 (12)6附录 (13)6.1引脚锁定 (13)6.2功能扩展 (13)1产品设计介绍1.1 概念:该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。

1.2 意义:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。

基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。

其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为1,则乘数左移后与上次的和相加,若为0,左移后与全0相加,直至被乘数的最高位。

1.3主要功能:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

1.4设计平台:1.4.1硬件平台:GW48 EDA实验系统1.4.2软件平台:MAX+plus II;Windows72方案设计及实现2.1系统实现原理在下图中,START信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。

CLK 为乘法时钟信号。

当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。

当为1时,与门ANDER打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。

而当被乘数的移出位为0时,与门全零输出。

如此往复,直至8个时钟脉冲后,乘法运算过程中止。

此时SREG16B的输出值即为最后的乘积。

此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。

本设计采用层次描述方式,且用原理图输入和文本输入混合方式建立描述文件。

下图是乘法器顶层图形输入文件,它表明了系统由8位右移寄存器(SREG8B)、8位加法器(ADDER8)、选通与门模块(ANDER)和16位锁存器(SREG16B)所组成,它们之间的连接关系如下图所示。

2.2 设计步骤2.2.1系统介绍:此移位相加8位硬件乘法器分为四大部分。

第一部分:8位寄存器设计第二部分:选通与门设计第三部分:8位带进位加法器第四部分:16位锁存器2.2.2原理框图:移位相加硬件乘法器电路原理图16位锁存器8位寄存器加法器选通与门clk 输入输出高8位2.3主要模块之8位右移寄存器模块的设计2.3.1 模块说明:输入为clk 、load 和din ,输出为q ;2.3.2 模块功能:模块的主要功能是数据右移。

8位右移寄存器工作流程图2.3.3源代码:library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity SREG8B is port(clk,load:in std_logic; din:in std_logic_vector(7 downto 0);q:out std_logic);end SREG8B;architecture behave of SREG8B issignal reg8:std_logic_vector(7 downto 0); beginprocess(load,clk) beginclk=’1’’结束YYN N输出最低位装载新数据开始load=’0’数据右移if(clk'event and clk='1')thenif(load='0')thenreg8<=din;elsereg8(6 downto 0)<=reg8(7 downto 1);end if;end if;end process;q<=reg8(0);end behave;2.3.4仿真图:2.3.5仿真分析:在上升沿脉冲到来且load为0的时候,装载新数据,并输出din(0);在load为1的时候,进行数据右移,并输出din(0)。

2.4主要模块之8位加法寄存器模块的设计2.4.1模块说明:输入为a、b,输出为q;2.4.2模块功能:模块的主要功能是实现两个8位数的加法运算8位加法寄存器的工作流程图开始q<=a+b结束2.4.3源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ADDER8 isport(a:in std_logic_vector(7 downto 0);b:in std_logic_vector(7 downto 0);q:out std_logic_vector(8 downto 0));end ADDER8;architecture behave of ADDER8 isbeginq<=a+b;end behave;2.4.4仿真图::2.4.5仿真分析:这是一个8位带进位加法器,输出q 为输入a 与输入b 的和,最高位q (8)是进位位2.5主要模块之选通与门模块的设计2.5.1模块说明:输入为abin 和din ,输出为q ;2.5.2模块功能:模块的主要功能是完成8位与1位运算。

选通与门模块的工作流程图2.5.3源代码: library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ANDER is port(abin:in std_logic;din:in std_logic_vector(7 downto 0);q:out std_logic_vector(7 downto 0)); end ANDER;architecture behave of ANDER isabin=’1’q<="00000000"开始结束q<=dinbeginprocessbeginif(abin = '1')thenq<=din;elseq<="00000000";end if;end process;end behave;2.5.4仿真图:2.5.5仿真分析:在abin为‘1’的时候,输出q=din;在abin为‘0’的时候,输出q=“00000000”。

2.6主要模块之16位锁存器的设计2.6.1模块说明:输入为clk 、clr 和din ,输出为q ;2.6.2模块功能:模块的主要功能是将数据锁存。

16位锁存器工作流程图2.6.3源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SREG16B isport(clk,clr:in std_logic;din:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0));end SREG16B;architecture behave of SREG16B issignal reg16:std_logic_vector(15 downto 0);beginprocess(clr,clk)beginif(clr = '0')thenreg16<="0000000000000000"; 开始 结束 清零 锁存输入值 并右移低8位 clr=’0’clk=’1’ Y Y N 输出16位结果elsif(clk'event and clk='1')thenreg16(15 downto 7)<=din;reg16(6 downto 0)<=reg16(7 downto 1);end if;end process;q<=reg16;end behave;2.6.4仿真图:2.6.5仿真分析:当clr为‘0’的时候,输出清零;在clr为‘1’且上升沿脉冲到来的时候,输入din锁存至输出的高9位且将低8位右移一位。

相关文档
最新文档