haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 小学教育 > 小学作文小学作文

EDA课程设计 四则运算

发布时间:2013-12-31 14:58:53  

《电子设计自动化》

课程设计

题目:2位十进制四则运算器电路

院(系)

专 业

届 别

班 级

学 号

姓 名

任课老师

摘要

电子设计自动化技术是将计算机技术应用于电子设计过程的一门新技术,即EDA技术,它为电子系统的设计带来了革命性的变化。其作为现代电子设计技术的核心,人们也越来越重视这方面的研究。在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动完成文件编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。 本次设计是基于QuartusII 9.0来完成设计,QuartusII是Altera提供的FPGA/CPLD开发集成环境,其设计工具完全支持VHDL、Verilog的设计流程;也可利用第三方的综合工具,如Leonardo、Spectrum、Synplify Por、FPGA ComplierII,并直接调用这些工具;同时还具备仿真功能。

本次设计的目的是输入两个2位十进制数(0~99),输出它们的四则运算(加减乘除)结果;调用LPM_MULT、LPM_CONSTANT及LPM_DIVIDE模块。实现的方法是利用四则运算的规律和原则进行初步设计,然后进行调整和修改。经过精心的设计和合理的规划,最终完成设计的要求。即在设计的程序中随机的输入两个数,经过加法、减法、乘法和除法的运算,可以得到正确的运算结果。同时也验证了本次设计达到所有的设计要求。本设计的创新点在于,输入数是十位和个位分开输入,这样操作更加简便。

- 1 -

目录

1 系统设计 ...................................... 3

一、设计要求.................................................................................................3 二、系统设计方案.........................................................................................4

2 单元电路设计 .................................. 5

一、

二、

三、

四、 加法单元.............................................................................................5 减法单元.............................................................................................5 乘法单元.............................................................................................5 除法单元.............................................................................................6

3软件设计 ....................................... 6

一、软件设计平台和开发工具..................................6

二、各模块程序设计...........................................6

4 系统测试 ..................................... 12

一、 系统的功能测试及步骤……………………………………………………………….12

二、 设计所采用的设备和型号……………………………………………………………12

结 论 ....................................... 13

参考文献 ....................................... 13

- 2 -

1、系统设计

一、设计要求

要求:输入两个2位十进制数(0~99),输出它们的四则运算(加减乘除)结果;可调用LPM_MULT、LPM_CONSTANT及LPM_DIVIDE模块。

二、系统设计方案

1、系统设计思路:

据设计要求,本设计包含了三个部分,分别是输入部分,计算部分和输出部分。由输入端输入2个两位数数据和计算模式,计算部分分别对这两个数据进行加、减、乘、除计算,最后由输出部分依据计算模式选择对应的结果输出。

依据计算结果我们可以知道在加法计算中,输出在0—198之间,其结果要有3个LED灯来显示;减法输出需要3个LED灯显示,其中一个LED为当计算结果为负时用“F”代替“-”;乘法输出需要有4个LED灯来显示;除法输出需要2个LED灯来显示。从而可知,整体输出应该设计4个LED灯来显示其结果。另加上显示输入的数也需要4个LED灯,所以实验箱满足本设计要求。

2、总体方案的论证与比较

由输入数据的不同方式,本设计有2种输入方案,具体如下:

方案一

输入端接一个由一百进制的VHDL程序生成的原理图文件,则输入数

- 3 -

据可直接应用于四则运算,但要将输入在数码管上显示,故需另做一个模块来将该百进制数显示在数码管上。

方案二

直接用两个十进制的模块作为一个输入,这样输入数就可以直接在数码管显示,但要在四则运算中,要将其合成一个百进制数,可将其中一个十进制数作为十位数,另一个作为个位数。实现的方法是用一个十进制数乘以10,,再加上另一个十进制数就可以得到一个百进制数。

本设计中采用了第二种方案,因为第二种方案较第一种方案在输入数据效率方面有了明显地提高,并且操作简便,快捷。

3、各功能块的划分与组成

- 4 -

4、系统的工作的原理

其工作原理是在输入端随机输入两个数,然后在“选择模式”的模块上选择加法、减法、乘法、除法,根据正常的四则运算来看其输出端观察期输出结果,看其结果是否正确。

2、单元电路的设计

一、加法单元

加法设计中,两个输入的数中,一个作为加数,一个作为被加数将其相加,可以用VHDL语言来实现该功能。其输出范围在0—198之间,将其结果显示在LED灯上,就得运用2个LPM_DIVIDE和2个LPM_CONSTANT来实现。

二、减法单元

减法设计中,两个输入数中,一个作为减数,一个作为被减数将其相减,也可以VHDL语言来实现。若被减数大于减数,则正常输出;若被减数小于减数,则用“F”来表示负号。输出结果在0—99之间,故需要1个LPM_DIVIDE和1个LPM_CONSTANT来将其结果显示在LED灯上。

三、乘法单元

乘法设计中,可以调用LPM_MULT模块来实现。其输出结果在0—9801之间,故得用3个LPM_DIVIDE和3个LPM_CONSTANT来将其

- 5 -

结果显示在LED灯上。

四、除法单元

除法设计中,直接调用2个LPM_DIVIDE和1个LPM_CONSTANT就可以实现其要求。

3、软件设计

一、软件设计平台和开发工具

在Quartus II平台中用VHDL语言编程和调试。并调用其Quartus II中的原有的模块来实现设计要求。

二、各模块程序设计

1、总电路原理图

2、十进制模块程序(CNT10)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

- 6 -

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT10 IS

PORT (CLK : IN STD_LOGIC;

CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

COUT : OUT STD_LOGIC );

END CNT10;

ARCHITECTURE behav OF CNT10 IS

BEGIN

PROCESS(CLK)

VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9

ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零

END IF;

END IF;

IF CQI = 0 THEN COUT <= '1';

ELSE COUT <= '0';

END IF;

CQ <= CQI;

END PROCESS;

- 7 -

END behav;

3、输入十位数乘10模块程序(mulx10) LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY mulx10 IS

PORT(b:IN STD_LOGIC_VECTOR(3 DOWNTO 0); y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END mulx10;

ARCHITECTURE behave OF mulx10 IS

signal c0,c1,c2,c3:STD_LOGIC_VECTOR(3 DOWNTO 0); constant a:STD_LOGIC_VECTOR:="1010";

BEGIN

PROCESS(b,c0,c1,c2,c3)

BEGIN

IF b(0)='0' THEN c0<="0000";

IF b(1)='0' THEN c1<="0000";

IF b(2)='0' THEN c2<="0000";

IF b(3)='0' THEN c3<="0000"; ELSE c0<=a; ELSE c1<=a; ELSE c2<=a; ELSE c3<=a;

- 8 -

end if; end if; end if; end if;

y<=("0000"& c0)+("000"& c1&'0')+("00"& c2&"00")+('0'&c3&"000"); END PROCESS;

END behave;

原理:搞清二进制数的乘法原理就可以设计两个4位二进制数相乘,如a=1010,b=1111 那么可以看成是1010*(1000+0100+0010+0001),结果等于将1010左移三位加上1010左移两位,加上1010左移1位加上1010不移位就是结果

y<=("0000"& c0)+("000"& c1&'0')+("00"& c2&"00")+('0'&c3&"000");

第一个是不移动第二个是b低二位与a相乘左移1位第三是b低3位与a相乘左移两位,第四是b最高位与a相乘左移三位结果相加

4、位数调整模块程序(yiwei3d6)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity yiwei3d6 is

port( my_in1 : in std_logic_vector(3 downto 0); my_out : out std_logic_vector(7 downto 0));

end entity yiwei3d6;

architecture beh of yiwei3d6 is

begin

my_out(3 downto 0) <= my_in1(3 downto 0);

end architecture beh;

- 9 -

5、加法模块(cal_add)

add程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity add is

port( my_in1, my_in2 : in std_logic_vector(8 downto 0); my_out : out std_logic_vector(9 downto 0)); end entity add;

architecture beh of add is

Signal a, b : std_logic_vector(9 downto 0);

begin

a <= '0'&my_in1;

b <= '0'&my_in2;

my_out <= a + b;

- 10 -

end architecture beh;

6、减法模块

Sub程序:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity sub is

port( sub_in1, sub_in2 flag : in std_logic_vector(8 downto 0); : out std_logic; : out std_logic_vector(8 downto 0)); sub_out

end entity sub;

architecture beh of sub is

- 11 -

begin

process(sub_in1, sub_in2) begin if sub_in1>sub_in2 then flag <= '1'; sub_out <= sub_in1-sub_in2; else flag <= '0'; sub_out <= sub_in2-sub_in1; end if; end process;

end architecture beh;

7、乘法模块

- 12 -

8、除法模块

9、选择模块

选择模式有加法、减法、乘法、除法四种形式,故选用四选一的程序来实现该功能。程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT4 IS

PORT (CLK : IN STD_LOGIC;

CQ : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); COUT : OUT STD_LOGIC );

END CNT4;

ARCHITECTURE behav OF CNT4 IS

BEGIN

PROCESS(CLK)

VARIABLE CQI : STD_LOGIC_VECTOR(1 DOWNTO 0);

- 13 -

BEGIN

IF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿

IF CQI < 3 THEN CQI := CQI + 1; --允许计数, 检测是否小于3 ELSE CQI := (OTHERS =>'0'); --大于3,计数值清零

END IF;

END IF;

IF CQI = 0 THEN COUT <= '1'; --计数大于3,输出进位信号

ELSE COUT <= '0';

END IF;

CQ <= CQI; --将计数值向端口输出

END PROCESS;

END behav;

10、 输出模块

若四选一输出为“00”时,选择运算加法;输出为“01”时,运算减法:输出为“10”时,选择乘法;输出为“11”时,运算除法。其程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY cal_mod IS

PORT(

add_out2 : IN STD_LOGIC_vector(9 downto 0); - 14 -

add_out1 : IN STD_LOGIC_vector(6 downto 0); add_out0 : IN STD_LOGIC_vector(3 downto 0); flag : IN STD_LOGIC; sub_out1 : IN STD_LOGIC_vector(8 downto 0); sub_out0

mul_out3

mul_out2

mul_out1

mul_out0

div_out1

div_out0

mod_sel

outLED1

outLED2

outLED3

outLED4

END cal_mod;

: IN STD_LOGIC_vector(3 downto 0); : IN STD_LOGIC_vector(17 downto 0); : IN STD_LOGIC_vector(9 downto 0); : IN STD_LOGIC_vector(6 downto 0); : IN STD_LOGIC_vector(3 downto 0); : IN STD_LOGIC_vector(8 downto 0); : IN STD_LOGIC_vector(3 downto 0); : IN STD_LOGIC_vector(1 downto 0); : out STD_LOGIC_vector(3 downto 0); : out STD_LOGIC_vector(3 downto 0); : out STD_LOGIC_vector(3 downto 0); : out STD_LOGIC_vector(3 downto 0)); - 15 -

ARCHITECTURE bhv OF cal_mod IS

BEGIN

process(mod_sel) begin case mod_sel is when "00"=>outLED1<=(others=>'0'); outLED2<=add_out2(3 DOWNTO 0);outLED3<=add_out1(3 DOWNTO 0); outLED4<=add_out0;

when "01"=>outLED1<=(others=>'0'); outLED2<=(others=>(not flag));outLED3<=sub_out1(3 DOWNTO 0);outLED4<=sub_out0;

when "10"=>outLED1<=mul_out3(3 downto

0);outLED2<=mul_out2(3 downto 0);outLED3<=mul_out1(3 downto 0);outLED4<=mul_out0;

when others =>outLED1<=(others=> '0'); outLED2<=(others=> '0'); outLED3<=div_out1(3 downto 0); outLED4<=div_out0;

end case; end process;

end bhv;

4 系统测试

一、系统的功能测试及步骤:

1、将制作好的的程序先进行编译,看是否能编译通过,若未通过,则进行修改直至编译通过。

2、编译通过后,可以进行波形仿真来观察其结果是否正确。

- 16 -

3、进行分配管脚,然后再编译一次后。

4、将编译通过的程序下载到硬件上进行结果验证。

5、硬件上结果验证的操作步骤

(1)、本次我采用了模式0作为演示的模式来验证本次设计。

(2)、根据管脚分配和模式0,键7—a1、键6—a0,键5—b1、键4—b0、键3—clk_mod

(3)、随机按键输入87和26,则可在数码管上显示113,按键3改变加法、减法、乘法、除法模式。当模式为减法时,其结果为61;当模式为乘法时,其结果为2262;当模式为除法模式时,其结果为3.

二、设计所采用的设备和型号

由世界上最大的可编程逻辑软件供应商之一的Altera提供的Quartus II来实现。芯片是EP2CT144C8.

5、结论

软件仿真波形结果如下图:

- 17 -

由图可知结果符合预期,本次设计很出色的完成了设计的基本要求,即随机输入两个2位数,实现其四则运算并输出。也掌握了VHDL语言的基本用法,加深了对软件的了解。

6、参考文献

《EDA技术与VHDL语言》第3版 潘松,黄继业编著 清华大学出版社

- 18 -

上一篇:我真开心
下一篇:元旦联欢会
网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com