




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、湖北民族学院 题目:基于EDA乘法器课 程设计论文 专 业: 电子信息科学与技术 班 级: 学 号: 学生姓名: 指导教师: 袁 2011 年6月22日 目录:电子学课程设计1一、综述21.课程设计的性质、目的和任务22.课程设计基本要求23.乘法器总体设计2二、设计内容与仿真结果31.防抖存数部分3小结62.输入模块部分73.LED显示部分74.乘法部分8小结105.选择显示部分106.数码管显示部分117.整体结果13小结138.附2进制转BCD码14小结15三、总结15一、综述1. 课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。这是由于创新基于实践、源于实践
2、,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。2. 课程设计基本要求掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。3. 乘法器总体设计本设计由防抖存数模块,输入模块,乘法模块,LED显示模块,选择显示模块以及数码管显示模块组成。可实现两个5位数相乘。用发光二极管显示输入数值,用7段显示器显示十进制结果。乘数和被乘数分两次由实验箱上
3、的按键输入,同时在数码管显示分别显示乘数与被乘数。输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能,显示采用16进制。KEY1KEY5为数A、数B的输入端,KEY6表示乘号,KEY7表示等号。初始时刻数码管显示“00”,此时可直接输入数A,数码管显示数A,此后按下KEY6,表示数A输入完毕,此后输入为数B,数码管显示数B,数B输入完毕,按下KEY7,对输入的两数进行乘法计算,并由数码管显示结果。各模块均由VHDL语言编写,例化成元件后采用原理图法进行连接。可简单清晰地描述各模块之间信号的传递。实验箱主要由EPM7128SLC84-15及其外围电路组成,箱上LED及数码管均为
4、共阳极接法,按键按下时输出高电平。乘法器整体设计如下图所示:二、 设计内容与仿真结果1. 防抖存数部分 本设计采用按键输入,所以需对按键进行防抖,同时,由于按键按下后会弹起,不能保持输出高电平,所以须对输入处理,此处曾设计了两种方案:方法一、 采用RS触发器搭建而成,R端接地,在时钟上升沿触发下,S端输入高电平(按下按键)时Q端输出为高,此后S端输入低电平(松开按键),Q端保持输出为高。 用RS触发器搭建的实现方式如图:但此方法在输入A时置为高的位,输入B时仍为1,此时需要清零。所以将清零端接到”乘法”(图中为”CHENG”)控制端,按下此键,表示数A输入完成,同时对前5位清零。按下“等号”(
5、图中为”DENGYU”)后,计算完成,需对各位清零。在试验箱上实验时发现,用一位按键清零,干扰十分严重,只要有输入就会对其他位清零。故采用两位同时控制清零。“CHENG”与“RES”同时按下清前5位,“DENGYU”与“RES”同时按下清各位零。注意按“CHENG”的时间前后都要长于按“RES”的时间,按“DENGYU”的时间前后要短于按“RES”的时间,才能达到正确的效果。仿真结果如图:方法二、 采用程序方法控制,当检测到输入的上升沿时输出取反。此时需要按键的输入稳定,故需防抖模块,可用两个D触发器搭建,也可用程序描述,防抖时需要的时间延迟可计数实现,也可对实验箱的时钟分频,得到稳定的时钟脉
6、冲防抖。此处采用分频方式实现。分出8HZ的频率。整体电路如图所示:防抖模块主要程序:ARCHITECTURE behave OF fangdou ISSIGNAL QA,QB:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1') THENQA<=KEY;QB<=QA;END IF;KOUT<=QA AND (NOT QB);END PROCESS;END behave;程序所描述的原理图为:仿真结果如下:KEY(保持输入)模块主要程序:ARCHITECTURE behave OF KEY I
7、SBEGINPROCESS(SHURU)VARIABLE QA:STD_LOGIC;BEGINIF(SHURU'EVENT AND SHURU='1') THENQA:=NOT QA;END IF;SHUCHU<=QA;END PROCESS;END behave;仿真结果如下:可以看出,与二分频效果相同。分频模块主要程序:ARCHITECTURE behave OF fenpin ISSIGNAL QA:STD_LOGIC;SIGNAL QB:STD_LOGIC;BEGINPROCESS(clk)VARIABLE I:INTEGER RANGE 0 TO 99
8、;BEGINIF(clk'event and clk='1') THENIF(i<99) THENI:=I+1;ELSIF(i=99) THENi:=0;QA<=NOT QA;END IF;END IF;-HZ8<=QA;END PROCESS;PROCESS(QA)VARIABLE J:INTEGER RANGE 0 TO 99;BEGINIF(QA'event and QA='1') THENIF(J<99) THENJ:=J+1;ELSIF(J=99) THENJ:=0;QB<=NOT QB;END IF;EN
9、D IF;-HZ8<=QB;END PROCESS;PROCESS(QB)VARIABLE K:INTEGER RANGE 0 TO 49;VARIABLE QC:STD_LOGIC;BEGINIF(QB'event and QB='1') THENIF(K<49) THENK:=K+1;ELSIF(K=49) THENK:=0;QC:=NOT QC;END IF;END IF;HZ8<=QC;END PROCESS; END behave;5分频仿真结果如下:小结:方法 一 在试验箱上进行测试时,干扰仍然较大,实现较为困难,且控制麻烦。方法二不需单独
10、清零,控制方便。但整体会占用较大资源,本 设 计在资源充裕的情况下采用方法二。当然也可用拨动开关控制,控制容易,资源占用也较少,但是为了更好的模拟计算器输入,最终并未采用此方法。在写分频程序时,开始采用一次分频至8HZ,此方式会占用较大资源,故分三次进行分频,资源占用有明显减少,但仍然很多。此时并未对变量I,J,K设定范围,当对I,J,K设定范围后,如“VARIABLE I:INTEGER RANGE 0 TO 99 ;”,资源占用大大减少。采用这两种方法可省下很多资源。2. 输入模块部分本部分主要实现输入数的处理,将符号为单独取出存入1寄存器,将4为数字位存入1寄存器。当“CHENG”为低电
11、平时,将输入存为shuA及FA。当“CHENG”为高电平时,将输入存为shuB及FB。主要程序如下:ARCHITECTURE behave OF shuru ISBEGINPROCESS(CLK,FU,KEY1,KEY2,KEY3,KEY4,CHENG)BEGINIF(CLK'EVENT AND CLK='1') THENIF CHENG='0' THENshuA<=KEY1&KEY2&KEY3&KEY4;fuA<=FU; ELSIF CHENG='1' THENshuB<=KEY1&KE
12、Y2&KEY3&KEY4;fuB<=FU; END IF;END IF;END PROCESS;END behave;仿真结果如下:3. LED显示部分本部分将输入的乘数、被乘数及控制计算的乘以、等于信号用发光二极管显示。LED一端已经接高电平,故输入低电平可使其发光。有输入模块输出的有效信号均为高电平,此模块只需将输入取反,输出接到个二级管一端即可。主要程序如下:ARCHITECTURE behave OF led ISBEGINPROCESS(fa,fb,SA,SB)VARIABLE i:integer:=0;BEGINlA<=not fa;lB<=not
13、 fb;CC<=NOT RC;CD<=NOT RD;for i in 0 to 3 loopledA(i)<=not SA(i);ledB(i)<=not SB(i);end loop;END PROCESS;END behave;仿真如下:4. 乘法部分首先分析笔算乘法方法。设A=1011,B=1101根据我们传统的计算乘法的方法,乘积符号为两数符号异或而得。其数值部分的运算如下:A 1011B × 11011011 A×20 A不移位 0000 A×21 A左移1位 1011 0×22 A左移2位 1011 A×23
14、 A左移3位 10001111所以 A×B=+10001111。以上笔算算法,包含A的多位左移,可对此算法进行改进。参照计算机组成原理一书,AB=A1101=2-11A+2-11A+2-10A+2-11A+0。两数相乘的过程,可视做加法和移位(乘2-1相当于做一位右移)。此方法,共进行了4次1位右移。写程序过程中,发现从高位算起并左移的算法,只需进行3次1位左移。本程序采用这用方法:AB=222B(3) A+0+B(2) A+B(1) A+B(0) A。乘以2可看成左移一位。VHDL实现方法,完全程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.AL
15、L;-USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY chengfa ISPORT (fuA,fuB:IN STD_LOGIC; shuA,shuB:IN STD_LOGIC_VECTOR(3 DOWNTO 0);- CLK, dengyu:IN STD_LOGIC; fuhao:OUT STD_LOGIC; AXB:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END chengfa;ARCHITECTURE cf OF chengfa ISBEGINPROCESS(DENGYU)VA
16、RIABLE QA,QB,QC:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN-IF(clk'event and clk='1') THENIF(dengyu='1') THENQA:="0000"&shuA;QB:="00000000"FOR I IN 3 DOWNTO 0 LOOPCASE shuB(I) ISWHEN '1'=>QC:=QA+QB;QB:=QC;WHEN '0'=>QC:=QB;WHEN OTHERS=>NULL;
17、END CASE;FOR J IN 6 DOWNTO 0 LOOPQB(J+1):=QB(J);- QB(0):='0'END LOOP;QB(0):='0' END LOOP;AXB<=QC;fuhao<=fuA XOR fuB;END IF;-END IF;END PROCESS;END cf;仿真结果如下:小结:本模块并未采用被广泛使用的分别移位整体相加的方法,而是根据课本给出的乘法算法的改进算法再次改进,方便程序实现。并为乘法运算位数的扩展提供了方便,只需改动几个数字,便可轻松实现更多位数的乘法运算。虽然一开始看到这种计算方法便确定本设计要用
18、其实现,但实际编程过程中仍遇到了很多麻烦。开始时由于刚刚接触EDA设计,甚至不能掌握其基本思想,对程序中定义的变量QB的移位方法就困扰了很久。应为总想着一步完成,而93标准中的逻辑移位运算符“SLL”在MAX PLUS中并不能调用,便在此停留了很久,甚至有放弃此方法的想法。后来查参考书发现移位寄存器的VHDL描述,才恍然大悟,循环语句便可轻松搞定。由此确定了此方法可行,就是编程描述的问题了。此时语法虽没问题,可编辑通过。但逻辑关系却没有弄清,以致仿真时结果不正确。经过反复思考,多次改动后,才确定了上述程序。对VHDL语言的真正了解是在编写了此模块后,编写过程中经常会犯些语法错误,多错误的不断改
19、正正是学习语言的很好的方式。对于信号与变量的区别也有了初步的体会。同时发现,需要先弄清自己的思路,对整个过程有明确的认识,不急不躁的一步步完成,才能少犯错误。例如,对QB的移位曾这样书写:FOR J IN 7 DOWNTO 1 LOOPQB(J):=QB(J-1);QB(0):='0'END LOOP;写完之后并没有发现有什么不可,仿真时,用6×9等偶数乘以奇数仍能计算正确。可是整体仿真时,用11×13时,却得出131这样的结果,13×11为133。11×10为100。总结之后,当被乘数A为偶数时,可得到正确结果,被乘数A为奇数乘数B为偶
20、数时,为(A-1) ×B。被乘数A为奇数乘数B为奇数时,为(A-1) ×B+1。仔细查看程序,发现时移位时QB(0)位在每次循环时都被置零。结果程序改为:FOR J IN 7 DOWNTO 1 LOOPQB(J):=QB(J-1);END LOOP;QB(0):='0'后结果正确。5. 选择显示部分本部分主要用于选择数码管需要显示的数据。当 “DENGYU”未按下时,输出正在从键盘输入的数,“DENGYU”按下之后,控制其输出乘法运算结果。主要程序如下:ARCHITECTURE behave OF choose ISBEGINPROCESS(clk)VARI
21、ABLE QA:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINIF(clk'event and clk='1') THENQA:=cheng&dengyu;CASE QA ISWHEN"00"=>XS<="0000"&shuA; fuhao<=fuA;WHEN"10"=>XS<="0000"&shuB; fuhao<=fuB;WHEN"11"=>XS<=shu; fuhao<
22、;=fu;WHEN OTHERS=>XS<="0000"&shuA; fuhao<=fuA;END CASE;END IF;END PROCESS;END behave;仿真波形如图:6. 数码管显示部分本部分主要完成译码功能,将送入的数据译码成共阳接法的数码管可正确显示的16进制编码。为使程序简洁,将译码模块编为一函数,需要译码时只需调用此函数即可。完整程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSI
23、GNED.ALL;ENTITY xianshi_hs ISPORT (FU:IN STD_LOGIC;XS:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; XGE,XSHI,XFU:OUT STD_LOGIC_VECTOR(7 DOWNTO 0 );END xianshi_hs;ARCHITECTURE behave OF xianshi_hs IS-SIGNAL ZSHU:STD_LOGIC_VECTOR(7 DOWNTO 0 );?FUNCTION zhuanhuan(shu:STD_LOGIC_VECTOR(3 DOWNTO 0) r
24、eturn STD_LOGIC_VECTOR ISVARIABLE ZSHU:STD_LOGIC_VECTOR(7 DOWNTO 0 );BEGIN CASE SHU ISWHEN"0000"=>ZSHU:="00000011"WHEN"0001"=>ZSHU:="10011111"WHEN"0010"=>ZSHU:="00100101" WHEN"0011"=>ZSHU:="00001101"WHEN"
25、;0100"=>ZSHU:="10011001"WHEN"0101"=>ZSHU:="01001001"WHEN"0110"=>ZSHU:="01000001"WHEN"0111"=>ZSHU:="00011111"WHEN"1000"=>ZSHU:="00000001"WHEN"1001"=>ZSHU:="00011001"WHE
26、N"1010"=>ZSHU:="00010001"WHEN"1011"=>ZSHU:="11000001"WHEN"1100"=>ZSHU:="01100011"WHEN"1101"=>ZSHU:="10000101"WHEN"1110"=>ZSHU:="01100001"WHEN"1111"=>ZSHU:="01110001&qu
27、ot;WHEN OTHERS=>ZSHU:="00000011"END CASE;RETURN ZSHU;END zhuanhuan;BEGINPROCESS (clk)BEGINIF(CLK'EVENT AND CLK='1') THENXGE<=zhuanhuan(XS(3 DOWNTO 0);XSHI<=zhuanhuan(XS(7 DOWNTO 4);-XBAI<=zhuanhuan(BAI);CASE FU ISWHEN'1'=>XFU<="11111101"WHEN
28、OTHERS=>XFU<="11111111"END CASE;-XFU<="11111101" WHEN(FU='1') ELSE- "11111111"END IF;END PROCESS;END behave; 仿真结果如下:7. 整体结果将各模块例化成元件并连线后,得到最后的原理图:仿真结果如下:小结:在初始条件下,需按下“CHENG”和“DENGYU”对这两位进行清零。输入完数A后,按下“CHENG”,输入数B,对A为高的位按键输入为清零,对A为低的位按键输入位置1。由于仿真时如采用适用于硬
29、件的分频电路需要处理教程时间,故此处采用5分频进行仿真。8. 附2进制转BCD码原定计划为用10进制显示,这样需要用到2进制转BCD码的转换模块。但编译完成后,会占用很大的结构资源,便忍痛将其舍弃。完整程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY zhuan2_10 ISPORT (XS:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; GE,SHI,BAI:OU
30、T STD_LOGIC_VECTOR(3 DOWNTO 0 );END zhuan2_10;ARCHITECTURE behave OF zhuan2_10 ISBEGINPROCESS(clk)VARIABLE QA:STD_LOGIC_VECTOR(7 DOWNTO 0);VARIABLE I:INTEGER RANGE 0 TO 2;VARIABLE sum_g,sum_s,sum_b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF(clk'event and clk='1') THENIF I=0 THEN QA:=XS;sum_b:="0000"sum_s:="0000"sum_g:="0000" I:=1;-END IF;ELSIF I=1 THENIF (QA>=100) THEN QA:=QA-100;sum_b:=su
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省白银市平川区2025年小升初全真数学模拟预测卷含解析
- 北京工业职业技术学院《唐诗和唐宋词经典导读》2023-2024学年第一学期期末试卷
- 2025年苏州市工业重点中学初三下期中试题含解析
- 石家庄职业技术学院《中国现当代文学A》2023-2024学年第二学期期末试卷
- 2021年消防知识培训免
- 装备管理法规
- 重庆市大学城高中英语 Unit 1 Olympic History vocabulary教学设计 重庆大学版必修5
- 11.9消防知识课件
- 小学五年级机器人编程课 6.《八音盒》活动教学设计
- 社区护理案例
- 两位数乘一位数计算质量作业口算题
- 认知行为疗法讲解
- 史丹利行业分析
- 荒山绿化方案
- H3C全系列产品visio图标库
- 恩赐测试完整版本
- “科学与文化论著研习”任务群教学:以《改造我们的学习》为例
- canva可画行业分析
- 《安徽大学简介》课件
- 用户体验与用户界面设计培训:提高用户体验与用户界面设计的技术与方法
- 小学数学六年级下册数学广角鸽巢问题教学课件22
评论
0/150
提交评论