数字逻辑课程设计基于FPGA的简单运算器.docx
《数字逻辑课程设计基于FPGA的简单运算器.docx》由会员分享,可在线阅读,更多相关《数字逻辑课程设计基于FPGA的简单运算器.docx(28页珍藏版)》请在冰豆网上搜索。
数字逻辑课程设计基于FPGA的简单运算器
运算器
摘要
设计一个简单运算器。
由顶层电路、运算器、按键输入、控制信号产生、修正结果、显示等模块构成。
用QuartusII绘制原理图或编写VHDL程序,然后封装画出电路图,该简单运算器可以实现加、减法算数运算和与、异或逻辑运算,且该运算器设计完之后经过了QuartusII软件和FPGA实验板的下载验证。
关键词:
运算器,QuartusII,VHDL程序
前言
随着FPGA性能的不断完善,FPGA器件的种类日益丰富,受到世界范围内电子设计人员的普遍欢迎,并占据了较大的市场,其生产厂家也由原来的Xilinx公司一家增加到Altera、Actel、lattice等十几家公司。
Altera公司的主要产品有:
属于FPGA的FLEX、ACEX、APEX、Mercury、Excalibur、Stratix和Cyclone等系列;属于CPLD的MAX和Classic系列。
开发工具有,被普遍认为是最优秀PLD开发平台之一的MAX+PlusII和支持APEX、Mercury、Excalibur、Stratix和Cyclone系列器件的QuartusII开发软件。
Cyclone系列器件是Altera公司推出的低价位FPGA产品,是Stratix系列的简化版,分为CycloneI和CycloneII两个系列。
CycloneI系列产品为基于1.5V、采用0.13um全铜SRAM工艺的低成本FPGA。
CycloneII系列产品基于1.2V,采用0.09um全铜CMOS工艺,SRAM编程技术,其成本更低、容量更高、速度更快。
它和高性能的StratixII系列的FPGA是目前Altera公司主流产品。
我的简单运算器主要是用VHDL语言编写,以Cyclone器件为依托,并下载到Altera仿真工具箱Cyclone-EP1C6Q240C8验证功能成功,能够初步完成简单运算器的雏形。
随着大规模集成电路技术和计算机技术的高速发展,在涉及通信、国防、工业自动化、计算机设计与应用、仪器仪表等领域的电子系统设计工作中,FPGA技术的含量正以惊人的速度提升。
电子类的新技术项目的开发也更多地依赖于FPGA技术的应用,特别是随着HDL等硬件描述语言综合功能和性能的提高,计算机中许多重要的元件(包括CPU)都用硬件描述语言来设计和表达,许多微机CPU、硬核嵌入式系统(如ARM、MIPS)、软核嵌入式系统(如NiosII)、大型CPU,乃至整个计算机系统都用FPGA来实现,即所谓的单片系统SOC或SOPC(SystemOnaChip、SystemOnaProgrammerableChip)。
计算机和CPU的设计技术及其实现途径进入了一个全新的时代!
不但如此,传统的CPU结构模式,如冯诺依曼结构和哈佛结构正在接受巨大的挑战。
例如美国WincomSystems公司推出一款令人惊叹的服务器,其核心部分是由FPGA完成的超强功能CPU。
该系统工作能力超过50台DELL或IBM计算机,或SUNMicrosystems公司的服务器。
该服务器的处理速度要比传统服务器快50到300倍。
我们知道,传统的PC机及服务器通常采用诸如Intel公司的奔腾处理器或SUN公司的SPARC芯片作为中央处理单元,而WincomSystems的这款产品却没有采用微处理器,而是由FPGA芯片驱动。
FPGA芯片的运行速度虽比奔腾处理器慢,但可并行处理多项任务,而微处理器一次仅能处理一项任务。
因此,WincomSystems的服务器只需配置几个价格仅为2000多美元的FPGA芯片,便可击败SUN公司的服务器或采用Intel处理器的计算机。
50多年前,匈牙利数学家冯诺依曼提出了计算机的设计构想:
通过中央处理器从储存器中存取数据,并逐一处理各项任务。
然而现在,却采用FPGA取代传统微处理器获得了更高的性能,致使美国Xilinx公司的首席执行官WillemRoelandts认为:
“由冯诺依曼提出的电脑架构已经走到尽头”,“可编程芯片将掀起下一轮应用高潮”。
FPGA芯片操作灵活,可以重复擦写无限次,而微处理器均采用固定电路,只能进行一次性设计。
设计人员可通过改变FPGA中晶体管的开关状态对电路进行重写,即重配置,从而尽管FPGA芯片的时钟频率要低于奔腾处理器,但是由于FPGA芯片可并行处理各种不同的运算,所以可以完成许多复杂的任务。
正如WillemRoelandts所说的,“我们认为下一代超级电脑将基于可编程逻辑器件”,他声称,这种机器的功能比目前最大的超级电脑还要强大许多倍。
EDA专家WilliamCarter认为,只要EDA开发工具的功能允许,将有无数的证据证明FPGA具有这种神奇的能力,进而实现基于FPGA的超级电脑的开发。
此外,美国加州大学伯克利分校和杨百翰大学的研究人员也正在设计基于FPGA的电脑,这些电脑可在运行中实现动态重配置。
这对定位危险目标等军事应用和面容识别之类的计算密集型安全应用十分有用。
由此看来,在计算机应用领域和计算机系统设计领域中,EDA技术和FPGA的应用方兴未艾!
硬件描述语言HDL(HardwareDescriptionLanguage)是EDA技术的另一重要组成部分,常见的HDL有:
VHDL、VerilogHDL、SystemVerilog和SystemC。
其中VHDL、Verilog在现在EDA设计中使用最多,也得到几乎所有的主流EDA工具的支持。
而后两种HDL语言尚处于完善过程中。
VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
VHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述能力,在语言易读性和层次化结构设计方面表现了强大的生命力和应用潜力。
因此,VHDL支持各种模式的设计方法:
自顶向下与自底向上或混合方法,在面对当今许多电子产品生命周期缩短,需要多次重新设计以融入最新技术、改变工艺等方面,VHDL都表现了良好的适应性。
第一章系统原理
1.1系统功能
该系统是基于FPGA设计的简单运算器,可以实现简单的-7到+7范围内的加、减、与、以及异或四则运算。
将设计好的系统电路图与硬件实验板相连接,进行运算验证。
该实验板由一个8按键电路和一个32位LCD显示器组成,通过相应的按键输入把运算结果显示在LCD显示器上。
1.2系统原理图
1.3电路设计原理
该运算器电路由按键输入、控制、修正、显示和运算五大模块组成,来实现加、减、与、异或运算功能。
首先按键模块用于输入两个数和运算符,通过控制模块传送到运算器模块进行运算,再连接到修正模块,通过修正模块对“溢出”的数值进行修正,最后显示模块功能实现把运算过程反应到LCD显示器上。
第二章系统组成
2.1按键模块
2.1.1按键模块VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYKEYIS
PORT(EN:
OUTSTD_LOGIC;
YSF:
OUTSTD_LOGIC_VECTOR(1DOWNTO0);
RSTN,CLK:
INSTD_LOGIC;
KEYA,KEYB:
INSTD_LOGIC;
KADD,KSUB,KAND,KXOR,KEQU:
INSTD_LOGIC;
A,B,C,D:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
XSYSF:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
XA,XB:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDKEY;
ARCHITECTUREARCHOFKEYIS
SIGNALTKADD,TKSUB,TKAND,TKXOR,TKEQU:
STD_LOGIC;
SIGNALTA,TB:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
----保存A------
PROCESS(KEYA,RSTN)
BEGIN
IFRSTN='0'THENTA<="0000";
ELSIF(KEYA'EVENTANDKEYA='1')THEN
TA<=TA+1;
ENDIF;
ENDPROCESS;
-----保存B------
PROCESS(KEYB,RSTN)
BEGIN
IFRSTN='0'THENTB<="0000";
ELSIF(KEYB'EVENTANDKEYB='1')THEN
TB<=TB+1;
ENDIF;
ENDPROCESS;
------获取信号------
PROCESS(RSTN,KADD)
BEGIN
IFRSTN='0'THENTKADD<='0';
ELSIF(KADD'EVENTANDKADD='1')THENTKADD<='1';ENDIF;
ENDPROCESS;
------------------
PROCESS(RSTN,KSUB)
BEGIN
IFRSTN='0'THENTKSUB<='0';
ELSIF(KSUB'EVENTANDKSUB='1')THENTKSUB<='1';ENDIF;
ENDPROCESS;
--------
PROCESS(RSTN,KAND)
BEGIN
IFRSTN='0'THENTKAND<='0';
ELSIF(KAND'EVENTANDKAND='1')THENTKAND<='1';ENDIF;
ENDPROCESS;
PROCESS(RSTN,KXOR)
BEGIN
IFRSTN='0'THENTKXOR<='0';
ELSIF(KXOR'EVENTANDKXOR='1')THENTKXOR<='1';ENDIF;
ENDPROCESS;
-------------
PROCESS(RSTN,KEQU)
BEGIN
IFRSTN='0'THENTKEQU<='0';
ELSIF(KEQU'EVENTANDKEQU='1')THENTKEQU<='1';ENDIF;
ENDPROCESS;
PROCESS(RSTN,CLK,TKADD,TKSUB,TKAND,TKXOR,TKEQU,TA,TB)
BEGIN
IFRSTN='0'THENYSF<="00";EN<='0';XSYSF<="00100000";
ELSIF(CLK'EVENTANDCLK='1')THEN
IFTKADD='1'THENYSF<="00";XSYSF<="00101011";A<=TA;B<=TB;ENDIF;
IFTKSUB='1'THENYSF<="01";XSYSF<="00101101";A<=TA;B<=TB;ENDIF;
IFTKAND='1'THENYSF<="10";XSYSF<="00101010";A<=TA;C<=TB;ENDIF;
IFTKEQU='1'THENEN<='1';ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(TA,TB,CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
CASETAIS
WHEN"0000"=>XA<="00110000";
WHEN"0001"=>XA<="00110001";
WH