《EDA课程设计--2位十进制四则运算器电路.doc》由会员分享,可在线阅读,更多相关《EDA课程设计--2位十进制四则运算器电路.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、电子设计自动化课程设计题目: 2位十进制四则运算器电路 院(系) 专 业 届 别 班 级 学 号 姓 名 任课老师 摘要本次设计的目的是通过QuartusII软件实现输入两个2位十进制数(099),输出它们的四则运算(加减乘除)结果(发光二极管显示运算模式;调用LPM_MULT、LPM_CONSTANT及LPM_DIVIDE模块)。实现的方法是利用四则运算的规律进行初步设计,然后进行调整和修改。最终结果要求:随机的输入两个数,经过加法、减法、乘法和除法的运算,可以得到正确的运算结果。主要分为4大部分:一、2位十进制数模块;二、加减乘除四则运算四个小模块;三、加减乘除四则运算的选择模块;四、处理
2、输出结果的模块。目 录1 系统设计42 单元电路设计 5 3 软件设计 54 系统测试145 结论146 参考文献141、系统设计一、 设计要求:输入两个2位十进制数(099),输出它们的四则运算(加减乘除)结果;发光二极管显示运算模式;可调用LPM_MULT及LPM_DIVIDE模块。 二、 系统设计方案:(1) 系统设计思路要完成2位十进制四则运算器电路,首先,需要生成2个两位的十进制数,其次,需要加减乘除四个运算,然后,四种运算的选择,最后,对输出结果的处理。2个2位十进制模块:法一,用两个100进制计数器构成;法二,用4个10进制计数器构成。因为add1模块(后面详细介绍)只有两个输入
3、口,所以选择法一比较方便。加减乘除四则运算:加法:写一个加法程序,制成模块,再分别取出它的各位、十位、百位。减法:写一个减法程序,用调用LPM的方法制成一个模块,在分别取出它的各位、十位和符号位。乘法:直接调用内部LPM,制成乘法模块。除法:直接调用内部LPM,制成除法模块。加减乘除运算的选择:写一个4路选择器,分别选择加减乘除。对输出结果的处理:写一个程序,对应不同选择下的不同输出,注意位数(加法:输出在0198之间,需3个LED灯来显示;减法:输出在099之间,需3个LED灯(其中一个符号位);乘法:输出在09801之间,需4个LED灯;除法:输出在099之间,需2个LED灯。综上可知,输
4、出一共需4个LED灯)。(2) 总体方案的论证与比较该方案能够较好的实现本设计的功能。一些小模块可以有不同做法。如:2位十进制模块:法一,用两个100进制计数器构成;法二,用4个10进制计数器构成。因为add1模块(后面详细介绍)只有两个输入口,所以选择法一比较方便。加减乘除输出结果的处理:要求出各个位的数。(假设输出结果3位)法一:每次除以10,依次求出个位、十位、百位;法二:除以100,得百位,除以10得个位和十位。因为法二需要较多的LPM_DIVIDE和LPM_CONSTANT,所以,法一比较好。(3)各功能块的划分与组成(4)系统的工作原理对于随机输入的两个数,系统都会对其进行加减乘除
5、四则运算,然后选择加法、减法、乘法或除法来作为输出,并验证其正确性。2、单元电路设计一、输入单元(2个2位十进制模块)输入单元设计中, 用VHDL语言来实现该功能,然后制成模块。二、加法单元对两个输入的数进行加法运算,可用VHDL语言来实现该功能。其输出结果在0198之间,将其结果显示在LED灯上,就需调用4个LPM_DIVIDE和4个LPM_CONSTANT来实现。三、减法单元对两个输入的数进行减法运算,可用VHDL语言来实现。结果有正、负之分,“F”来表示负号。输出范围在099之间,需2个LPM_DIVIDE 和2个LPM_CONSTANT来将其结果显示在LED灯上。四、乘法单元乘法单元可
6、调用LPM_MULT模块来实现。其输出结果在09801之间,需4个LPM_DIVIDE和4个LPM_CONSTANT来将其结果显示在LED灯上。五、除法单元除法单元直接调用3个LPM_DIVIDE 和2个LPM_CONSTANT就可以实现其要求。六、 选择模式单元用VHDL语言写一个四路选择器程序,然后制成模块。七、输出单元用VHDL语言写一个程序可实现该功能,然后制成模块。3、软件设计一、软件设计平台和开发工具在在Quartus II平台中用VHDL语言编程和调试。并调用其Quartus II的内部模块来实现设计要求。二、程序原理图总程序图及其仿真波形一百进制模块其程序为:library i
7、eee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity t100 is port(clk,rst,en:in std_logic; cq:out std_logic_vector(6 downto 0);cout:out std_logic);end t100;architecture behav of t100 isbegin process(clk,rst,en)variable cqi:std_logic_vector(6 downto 0);beginif rst =1 then cqi:=(othe
8、rs =0);elsif clkevent and clk=0 then if en =1 then if cqi0);end if ;end if;end if;if cqi=99 then cout=1;else cout=0; END IF;cq=cqi;end process; end behav;仿真波形为:加法模块(1)、add程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add is port( shu1: in std_logic_vector(6 downto
9、 0); shu2: in std_logic_vector(6 downto 0); shu_out: out std_logic_vector(7 downto 0) ); end add;architecture behav of add is signal a,b:std_logic_vector(7 downto 0);beginprocess(shu1,shu2)begin a=0&shu1;b=0&shu2;shu_outsub_in2 thenflag = 1;sub_out = sub_in1-sub_in2;elseflag = 0;sub_out = sub_in2-su
10、b_in1;end if;end process;end architecture beh;(2)sub1模块(3)有关说明两个百进制数相减,最大为99,即输出最多需要7字节。flag是标示位,两数相减若为正数,flag输出为0;若为负数,flag输出为“F”。乘法(1)mul1模块(2)有关说明因为99*99=9801,所以输出需14个字节,即宽度为13.0.共需4个lpm_divide。除以10得个位,再除以10的十位,然后除以10得百位,最后再除以10得千位。除法(1)div1模块(2)有关说明除法单元直接调用3个LPM_DIVIDE 和2个LPM_CONSTANT就可以实现其要求。选择
11、模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ct4 isport(CLK:IN STD_LOGIC; A:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END ct4;architecture one of ct4 is SIGNAL B:STD_LOGIC_VECTOR(1 DOWNTO 0); begin process(CLK) begin if CLKevent and CLK=1 THEN IF B3 THEN B=B+1; ELSE B0);E
12、ND IF ; END IF; END PROCESS; A outmod=1000; outLED10); outLED2=add_out3; outLED3=add_out2; outLED4 outmod=0100; outLED10); outLED2(not flag) ; outLED3=sub_out2; outLED4 outmod=0010; outLED1=mul_out4; outLED2=mul_out3;outLED3=mul_out2; outLED4 outmod=0001; outLED10); outLED20); outLED3=div_out2; outL
13、ED4=div_out1;end case;end process;end bhv;(2)有关说明若四选一输出为“00”时,选择加法运算;输出为“01”时,选择减法运算:输出为“10”时,选择乘法运算;输出为“11”时,选择除法运算。4、系统测试系统的功能测试及步骤:1、将制作好的的程序先进行编译,看是否能编译通过,若未通过,则进行修改直至编译通过。2、编译通过后,进行波形仿真来观察其结果是否正确。3、进行分配管脚,然后再编译一次后。4、将编译通过的程序下载到实验箱上进行结果验证。(选择模式5, 采用EP2CT144C8芯片)由模式5和管脚分配可知:键8clk1(第一个输入数),键7-clk2
14、(第二个输入数),键6clk3(选择模式键),数码管8和7,分别对应第一个输入数的高低位,数码管6和5分别对应第二个输入数的高低位,数码管4、3、2、1依次为输出的高低位,发光二极管D8、D7、D6、D5分别为加减乘除模式。随即地按键8和键7(随即输入两个2位十进制数),然后,按键6选择加法、减法、乘法、除法运算模式,最后,验证结果。例如:当输入为24和50时,选择加法时,LED灯显示74,选择减法时,LED灯显示F26,选择乘法时,LED灯显示1200,选择除法时,LED灯显示0.5、结论本次设计能够较好的完成设计的基本要求,即输入两个2位十进制数(099),能够输出它们的四则运算(加减乘除)结果;但是于某些地方还有待改进。(1)对输出结果各个位在LED灯的处理。如加法模块输出需3个led灯,本设计先除以100取出百位,再除以10取出十位和各位,共需4个LPM_DIVIDE和4个LPM_CONSTANT,如果每次都除以10,通过余数依次取出各位、十位、百位,就不用需要那么多的LPM_DIVIDE和LPM_CONSTANT。(2)本设计的rst端直接接地,若要复位需重新把程序导入到实验箱,比较麻烦。6、参考文献EDA技术与VHDL语言.潘松,黄继业