移位相加8位硬件乘法器电路电子课程设计.docx
- 文档编号:17389786
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:17
- 大小:53.40KB
移位相加8位硬件乘法器电路电子课程设计.docx
《移位相加8位硬件乘法器电路电子课程设计.docx》由会员分享,可在线阅读,更多相关《移位相加8位硬件乘法器电路电子课程设计.docx(17页珍藏版)》请在冰点文库上搜索。
移位相加8位硬件乘法器电路电子课程设计
移位相加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,左移后以全零相加,直至被乘数的最高位。
三、选择器件
1、配有QuartusII软件的计算机一台;
2、选用FPGA芯片,如:
FLEX10K系列的EPF10K10LC84-4;
(1)、FPGA适配器板:
标准配置是EPF10K10接口板;
(2)、下载接口是数字芯片的下载接口(JTAG),主要用于FPGA芯片的数据下载;
(3)、拨码开关、按键开关和LED灯;
(4)、时钟源。
四、功能模块
1、乘法器等层设计模块
VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
Useieee.std_logic_unsigned.all;
ENTITYMULTI8X8IS--8位乘法器顶层设计
PORT(CLKk,hkey,START:
INSTD_LOGIC;
A,B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Mmax:
outSTD_LOGIC_VECTOR(3DOWNTO0);
ARIEND:
OUTSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDMULTI8X8;
ARCHITECTUREstrucOFMULTI8X8IS
COMPONENTARICTL
PORT(CLK:
INSTD_LOGIC;START:
INSTD_LOGIC;
CLKOUT:
OUTSTD_LOGIC;RSTALL:
OUTSTD_LOGIC;
ARIEND:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTANDARITH
PORT(ABIN:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(7DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCOMPONENT;
COMPONENTADDER8B
PORT(CIN:
INSTD_LOGIC;
A,B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTSREG8B
PORT(CLK:
INSTD_LOGIC;LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(7DOWNTO0);
QB:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTREG16B
PORT(CLK:
INSTD_LOGIC;CLR:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(8DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDCOMPONENT;
SIGNALGNDINT,INTCLK,RSTALL,NEWSTART,QB,clk:
STD_LOGIC;
SIGNALANDSD:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALcount,maxx:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDTBIN:
STD_LOGIC_VECTOR(8DOWNTO0);
SIGNALDTBOUT:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
DOUT<=DTBOUT;GNDINT<='0';
PROCESS(CLK,START)
BEGIN
IFSTART='1'THENNEWSTART<='1';
ELSIFCLK='0'THENNEWSTART<='0';ENDIF;
ENDPROCESS;
Process(hkey)
Begin
If(hkey'eventandhkey='1')thenmaxx<=maxx+'1';
Endif;
Endprocess;
Mmax<=maxx;
Process(clkk)
Begin
Ifclkk'eventandclkk='1'then
If(count Elsecount<="0000";clk<=notclk; Endif; Endif; Endprocess; U1: ARICTLPORTMAP(CLK=>CLK,START=>NEWSTART,--FORTHEBETTER CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND); U2: SREG8BPORTMAP(CLK=>INTCLK,LOAD=>RSTALL,DIN=>B,QB=>QB); U3: ANDARITHPORTMAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD); U4: ADDER8BPORTMAP(CIN=>GNDINT,A=>DTBOUT(15DOWNTO8),B=>ANDSD, S=>DTBIN(7DOWNTO0),COUT=>DTBIN(8)); U5: REG16BPORTMAP(CLK=>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT); ENDstruc; 2、8位右移寄存器 (1)模块图形符号及其逻辑功能描述 图1 (2)VHDL程序 LIBRARYIEEE;--8位右移寄存器 USEIEEE.STD_LOGIC_1164.ALL; ENTITYSREG8BIS PORT(CLK,LOAD: INSTD_LOGIC; DIN: INSTD_LOGIC_VECTOR(7DOWNTO0); QB: OUTSTD_LOGIC); ENDSREG8B; ARCHITECTUREbehavOFSREG8BIS SIGNALREG8: STD_LOGIC_VECTOR(7DOWNTO0); BEGIN PROCESS(CLK,LOAD) BEGIN IFCLK’EVENTANDCLK=’1’THEN IFLOAD=’1’THENREG8<=DIN; ELSEREG8(6DOWNTO0)<=REG8(7DOWNTO1); ENDIF; ENDIF; ENDPROCESS; QB<=REG8(0);--输出最低位 ENDbehav; (3)仿真结果及其分析 图2 仿真分析: 在时钟脉冲的作用下,高位寄存器的数码送给低位寄存器,作为低位寄存器的次态输出;每输入一个时钟脉冲,寄存器的数据就顺序向右移动一位。 3、8位加法器 (1)模块图形符号及其逻辑功能描述 图3 (2)VHDL程序 LIBRARYIEEE;--8位加法器 USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYADDER8BIS PORT(CIN: INSTD_LOGIC; A,B: INSTD_LOGIC_VECTOR(7DOWNTO0); S: OUTSTD_LOGIC_VECTOR(7DOWNTO0); COUT: OUTSTD_LOGIC); ENDADDER8B; ARCHITECTUREbehavOFADDER8BIS SIGNALSINT,AA,BB: STD_LOGIC_VECTOR(8DOWNTO0); BEGIN AA<='0'&A;BB<='0'&B;SINT<=AA+BB+CIN;S<=SINT(7DOWNTO0); COUT<=SINT(8); ENDbehav; (3)仿真结果及其分析 图5 仿真分析: 输入10000000与00000001相加得到10000001仿真正确 4、1位乘法器 (1)模块图形符号及其逻辑功能描述 图6 (2)VHDL程序 LIBRARYIEEE;--1位乘法器 USEIEEE.STD_LOGIC_1164.ALL; ENTITYANDARITHIS PORT(ABIN: INSTD_LOGIC; DIN: INSTD_LOGIC_VECTOR(7DOWNTO0); DOUT: OUTSTD_LOGIC_VECTOR(7DOWNTO0)); ENDANDARITH; ARCHITECTUREbehavOFANDARITHIS BEGIN PROCESS(ABIN,DIN) BEGIN FORIIN0TO7LOOP--循环,完成8位与1位运算 DOUT(I)<=DIN(I)ANDABIN; ENDLOOP; ENDPROCESS; ENDbehav; (3)仿真结果及其分析 图7 仿真分析: 当ABIN为高电平时输出计算结果,当它为低电平时清零。 仿真分析正确。 5、16位锁存器/右移寄存器 (1)模块图形符号及其逻辑功能描述 图8 (2)VHDL程序 LIBRARYIEEE;--16位锁存器/右移寄存器 USEIEEE.STD_LOGIC_1164.ALL; LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYREG16BIS PORT(CLK,CLR: INSTD_LOGIC; D: INSTD_LOGIC_VECTOR(8DOWNTO0); Q: OUTSTD_LOGIC_VECTOR(15DOWNTO0)); ENDREG16B; ARCHITECTUREbehavOFREG16BIS SIGNALR16S: STD_LOGIC_VECTOR(15DOWNTO0); BEGIN PROCESS(CLK,CLR) BEGIN IFCLR='1'THENR16S<="0000000000000000" ;--时钟到来时,锁存输入值,并右移低8位 ELSIFCLK'EVENTANDCLK='1'THEN R16S(6DOWNTO0)<=R16S(7DOWNTO1);--右移低8位 R16S(15DOWNTO7)<=D;--将输入锁存到高8位 ENDIF; ENDPROCESS; Q<=R16S; ENDbehav; (3)仿真结果及其分析 图9 仿真分析: 输入110010101移位后得到110010*********仿真正确 6、运算控制模块 (1)模块图形符号及其逻辑描述 图10 (2)VHDL程序 LIBRARYIEEE;--运算控制模块 USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYARICTLIS PORT(CLK,START: INSTD_LOGIC; CLKOUT,RSTALL,ARIEND: OUTSTD_LOGIC); ENDARICTL; ARCHITECTUREbehaveOFARICTLIS SIGNALCNT4B: STD_LOGIC_VECTOR(3DOWNTO0); BEGIN RSTALL<=START; PROCESS(CLK,START) BEGIN IFSTART='1'THENCNT4B<="0000"; ELSIFCLK'EVENTANDCLK='1'THEN IFCNT4B<8THENCNT4B<=CNT4B+1;ENDIF; ENDIF; ENDPROCESS; PROCESS(CLK,CNT4B,START) BEGIN IFSTART='0'THEN IFCNT4B<8THENCLKOUT<=CLK;ARIEND<='0'; ELSECLKOUT<='0';ARIEND<='1';ENDIF; ELSECLKOUT<=CLK;ARIEND<='0'; ENDIF; ENDPROCESS; ENDbehave; (3)仿真结果及其分析 图11 仿真分析: 当开始START信号发出后,RSTALL重置,CLKOUT才原样输出CLK信号,起到控制器件工作的作用! 仿真正确! 五、总体设计电路图 图12 1、工作原理: 本乘法器由五个模块组成,其中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的输出即为最后的乘积 2、仿真结果及其分析 图13 仿真分析: 两个十六进制数FD和9F相乘,当开始脉冲加进时,乘法器开始工作,经过八个时钟信号的上升沿,计算出结果! 理论上应等于9D23,实验结果也等于9D23,与理论吻合,仿真正确! 3、管脚分配图 图14 4、硬件验证 (1)试验箱电路板上的连线 (2)设计验证情况 K0~K7分别控制A0~A7,A0为低位;K8~K15分别控制B0~B8,B0为低位。 L0~L15分别为S70~S715的输出,S70为低位;CLK为时钟信号由CLK0提供;START为开始信号由S0控制;ARIEND为运算结束信号,由LED0显示。 验证: 编译,综合后向目标苡片下载适配后的逻辑设计文件,操作步骤省略。 下载适配后, 1>令K0~K15全部置零,即“0x0”,结果显示“0000000000000000”,理论结果也为“0000000000000000”,验证正确; 2>令K0~K15全部置1,即“FFxFF”,结果显示“1111111000000001”,理论结果也为“1111111000000001”,验证正确; 3>令K7~K0置数“10101010”,K15~K8置数“11011011”,即“AAxDB”,结果显示“1001000101101110”,理论结果也为“1001000101101110”,验证正确。 综上所述,硬件验证正确。 六、心得体会 通过电子设计的数字部分EDA设计,我们掌握了系统的数字电子设计的方法,也知道了实验调试适配的具体操作方法。 在设计过程中,我们遇到了各种问题,在李老师的指导下和我们自己的努力,克服了各种问题,最后得到了成功。 但是我也发现了一些问题,我们无法解决。 如: 在ARICTL控制器模块中有一个警告,还有在适配后得到频率高的执行速度还要慢一些等等。 总之,这次设计使我掌握了很多有用的经验,也学到了很多在书本上学不到知识,为以后的学习和工作打下坚实的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移位 相加 硬件 乘法器 电路 电子 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)