简易计算器设计_第1页
简易计算器设计_第2页
简易计算器设计_第3页
简易计算器设计_第4页
简易计算器设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 目 录1. 引言12. 设计技术指标12.1 计算器性能1 2.2 计算器人机接口13. 设计方案14. 设计实现2 4.1 加法2 4.2 减法3 4.3 乘法3 4.4 除法4 4.5 清零5 4.6 移位6 4.7 数据分配器6 4.8 ROM8 4.9 RAM9 4.10 CPU105. 设计结果14 5.1 加法14 5.2 减法14 5.3 乘法15 5.4 除法15 5.6 移位15 5.7 显示原理图156. 结论167. 参考文献16EDA设计 简易计算器设计1. 引言计算器是我们日常生活中经常接触到的计算工具之一,最早的计算工具诞生在中国。中国古代 最早采用的一种计算工具

2、叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨 充当材料的约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中 国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17 世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的纳皮尔算筹, 英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算, 甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为 现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642 年,年仅 19 岁的 法国伟大科学家帕斯卡引用算盘的

3、原理,发明了第一部机械式计算器,在他的计算器中有一些 互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那 样,把数字拨进去,计算结果就会出现在另一个窗口中,但是只能做加减计算。1694 年,莱布 尼兹在德国将其改进成可以进行乘除的计算。此后,一直要到 20 世纪 50 年代末才有电子计算 器的出现。 本文介绍一种基于 VHDL 的通用计算器的设计方法,可以实现了加、减、乘、除、清零和移位的运算。2. 设计技术指标2.1 计算器性能 处理器处理字长:4位 处理器工作速度: 处理器指令数量:6种2.2 计算器人机接口 程序存储方式: 数据输入方式:NBI按键 结果显

4、示方式:NBI模拟显示3. 设计方案先用vhdl设计一个ALU包括加法器、减法器、乘法器、除法器、清零、移位,由于按键是4*4的,所以只能输入4位数,而且必须只能输入一个数,所以我把进位都删了。再设计两个分配器,分别把数据a,b送入运算模块,使操作码为000时数据给加法器,进行加法;输入操作码001时数据给减法器,进行减法;输入操作码010时数据给乘法器,进行乘法;输入操作码011时数据给除法器,进行除法;输入操作码100时,进行清零;输入操作码101地址时,把数据进行移位。然后设计一个ROM模块,输出操作码、a和b的地址,设置a的地址为110,b的地址为111。ROM后再连一个RAM,写入数

5、据a、b,输入a、b的地址,读出a、b的数据。并且在RAM里用clk产生了另一个clk_2,用clk控制a和b;用clk_2控制读和写。最后设计一个CPU把所有的模块用元件例化连接起来。连接顺序为ROM、RAM、分配器、ALU。另外在din中又设定了前三位为操作码,第四位为输入数据a,若第四位为1时输入为a,若第五位为1时输入为b。图1、基础结构图2、进阶结构4. 设计实现4.1 加法LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY plus ISPORT(a:IN STD_LOGIC

6、_VECTOR(3 DOWNTO 0);b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end plus;ARCHITECTURE behave OF plus ISbeginALU_OUT=a+b;end behave; 4.2 减法LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jian ISPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);b:IN

7、STD_LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end jian;ARCHITECTURE behave OF jian ISbeginALU_OUT=a-b;end behave;4.3 乘法LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;use ieee.std_logic_arith.all;ENTITY cheng ISPORT( a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

8、 b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END cheng;ARCHITECTURE behave OF cheng ISbeginprocess(a,b)variable t1 : integer range 0 to 15;variable t2 : integer range 0 to 15;variable t3 : integer range 0 to 15; begint1:=conv_integer(a);t2:=conv_integer(b);t3:=t1*t2;if

9、 t3=15then ALU_OUT(3 downto 0)=conv_STD_LOGIC_VECTOR(t3,4);else ALU_OUT=X8;end if;end process;end behave;44.4 除法 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; use ieee.std_logic_arith.all; ENTITY chu IS PORT( a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); b:IN STD_LOGIC_VECTOR(3 DO

10、WNTO 0); ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); co:OUT STD_LOGIC_vector(3 downto 0); END chu; ARCHITECTURE behave OF chu IS signal aa,bb:std_logic_vector(3 downto 0); signal fuhao,sign,d:std_logic; begin d=(a(3) xor b(3);aa=a;bb=b;process(aa,bb,fuhao,sign,d)variable temp_a,temp_b:std_logic_vector

11、(7 downto 0);variable n:integer; begintemp_a:=0000&aa;temp_b:=bb&0000;n:=0;while(n=bb thentemp_a:=temp_a-temp_b+1;end if;end loop;if d=1thentemp_a(3 downto 0):=(not temp_a(3 downto 0)+1;end if;if sign=1thentemp_a(7 downto 4):=(not temp_b(7 downto 4)+1;end if;ALU_OUT=temp_a(3 downto 0);co=temp_a(7 do

12、wnto 4);if(bb=0000)thenALU_OUT=0000;end if;end process;end behave;4.5 清零LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clr ISPORT(ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END clr;ARCHITECTURE behave OF clr ISbeginALU_OUT=0000;end behave;4.6 移位LIBRARY IEEE;USE IEEE.ST

13、D_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY shift ISPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END shift;ARCHITECTURE behave OF shift ISsignal aa:std_logic_vector(4 downto 0);beginaa=a&a(3);ALU_OUT D0=dina;D1=0000;D2=0000;D3=0000;D4=0000;D5 D1=dina;D

14、0=0000;D2=0000;D3=0000;D4=0000;D5 D2=dina;D0=0000;D0=0000;D3=0000;D4=0000;D5 D3=dina;D0=0000;D1=0000;D2=0000;D4=0000;D5 D5=dina;D0=0000;D1=0000;D2=0000;D3=0000;D4 D4=dina; D0=0000;D1=0000;D2=0000;D3=0000;D5 D0=dinb;D1=0000;D2=0000;D3=0000;D4=0000;D5 D1=dinb;D0=0000;D2=0000;D3=0000;D4=0000;D5 D2=dinb

15、;D0=0000;D0=0000;D3=0000;D4=0000;D5 D3=dinb;D0=0000;D1=0000;D2=0000;D4=0000;D5 D5=dinb;D0=0000;D1=0000;D2=0000;D3=0000;D4 D4=dinb; D0=0000;D1=0000;D2=0000;D3=0000;D5nnnnnnnull;end case;end if;end process;addr=n;ma(2 downto 0)=n(8 downto 6);A(2 downto 0)=n(5 downto 3);B(2 downto 0)=n(2 downto 0);end

16、behave; 4.9 RAMLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ram ISPORT( clk:IN STD_LOGIC;dataa,datab:IN STD_LOGIC_VECTOR(3 DOWNTO 0); Aa:IN STD_LOGIC_VECTOR(2 DOWNTO 0);Bb:IN STD_LOGIC_VECTOR(2 DOWNTO 0);a:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);b:OUT STD_LOGIC_VECTOR(3 D

17、OWNTO 0);END ram;ARCHITECTURE behave OF ram IStype ramtype is array(3 downto 0) of std_logic_vector(3 downto 0);signal ram_name:ramtype;signal w,r,clk_2:std_logic;signal count:integer range 0 to 1; beginprocess(clk,clk_2,count)beginif (clkevent and clk=1) thenif count=1 thenclk_2=0; count=0;if(r=1)t

18、henram_name(conv_integer(Aa)=dataa;end if; if(w=1)thena=ram_name(conv_integer(Aa);end if; else count=count+1;clk_2=1;if(r=1)thenram_name(conv_integer(Bb)=datab;end if; if(w=1)thenb=ram_name(conv_integer(Bb);end if;end if;end if;end process;process(clk,r,w)beginif(clk=1)thenr=1;w=0;elsif(clk=0)thenw=

19、1;r=0;end if;end process;end behave;4.10 CPULIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity cpu isport(din:in std_logic_vector(4 downto 0);data:in std_logic_vector(3 downto 0);clk:in std_logic;alu_out:out std_logic_vector(3 downto 0);yushu

20、:out std_logic_vector(3 downto 0);end cpu;architecture behave of cpu iscomponent rom isPORT(clk:in std_logic; datain:IN STD_LOGIC_VECTOR(2 DOWNTO 0); addr:OUT STD_LOGIC_VECTOR(8 DOWNTO 0);ma,A,B:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END component;component ram isPORT( clk:IN STD_LOGIC;dataa,datab:IN STD_

21、LOGIC_VECTOR(3 DOWNTO 0); Aa:IN STD_LOGIC_VECTOR(2 DOWNTO 0);Bb:IN STD_LOGIC_VECTOR(2 DOWNTO 0);a:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);b:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component fenpeia isPORT(clk:IN STD_LOGIC;dina:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel: IN STD_LOGIC_VECTOR(2 DOWNTO 0);D0,D

22、1,D2,D3,D4,D5:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component fenpeib isport(clk:IN STD_LOGIC;dinb:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel: IN STD_LOGIC_VECTOR(2 DOWNTO 0);D0,D1,D2,D3,D4,D5:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component plus isPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);b:

23、IN STD_LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component jian isPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component cheng isPORT( a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); b:IN STD_

24、LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;component chu isPORT( a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); b:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);co:OUT STD_LOGIC_vector(3 downto 0);end component;component clr isPORT(ALU_OUT:OUT STD_L

25、OGIC_VECTOR(3 DOWNTO 0);end component;component shift isPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); ALU_OUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);end component;signal addr:STD_LOGIC_VECTOR(8 DOWNTO 0);signal ma,Aa,Bb,dinma:STD_LOGIC_VECTOR(2 DOWNTO 0);signal a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);signal D0a,D1a,D2

26、a,D3a,D4a,D5a,D0b,D1b,D2b,D3b,D4b,D5b:STD_LOGIC_VECTOR(3 DOWNTO 0);signal alu_out1,alu_out2,alu_out3,alu_out4,alu_out5,alu_out6:std_logic_vector(3 downto 0);signal aaa,bbb:std_logic;signal dataa,datab:std_logic_vector(3 downto 0);beginprocess(clk,din)begindinma=din(2 downto 0);if(din(3)=1)thendataa=data;elsif(din(4)=1)thendatab=data;end if;end process;A1:rom port map(clk,dinma,addr,ma,Aa,Bb);A2:ram port map(clk,dataa,datab,Aa,Bb,a,b);A3:fenpeia port map(clk,a,dinma,D0a,D1a,D2a,D3a,D4a,D5a); A4:fenpeib port map(clk,b,dinma,D0b,D1b,D2b,D3b,D4b,D5b); A5:plus port map(D0a,D0b,alu_out1);A6:ji

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论