VHDL课程设计 计算器模块设计毕业论文_第1页
VHDL课程设计 计算器模块设计毕业论文_第2页
VHDL课程设计 计算器模块设计毕业论文_第3页
VHDL课程设计 计算器模块设计毕业论文_第4页
VHDL课程设计 计算器模块设计毕业论文_第5页
已阅读5页,还剩14页未读, 继续免费阅读

付费下载

下载本文档

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

文档简介

1、计算器模块设计姓名:王文杰班级:1421202学号:201420120201专业:测控技术与仪器计算器模块设计摘要 计算器一般由运算器、控制器、存储器、键盘、显示器、电源和 一些可选外围设备组成。 低档计算器的运算器、 控制器由数字逻辑电 路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存 储用。使用简单计算器可进行加 (+) 、减 (-) 、乘(*) 、除 (/) 、开 方(sqrt)、百分数()、倒数(1/x)等简单算术计算。本次设计只 完成加 (+) 、减(-) 、乘 (*) 、除(/) 运算。实验设计一 设计内容与设计要求1 设计内容:设计一个简易计算器2 设计要求:实现最大

2、输入两位十进制数字的四则运算 (加减乘除)能够实现多次连算(无优先级,从左到右计算结果) 最大长度以数码管最大个数为限,溢出报警 有正负数区分 ;除法不能除尽时小数保留 2 位有效数字能够区分运算优先级(先乘除,后加减)二 系统具体设计、1 总体框架2各个模块设计 数据输入模块(VHDL付录9)受限于输入按键有限,输入的两位二进制数有计数器实现, 每按下elk加1,到99后恢复零元件例化:leijiareset clkdataout7.0inst10VHDL编程:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.a

3、ll;use ieee.std_logic_ un sig ned.all;en tity leijia isport( reset:i n std_logic;clk: in std_logic;dataout: out stdo gic_vector(7 dow nto 0) );end en tity leijia;architecture behave of leijia issignal temp:stdogic_vector(7 downto 0);beg indataout=temp;process(clk,reset) beg inif(reset=O)the nif(clke

4、vent and clk=1)then if(temp=01100100)the n temp=00000000; elsetempv=temp+1;end if;end if;else temp=00000000;end if;end process;end behave; 加减选择模块减法是加法的逆运算,A-B等同于A+(-B),即减法运算只需在进行加法运算前把数据的正负取反,所以当减法的下降沿时输出的正负 为输入的取反,加法的下降沿时输出的正负为输入的, 实现方法与乘除选择模块一致元件例化:VHDL编程:library ieee;use ieee.std_logic_1164.all;u

5、se ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all;en tity tt2 isport( reset:i n std_logic;pn:in std_logic; clk1: in std_logic clk2: in std_logic pno ut:out std_logic; dout:out std_logic);end entity tt2;architecture behave of tt2 is sig nal temp:std_logic; beg indout=temp; process(clk1,cl

6、k2) beg in if(reset=O)the n if(clk1=1)then temp=0;elsif(clk2event and clk2=0)then temp=1;end if;if(temp=1)the npno ut=no t(p n);elsepno ut=p n;end if;else temp0,B0输出数据A+B,正负号为正2、A0,B0输出数据|A|-|B|正负号为正|A|B|输出数据|B|-|A|正负号为负3、A0输出数据|A|-|B|正负号为负|A|B|输出数据|B|-|A|正负号为正4、A0,B0输出数据A+B,正负号为负其中clk为加or减,上升沿时读新数据

7、并计算。元件例化:VHDL编程:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; entity add isport(clk :in std_logic;reset:in std_logic;data:in std_logic_vector(27 downto 0);data_pn:in std_logic;dout :out std_logic_vector(27 downto 0);); end entity add; architec

8、ture behave of add is signal temp: std_logic_vector(27 downto 0):=0000000000000000000000000000; signal temp_pn:std_logic:=0;begindout=temp;dout_pn=temp_pn;process(clk,reset)beginif(reset=1)then temp=0000000000000000000000000000;temp_pn=0; elsif(clkevent and clk=1)thenif(temp_pn=0)thenif(data_pn=0)th

9、en temp=temp+data;temp_pndata or temp=data)then temp=temp-data;temp_pn=0;else temp=data-temp;temp_pn=1;end if;end if;elseif(data_pn=1)then temp=temp+data;temp_pn=1;elsetemp=data)thenif(tempdata ortemp=data-temp;temp_pn=0;else temp=temp-data;temp_pn=1;end if;end if;end if;end if;end process;end behav

10、e; 乘法模块当乘法符号的上升沿的时候读入反馈的结果(包括数据及正负号)并输出到 datal、data1_pn;当乘法符号的下降沿的时候读入数据(包括数据及正负号)并输 出到data2、data2_pn。并进行计算,结果的数据由乘法器计算得到; 结果的正负号即为两个相乘数据的正负号取异或。数据为保留两位小数,输出的当成被乘数的数乘上100。元件例化:lpm_mult0clkdata127.0resetdata27.0data7.0data1_pndata_pndata2_pn一res27.0res_pnmulinst2dataa27.01insttongresult35.0Unsigned m

11、ultiplicationXdatab7.01datain35.0 dataout27.0inst9XORinst19VHDL编程:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all;en tity mul isport( clk : in std_logic;reset: in std_logic;data : in stdo gic_vector(7 dow nto 0); data_p n : in std_logic;res : i

12、n std_logic_vector(27 dow nto 0); res_p n: in std_logic;data1: out std_logic_vector(27 downto 0);data2: out std_logic_vector(7 downto 0); data1_pn:out std_logic;data2_pn:out std_logic);end entity mul; architecture behave of mul is signal temp1:std_logic; signal temp2:std_logic;begin process(reset,cl

13、k) begin if(reset=0)thenif(clkevent and clk=1)thendata1=res; data1_pn=res_pn;end if;if(clkevent and clk=0)then data2=data; data2_pn=data_pn;end if;else data1=0000000000000000000000000000;data2=00000000;end if;end process;end behave; 除法模块当除法符号的上升沿的时候读入反馈的结果 (包括数据及正负号) 并输出到 data1 、data1_pn;当除法符号的下降沿的时

14、候读入数据(包括数据及正负号)并输出到 data2 、data2_pn 。并进行计算,结果的数据由除法器计算得到; 结果的正负号即为两个相除数据的正负号取异或。数据为保留两位小数,输出的当成被除数的数乘上100。元件例化:divclkdata127.0resetdata27.0data7.0data1_pndata_pndata2_pnres27.0res_p ninst3divideOnumer27.O quotient27. deno m7.Oremai n7.Numer is UNSIGNEDDenom is UNSIGNEDin st6XORinst18VHDL编程:library i

15、eee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all;en tity div isport( clk : in std_logic;reset: in std_logic;data : in stdo gic_vector(7 dow nto 0); data_p n : in std_logic;res : in std_logic_vector(27 dow nto 0); res_p n: in std_logic;data1: out stdo gic

16、_vector(27 dow nto 0); data2: out stdo gic_vector(7 dow nto 0); data1_p n:out std_logic;data2_p n:out std_logic);end en tity div;architecture behave of div is signal temp1:std_logic;signal temp2:stdogic; beg inprocess(reset,clk)beg inif(reset=0)the nif(clkevent and clk=1)thendata1=res;data1_p n=res_

17、p n;end if;if(clkevent and clk=0)thendata2=data; data2_p n=data_p n; end if;else data1=0000000000000000000000000000;data2=00000000; end if;end process;end behave; 乘或除数据选择输出模块乘或除的数据及正负在各自符号的下降沿时输出,在输出时确定 输出的是乘的结果还是除的结果。即预期在乘符号的下降沿时输出乘 的结果;在除符号的下降沿时输出除的结果。又由于两个时钟信号不能控制同一个变量, 所以把clkl当成是清 零信号,clk2当成时钟信号

18、,当clk2的下降沿的时候输出数据2(即 除的结果),clk2为1时,输出数据1 (即除的结果)。又为了防止 clk2为1与其后面要用到的上升沿冲突,故添加 dout。元件例化:VHDL编程:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all; en tity tt isport(reset: in std_logic pn1:in std_logic;pn2:in std_logic;res1:in std_logic_vector(27

19、 downto 0 );res2:in std_logic_vector(27 downto 0 ); clk1: in std_logic;clk2: in std_logic; resout: out std_logic_vector(27 downto 0 ); pnout:out std_logic;dout:out std_logic);end entity tt; architecture behave of tt is signal temp:std_logic;begin dout=temp;process(clk1,clk2)begin if(reset=0)then if(

20、clk1=1)then temp=0;elsif(clk2event and clk2=0)then temp=1;end if; if(temp=1)then resout=res2;pnout=pn2;else resout=res1;pnout=pn1;end if;else temp=0;end if;end process;end behave; 结果反馈及输出模块当第一次进行运算或出现过加减再进行乘除的第一次运算时读取 输入的数据值,否则读取前一级的结果值。其中 clr 为恢复信号 (加 or 减) ,当其为 1 时,恢复到第一次运算的模式。 clk 本为乘或除,又为了避开与上一级

21、的清零错位,故其 变为(乘 or( 除 and not dout)元件例化:VHDL编程:library ieee;use ieee.std_logic_1164.all;use ieee.stdo gic_arith.all;use ieee.std_logic_ un sig ned.all; en tity res_cs isport( reset:i n std_logic;data: in stdo gic_vector(7 dow nto 0); data_p n: in std_logic;clr: in stdo gic;clk: in std_logic;res: in st

22、d_logic_vector(27 downto 0);res_p n:in std_logic;result: out std_logic_vector(27 downto 0); result_p n:out std_logic);_ _ end en tity res_cs;architecture behave of res_cs issig nal cn: std_logic_vector(3 dow nto 0);beg inprocess(clk,clr)beg inif(reset=O)the nif(clr=O)the nif(cn=OOOO)the nresult=0000

23、000000000&(data*11OO1OO);result_p n=data_p n; elseresult=res;result_p n=res_p n;end if;if(clkevent and clk=1)then cn=cn+1;end if;else cn =0000;end if;else cn =0000;end if;end process;end behave; 数据输出选择模块(VHDL付录8)当按下等号时输出计算结果,否则输出输入的数据。当输出为负时:第一个数码管显示 F;当输出为负时:第一个数码管显示E;当数据超出范围溢出是第一个数码管显示 Co元件例化:VHDL

24、编程:library ieee;use ieee.stdo gic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_ un sig ned.all;en tity add isport(clk :in std_logic;reset:in std_logic;data:i n std_logic_vector(27 dow nto 0); data_p n:i n std_logic;dout :out std_logic_vector(27 downto 0););end entity add; architecture be

25、have of add is signal temp: std_logic_vector(27 downto 0):=0000000000000000000000000000; signal temp_pn:std_logic:=0;begin dout=temp; dout_pn=temp_pn;process(clk,reset)begin if(reset=1)then temp=0000000000000000000000000000;temp_pn=0; elsif(clkevent and clk=1)thenif(temp_pn=0)then if(data_pn=0)then temp=temp+data;temp_pndata ortemp=temp-data;temp_pn=0;else temp=data-temp;temp_pn=1; end if;end if;elseif(data_pn=1)then temp=temp+data;temp_pn=1; elseortemp=data)thenif(tempdata ortemp=data-temp;temp_pn=0

温馨提示

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

评论

0/150

提交评论