《数电课程设计报告运算器.doc》由会员分享,可在线阅读,更多相关《数电课程设计报告运算器.doc(29页珍藏版)》请在三一办公上搜索。
1、运算器摘 要本设计是一个运算器,包括顶层电路图、运算器模块、按键模块、控制信号模块、修正模块、显示模块几大部分。该运算器用Quartus II仿真软件设计并测试功能正常,下载到试验箱验证成功。关键词:顶层电路,运算器模块,按键模块,控制信号模块,修正模块,显示模块。目录前言3第1章 系统原理71.1系统功能71.2顶层电路71.3系统设计原理8第2章 系统组成92.1按键模块92.2控制信号模块122.3修正模块152.4显示模块192.5运算器模块23第三章 下载验证253.1引脚锁定设置253.2 配置文件下载263.3硬件测试26结论27谢辞28参考文献29前言世界上第一片FPGA由美国
2、Xilinx公司于1985年率先推出。进入21世纪之后,以FPGA为核心的单片系统(SOC)和可编程系统(SOPC)有了显著的发展,单片FPGA的集成规模已达到几百万门,其工作速度已超过300MHz。FPGA在结构上已经实现了复杂系统所需要的主要功能,并将多种功能集成在一片FPGA器件中,如嵌入式存储器、嵌入式乘法器、嵌入式处理器、高速I/O缓冲器、外置存储器接口和实现数字信号处理的DSP等功能。随着FPGA性能的不断完善,FPGA器件的种类日益丰富,受到世界范围内电子设计人员的普遍欢迎,并占据了较大的市场,其生产厂家也由原来的Xilinx公司一家增加到Altera、Actel、lattice
3、等十几家公司。Altera公司的主要产品有:属于FPGA的FLEX、ACEX、APEX、Mercury、Excalibur、Stratix和Cyclone等系列;属于CPLD的MAX和Classic系列。开发工具有,被普遍认为是最优秀PLD 开发平台之一的MAX+Plus II和支持APEX、Mercury、Excalibur、Stratix和Cyclone系列器件的Quartus II开发软件。Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Languag
4、e)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。我的运算器和电子表主要是用VHDL语言编写,以Quartus II为依托,并下载到FPGA验证板验证功能成功,能够初步完成简单的四种运算和电子表的调节。随着大规模集成电路技术和计算机技术的高速发展,在涉及通信、国防、工业自动化、计算机设计与应用、仪器仪表等领域的电子系统设计工作中,FPGA技术的含量正以惊人的速度提升。电子类的新技术项目的开发也更多地依赖于FPGA技术的应用,特别是随着HDL等硬件描述语言综合功能和性能的提高,计算机中许多重要的元件(包括CPU)都用硬件描述语言来设计和表达,许
5、多微机CPU、硬核嵌入式系统(如ARM、MIPS)、软核嵌入式系统(如NiosII)、大型CPU,乃至整个计算机系统都用FPGA来实现,即所谓的单片系统SOC或SOPC(System On a Chip、System On a Programmerable Chip)。计算机和CPU的设计技术及其实现途径进入了一个全新的时代!不但如此,传统的CPU结构模式,如冯诺依曼结构和哈佛结构正在接受巨大的挑战。例如美国Wincom Systems 公司推出一款令人惊叹的服务器,其核心部分是由FPGA完成的超强功能CPU。该系统工作能力超过50台DELL或IBM计算机,或SUN Microsystems
6、公司的服务器。该服务器的处理速度要比传统服务器快50到300倍。我们知道,传统的PC机及服务器通常采用诸如Intel公司的奔腾处理器或SUN公司的SPARC芯片作为中央处理单元,而Wincom Systems的这款产品却没有采用微处理器,而是由FPGA芯片驱动。FPGA芯片的运行速度虽比奔腾处理器慢,但可并行处理多项任务,而微处理器一次仅能处理一项任务。因此,Wincom Systems的服务器只需配置几个价格仅为2000多美元的FPGA芯片,便可击败SUN公司的服务器或采用Intel处理器的计算机。50多年前,匈牙利数学家冯诺依曼提出了计算机的设计构想:通过中央处理器从储存器中存取数据,并逐
7、一处理各项任务。然而现在,却采用FPGA取代传统微处理器获得了更高的性能,致使美国Xilinx公司的首席执行官Willem Roelandts 认为:“由冯诺依曼提出的电脑架构已经走到尽头”,“可编程芯片将掀起下一轮应用高潮”。FPGA芯片操作灵活,可以重复擦写无限次,而微处理器均采用固定电路,只能进行一次性设计。设计人员可通过改变FPGA中晶体管的开关状态对电路进行重写,即重配置,从而尽管FPGA芯片的时钟频率要低于奔腾处理器,但是由于FPGA芯片可并行处理各种不同的运算,所以可以完成许多复杂的任务。正如Willem Roelandts所说的,“我们认为下一代超级电脑将基于可编程逻辑器件”,
8、他声称,这种机器的功能比目前最大的超级电脑还要强大许多倍。EDA专家William Carter认为,只要EDA开发工具的功能允许,将有无数的证据证明FPGA 具有这种神奇的能力,进而实现基于FPGA的超级电脑的开发。此外,美国加州大学伯克利分校和杨百翰大学的研究人员也正在设计基于FPGA的电脑,这些电脑可在运行中实现动态重配置。这对定位危险目标等军事应用和面容识别之类的计算密集型安全应用十分有用。由此看来,在计算机应用领域和计算机系统设计领域中,EDA技术和FPGA的应用方兴未艾!硬件描述语言HDL(Hardware Description Language)是EDA技术的另一重要组成部分,
9、常见的HDL有:VHDL、Verilog HDL、System Verilog和SystemC。其中VHDL、Verilog在现在EDA设计中使用最多,也得到几乎所有的主流EDA工具的支持。而后两种HDL 语言尚处于完善过程中。VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力,在语言易读性和层次化结构设计方面表现了强大的生命力和应用潜力。因此,VHDL支持各种模式的设计方法:自顶向下与自底向上或混合方法,在面对当今许多
10、电子产品生命周期缩短,需要多次重新设计以融入最新技术、改变工艺等方面, VHDL都表现了良好的适应性。第1章 系统原理1.1 系统功能该系统是基于FPGA设计的简单运算器,可以实现-7到+7范围内的加、减、与、异或运算。1.2 顶层电路1.3 系统设计原理该运算器电路由按键、控制、修正、显示、运算五大模块组成,实现加、减、与、异或运算功能。首先按键模块用以输入数据,通过控制模块传送到运算器模块进行运算,修正模块对结果进行修正,最后显示模块实现把运算过程显示到LCD显示器上。第2章 系统组成2.1 按键模块2.1.1按键模块VHDL实现LIBRARY IEEE;USE IEEE.STD_LOGI
11、C_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY KEY IS PORT( EN : OUT STD_LOGIC; YSF : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); RSTN,CLK : IN STD_LOGIC; KEYA,KEYB : IN STD_LOGIC; KADD,KSUB,KAND,KXOR,KEQU : IN STD_LOGIC; A,B,C,D :OUT STD_LOGIC_VECTOR(3 DOWNTO 0); XSYSF : OUT S
12、TD_LOGIC_VECTOR(7 DOWNTO 0); XA,XB :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END KEY;ARCHITECTURE ARCH OF KEY IS SIGNAL TKADD,TKSUB,TKAND,TKXOR,TKEQU :STD_LOGIC;SIGNAL TA,TB :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(KEYA,RSTN)BEGINIF RSTN=0THEN TA=0000; ELSIF(KEYAEVENT AND KEYA=1)THEN TA=TA+1; END IF; END
13、PROCESS;PROCESS(KEYB,RSTN)BEGINIF RSTN=0THEN TB=0000; ELSIF(KEYBEVENT AND KEYB=1)THEN TB=TB+1; END IF; END PROCESS;PROCESS(RSTN,KADD)BEGINIF RSTN=0THEN TKADD=0; ELSIF (KADDEVENT AND KADD=1)THEN TKADD=1;END IF;END PROCESS;PROCESS(RSTN,KSUB)BEGINIF RSTN=0THEN TKSUB=0; ELSIF (KSUBEVENT AND KSUB=1)THEN
14、TKSUB=1;END IF;END PROCESS;PROCESS(RSTN,KAND)BEGINIF RSTN=0THEN TKAND=0; ELSIF (KANDEVENT AND KAND=1)THEN TKAND=1;END IF;END PROCESS;PROCESS(RSTN,KXOR)BEGINIF RSTN=0THEN TKXOR=0; ELSIF (KXOREVENT AND KXOR=1)THEN TKXOR=1;END IF;END PROCESS;PROCESS(RSTN,KEQU)BEGINIF RSTN=0THEN TKEQU=0; ELSIF (KEQUEVEN
15、T AND KEQU=1)THEN TKEQU=1;END IF;END PROCESS;PROCESS(RSTN,CLK,TKADD,TKSUB,TKAND,TKXOR,TKEQU,TA,TB)BEGINIF RSTN=0THEN YSF=00;EN=0;XSYSF=00100000;ELSIF(CLKEVENT AND CLK=1)THEN IF TKADD=1THEN YSF=00;XSYSF=00101011;A=TA;B=TB;END IF; IF TKSUB=1THEN YSF=01;XSYSF=00101101;A=TA;B=TB;END IF; IF TKAND=1THEN Y
16、SF=10;XSYSF=00101010;A=TA;C=TB;END IF; IF TKXOR=1THEN YSF=11;XSYSF=00101111;A=TA;D=TB;END IF; IF TKEQU=1THEN ENXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXANULL; END CASE; CASE TB IS WHEN0000=XBXBXBXBXBXBXBXBXBXBXBXBXBXBXBXBNULL; END CASE;END IF;END PROCESS;END ARCH;2.1.2 按键模块仿真波形图2.1.3按键模块封装图 2.1.4模块功能该模块实现的是按键
17、输入,通过按键的输入可以实现输入加减,与和异或的运算符号,以及A和B的值。2.2 控制信号模块2.2.1 控制信号模块VHDL实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CP3 IS PORT ( RSTN,CLK:IN STD_LOGIC; CP,CPT,CPMUX:BUFFER STD_LOGIC; SADD,SSUB,SAND,SXOR:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END C
18、P3;ARCHITECTURE BEHAVIORAL OF CP3 ISTYPE STATE1 IS(S0,S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11);SIGNAL PRES1,NXS1:STATE1;TYPE STATE2 IS(SS0,SS1,SS2,SS3);SIGNAL PRES2,NXS2:STATE2;BEGINPROCESS(CLK,RSTN)BEGINIF (RSTN=0)THEN PRES1=S0; ELSIF(CLKEVENT AND CLK=1)THEN PRES1 CP=1;CPMUX=0;CPT=0;NXS1 CP=0;CPMUX=0;CP
19、T=0;NXS1 CP=0;CPMUX=1;CPT=0;NXS1 CP=1;CPMUX=1;CPT=0;NXS1 CP=1;CPMUX=0;CPT=0;NXS1 CP=0;CPMUX=0;CPT=0;NXS1 CP=0;CPMUX=1;CPT=0;NXS1 CP=1;CPMUX=1;CPT=0;NXS1 CP=1;CPMUX=1;CPT=0;NXS1 CP=0;CPMUX=1;CPT=1;NXS1 CP=0;CPMUX=1;CPT=1;NXS1 CP=1;CPMUX=1;CPT=1;NXS1=S11; END CASE;END PROCESS;PROCESS(CP,RSTN)BEGINIF(R
20、STN=0)THEN PRES2=SS0; ELSIF(CPEVENT AND CP=0)THEN PRES2 SADD=00;SSUB=00;SAND=00;SXOR=00; NXS2 SADD=01;SSUB=00;SAND=00;SXOR=00; NXS2 SADD=00;SSUB=01;SAND=10;SXOR=11; NXS2 SADD=00;SSUB=01;SAND=10;SXOR=11; NXS2=SS3;END CASE ;END PROCESS;END BEHAVIORAL;2.2.2 控制信号模块仿真波形2.2.3 控制信号模块封装图 2.2.4 模块功能. 该模块控制信号
21、产生的四种运算。CPMUX是将输入数字寄存与按键模块,在CP上升沿输入到运算器,当CPT=0时开始计算。这里实现的是A+B结果送入A,A-B的结果送入B,A与C的结果送入C,A异或D的结果送入D。2.3 修正模块2.3.1 修正模块VHDL实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XZJG IS PORT(RSTN:IN STD_LOGIC; S:IN STD_LOGIC_VECTOR(1 DOWNTO 0); CL
22、K,OVER,COUT:IN STD_LOGIC; T:IN STD_LOGIC_VECTOR(3 DOWNTO 0); FH:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); SH,SL:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END XZJG;ARCHITECTURE BEHAVIORAL OF XZJG IS SIGNAL OC:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL TH,TL:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(RSTN,CLK,OVER,COUT)BEGINI
23、F(CLKEVENT AND CLK=1)THENOC=OVER & COUT;END IF;END PROCESS;PROCESS(OC,CLK)BEGINIF(RSTN=0)THENTH=0000;TLTHTL=0000;FHTL=0001;FHTL=0010;FHTL=0011;FHTL=0100;FHTL=0101;FHTL=0110;FHTL=0111;FHTL=1000;FHTL=0111;FHTL=0110;FHTL=0101;FHTL=0100;FHTL=0011;FHTL=0010;FHTL=0001;FHNULL; END CASE; WHEN 01=THTL=0000;F
24、HTL=0001;FHTL=0010;FHTL=0011;FHTL=0100;FHTL=0101;FHTL=0110;FHTL=0111;FHTL=1000;FHTL=0111;FHTL=0110;FHTL=0101;FHTL=0100;FHTL=0011;FHTL=0010;FHTL=0001;FHNULL; END CASE; WHEN10=FHTH=0000;TLTH=0000;TLTH=0001;TLTH=0001;TLTH=0001;TLTH=0001;TLTH=0001;TLNULL; END CASE; WHEN11=FHTH=0001;TLTH=0001;TLTH=0001;T
25、LTH=0001;TLTH=0001;TLTH=0001;TLTH=0001;TLTH=0000;TLNULL; END CASE;END CASE;END IF;END PROCESS;PROCESS(RSTN,S,TH,TL,CLK)BEGINIF(RSTN=0)THEN SH=0000;SLSH=TH;SLSH=TH;SLSH=0000;SLSH=0000;SL00100000);TYPE STATE IS (CLEAR,IDS,DLNF,DCB,DDRAM1,OUTDATA1,DDRAM2,OUTDATA2);SIGNAL COUNT :STD_LOGIC_VECTOR(15 DOWN
26、TO 0);SIGNAL LCLK_OUT :STD_LOGIC;SIGNAL COUNTS :INTEGER RANGE 0 TO 3000000:=0;SIGNAL CURRENT_STATE:STATE;SIGNAL TEMPA :STD_LOGIC_VECTOR(4 DOWNTO 0):=00000;BEGINPROCESS(CLK_OUT,CLK)BEGIN IF(RISING_EDGE(CLK)THEN COUNTS=COUNTS+1; IF(COUNTS=3000000)THEN CLK_OUT=NOT CLK_OUT; END IF;END IF;END PROCESS;QX(
27、2)=R3;QX(3)=R4;QX(4)=R5;QX(5)=00100000;QX(6)=R0;QX(7)=0011&R1;QX(8)=0011&R2;PROCESS(CLK,LCLK_OUT)BEGIN IF(RISING_EDGE(CLK)THEN COUNT=COUNT+1; IF(COUNT=0)THEN LCLK_OUT=NOT LCLK_OUT; END IF; END IF;END PROCESS;EN=LCLK_OUT;PROCESS(LCLK_OUT,CURRENT_STATE) BEGIN IF RISING_EDGE(LCLK_OUT)THEN RS=0; RW=0; CASE CURRENT_S