1. 绪论 1.1 Quartus II概述
u Quartus II 软件主要设计特性
Quartus® II 设计软件充分发挥了FPGA、CPLD和结构化ASIC的效率和性能,提供多种设计特性,加速设计过程:
1) 渐进式编译缩短了设计周期
2) SOPC Builder系统级设计
3) MegaWizard® 插件管理器,迅速方便的集成多种知识产权(IP)内核
4) 功耗分析工具,满足严格的功率要求
5) 存储器编译器功能,轻松使用嵌入式存储器
Quartus II软件帮助您建立并实现FPGA、CPLD和结构化ASIC设计,具有无与伦比的性能,使您能够将产品尽快推向市场。
Quartus II软件支持VHDL和Verilog硬件描述语言(HDL)设计输入、图形设计输入方法以及集成的系统级设计工具。Quartus II软件将设计、综合、布局布线和验证功能以及第三方EDA工具无缝集成到一起。
u 编译增强特性提高设计效率
Quartus II编译增强特性为高密度FPGA提供最高效的增强设计方法。该易于使用的编译增强功能为业界首次实现,将设计编译时间缩短了近70%,设计人员可以针对独立的设计分区进行优化,对于没有改动的分区则保留其性能不变,从而提高时序逼近效率。
更快集成IP
Altera®软件订购现包括 MegaCore® IP库和Nios® II 嵌入式处理器评估版CD-ROM,包括OpenCore® 版所有Altera现有的MegaCore IP功能。只有Quartus II软件具有OpenCore Plus基本技术,支持在购买IP许可之前在第三方仿真环境和硬件环境下进行IP评估。
Quartus II设计软件含有SOPC Builder工具。SOPC Builder是Quartus II特有的软件工具,使您能够快速、方便的构建、评估嵌入式系统。SOPC Builder具有:
1) 集成了来自Altera以及Altera Megafunction Partner Program (AMPPSM) 合作伙伴的现成IP
2) 在系统中生成自己的可重用定制元件
3) 根据每个系统的需求,生成HDL,构建最佳互连架构
4) 输出系统测试台组件
5) 输出生成系统基于存储器映射和组成的定制软件开发套件(SDK)
SOPC Builder使您能够将精力集中于用户逻辑设计上,无需手动完成系统集成任务,从而提升系统性能。Altera Quartus II设计软件的所有版本均含有SOPC Builder系统生成工具。
Altera MegaWizard® Plug-In Manager 可以方便的参数化、例化IP功能,减少设计输入时间,提高设计性能。您可以结合Quartus II软件以及Altera和AMPP合作伙伴IP Megafunction中的参数化模块库 (LPM) 来使用MegaWizard Plug-In Manager。
u 在设计周期的早期就对I/O引脚进行分配和确认
Quartus II软件可以进行预先的I/O分配和确认 的操作(无论顶层的模块是否已经完成),这样就可以在整个设计流程中尽早开始印刷电路板(PCB)的布线设计工作。同样,设计人员可以在任何时间对引脚的分配进行修改和确认,无需再进行一次设计编译。软件还提供各种分配编辑的功能,例如选择多个信号和针对一组引脚同时进行的分配修改等,所有这些都进一步简化了引脚分配的管理。
u 功率分析和优化
Quartus II软件PowerPlay技术可以使您对动态和静态功耗进行精确的分析和优化。PowerPlay功率分析功能生产详细的报告,指明哪种器件结构甚至是设计层次模块消耗了最大的热量。
u 存储器编译器
用户可以使用Quartus II软件中提供的存储器编译器的功能对Altera FPGA中的嵌入式存储器进行轻松管理。Quartus II软件的4.0版本和后续版本都增加了针对FIFO和RAM读操作的基于现有设置的波形动态生成功能。如需了解有关在VHDL或Verilog编程中对存储器进行操作的更多信息,请参见Quartus II手册中设计和综合部分内容。
u 支持CPLD、FPGA和基于HardCopy的ASIC
除了CPLD和FPGA以外,Quartus II软件还使用和FPGA设计完全相同的设计工具、IP和验证方式支持HardCopy结构化ASIC。在业界首次允许设计工程师通过易用的FPGA设计软件来进行结构化的ASIC设计,并且能够对设计后的性能和功耗进行准确的估算。
u 使用全新的命令行和脚本功能自动化设计流程
用户可以使用命令行或Quartus II软件中的图形界面(GUI)独立运行Quartus II软件中的综合、布局布线、时序分析以及编程等模块。除了提供Synopsys设计约束(SDC)的脚本支持以外,Quartus II软件中目前还包括了易用的工具命令语言 (Tcl)界面,允许用户使用该语言来创建和定制设计流程和满足用户的需求。
本文在着重讨论了基于Quartus Ⅱ软件实现16位CPU的设计方案
1.2 本课题的背景和意义
CPU(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。CPU允许在串行链路上进行全双工的通信。
串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即CPU实现。如8250、8251、NS16450等芯片都是常见的CPU器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的CPU的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的CPU功能集成到FPGA内部。使用VHDL将CPU的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。本文应用Quartus Ⅱ技术,基于FPGA/CPLD器件设计与实现16位CPU的设计方案。
1.3 本设计完成的工作
Ø 设计源文件
Ø 功能仿真文件
Ø 时序仿真文件
Ø 约束、综合、布局布线的过程文件和结果文件的设计
2.硬件设计
2.1硬件设计原则
u CPU的基本概念:
(1)在信号线上共有两种状态,可分别用逻辑1和逻辑0来区分。在发送器空闲时,数据线应该保持在逻辑1状态。
(2)起始位(Start Bit)。发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑0状态,提示接收器数据传输即将开始。
(3)数据位(Data Bits)。起始位之后就是传送数据位。数据位一般为一个字节的数据(也有6位、7位的情况),低位(LSB)在前,高位(MSB)在后。
(4)校验位(parity Bit)。可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。在使用中,该位常常取消。
(5)停止位。停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态。
(6)位时间。即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止位有0.5位、1位、1.5位格式,一般为1位。
(7)帧。从起始位开始到停止位结束的时间间隔称之为一帧。
(8)波特率。CPU的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率9600=9600bps(位/秒)。CPU的数据帧格式为:
CPU的整个设计模块分为三个子模块和一个模块:
(1)波特率发生器;(2)接收模块;(3)发送模块;(4)总模块。
u CPU的原理
CPU即Universal Asynchronous Receiver Transmitter通用异步收发器,是一种应用广泛的短距离串行传输接口。往往用于短距离、低速、低成本的微机与下拉机的通讯中。8250、8251、NS16450等芯片都是常见的CPU器件。常见的CPU连接通信图如图2.1所示。
图2.1. CPU三线连接通信示意图
图中两边的TRE、DOUT信号是交错的。TRE是CPU发送端,为输出;DOUT是CPU接收端,为输入。在TRE、DOUT信号线上的电平也不是普通的TTL5V电平,而是RS232的接口电平。基本CPU只需要两条信号线(DOUT、TRE)就可以完成数据的相互通信,接收与发送是互不干扰的,也是全双工的,这样就大大降低了传送的费用。但要求在TRE、DOUT指定一定的规则,以使接收、发送之间能协调一致。
2.2部分电路设计
u CPU发送器
CPU发送器---发送器每隔16个CLK16时钟周期输出1位,次序遵循1位起始位、8位数据位(假定数据位为8位)、1位校验位(可选)、1位停止位。
--- CPU何时可以往发送缓冲器tbr写入数据,也就是说CPU要写数据到tbr时必须判断当前是否可写,如果不判这个条件,发送的数据会出错。
--- 数据的发送是由微处理器控制,微处理器给出wen信号,发送器根据此信号将并行数据din[7..0]锁存进发送缓冲器tbr[7..0],并通过发送移位寄存器tsr[7..0]发送串行数据至串行数据输出端dout。在数据发送过程中用输出信号tre作为标志信号,当一帧数据发送完毕时,tre信号为1,通知CPU在下个时钟装入新数据。
--- 发送器端口信号如下图所示。
---引入发送字符长度和发送次序计数器length_no,实现的部分VHDL程序如下。
---if std_logic_vector(length_no) = “0001” then
---tsr <= tbr ; --发送缓冲器tbr数据进入发送移位寄存器tsr
---tre <= '0' ; --发送移位寄存器空标志置“0”
---elsif std_logic_vector(length_no) = “0010” then
---dout <= '0' ; --发送起始位信号“0”
---elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” then
---tsr <= '0' & tsr(7 downto 1); --从低位到高位进行移位输出至串行输出端dout
---dout <= tsr(0) ;
---parity <= parity xor tsr(0) ; --奇偶校验
---elsif std_logic_vector(length_no) = “1011” then
---dout <= parity ; 校验位输出
---elsif std_logic_vector(length_no) = “1100” then
---dout <= '1' ; --停止位输出
---tre <= '1' ; --发送完毕标志置“1”
---end if ;
---发送器仿真波形如下图所示。
u CPU接收器
---串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要8个CLK16时钟周期,才是正常的起始位,然后在每隔16个CLK16时钟周期采样接收数据,移位输入接收移位寄存器rsr,最后输出数据dout。还要输出一个数据接收标志信号标志数据接收完。
---接收器的端口信号如图所示。
---实现的部分VHDL程序如下。
---elsif clk1x'event and clk1x = '1' then
---if std_logic_vector(length_no) >= “0001” and std_logic_vector(length_no) <= “1001” then
---数据帧数据由接收串行数据端移位入接收移位寄存器
---rsr(0) <= rxda ;
---rsr(7 downto 1) <= rsr(6 downto 0) ;
---parity <= parity xor rsr(7) ;
---elsif std_logic_vector(length_no) = “1010” then
---rbr <= rsr ; --接收移位寄存器数据进入接收缓冲器
---......
---end if ;
---接收器仿真波形如下图所示。
u 波特率发生器
---CPU的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提出异步的串行数据。
---根据给定的晶振时钟和要求的波特率算出波特率分频数。
if std_logic_vector(length_no) = “0001” then
tsr <= tbr ; --发送缓冲器tbr数据进入发送移位寄存器tsr
tre <= '0' ; --发送移位寄存器空标志置“0”
elsif std_logic_vector(length_no) = “0010” then
dout <= '0' ; --发送起始位信号“0”
elsif std_logic_vector(length_no) >= “0011” and std_logic_vector(length_no) <= “1010” then
tsr <= '0' & tsr(7 downto 1); --从低位到高位进行移位输出至串行输出端dout
dout <= tsr(0) ;
parity <= parity xor tsr(0) ; --奇偶校验
elsif std_logic_vector(length_no) = “1011” then
dout <= parity ; 校验位输出
elsif std_logic_vector(length_no) = “1100” then
dout <= '1' ; --停止位输出
tre <= '1' ; --发送完毕标志置“1”
end if ;
发送器仿真波形如下图所示。
3.基于QuartusII软件设计
3.1设计环境及工具介绍 (一)
Altera公司提供的 QuartusII 设计软件是适合单芯片可编程系统 (SOPC) 的最全面的设计环境。Quartus II 开发工具人机界面友好、易于使用、性能优良,并自带编译、仿真功能。QuartusII软件支持VHDL和Verilog硬件描述语言的设计输入、基于图形的设计输入方式以及集成系统级设计工具。QuartusII软件可以将设计、综合、布局和布线以及系统的验证全部都整合到一个无缝的环境之中,其中也包括和第三方EDA工具的接口。不管你使用的是个人计算机还是UNIX或Linux工作平台,QuartusII 软件都能确保系统设计的简易输入、快速处理、及器件的直接编程。
作为可编程逻辑器件的开发软件,QuartusII支持以下Altera器件:ACEX 1K,ACEX 20K,ACEX 20KC,ACEX 20KE,APEXII, ARM-basedExcalibur,Cyclone,CycloneII,FLEX6000,FLEX10K,FLEX10KA,FLEX10KE, HardCopyStratix,MAXII,MAX3000A,MAX7000AE,MAX7000B,MAX7000S,Mercury,Stratix,StratixII,,StratixGX。
QuartusII支持Nativelink,以及结合主要的设计工具提供在QuartusII和其他EDA工具之间进行无缝信息传输。同时Nativelink使得QuartusII软件可以轻易地从EDA工具原文件中识别出错误源头,从而使设计者可以很快地改正它们。除此之外,QuartusII软件允许从该软件内部自动运行许多EDA工具,进一步增强设计流程的综合性。
QuartusII也识别标准的EDIF网络表文件、VHDL网络表文件以及Verilog HDL网络表文件,同时还能生成VHDL和Verilog HDL网络表文件,其中还包括VITAL自适应文件,以便为其它工业标准的EDA工具提供方便的界面。
QuartusII提供丰富的图形用户界面编译环境,并附带有详细解说和易用的在线帮助系统。完善的QuartusII软件拥有一个完整的设计环境,它包括从设计输入到器件编程的每一个阶段。
在一个层次设计工程中,设计者可以方便的使用不同的文件类型,选择每个功能模块的设计输入格式,让其工作在最佳状态下。设计者还可以使用QuartusII模块编辑器在高层次创建模块图表,对设计进行描述,然后使用附加的模块图表创建低层次的设计。层次结构独立的设计输入,使得设计者自由地创建逻辑图表,而不必担心最后的器件实现。
先进的图形用户界面使得QuartusII允许设计者在同一时间处理多个文件,编辑多个设计,并在多个设计之间进行信息传输,同时还可以编辑或模拟其他工程。设计者可以一览整个设计层次,并可以灵活的从一个层次移动到另一个层次。每当打开一个设计文件,QuartusII软件便会自动地启动相应的编辑器。
QuartusII编译器位于系统的核心,提供强有力的设计处理。设计者可以根据需要对其进行自定义,以达到设计工程的最佳实现。自动地检测错误、定位和丰富的错误或警告提示文档信息,使得设计修正非常简便。在程序设计的每一个阶段QuartusII软件使设计者把重心集中在设计上,而不是在该如何使用这个软件上。
QuartusII软件的极好整合,改善了设计者的工作效率和生产力,把设计者放在控制整个逻辑设计环境的重要位置。
QuartusII设计软件提供完整的多平台设计环境,它可以轻易满足特定设计的需要。它包含整个FPGA和CPLD设计阶段的解决方案。有关QuartusII软件开发流程的图示说明,如图3-3所示。此外,QuartusII软件允许在设计流程的每个阶段使用QuartusII 图形用户界面、EDA工具界面或命令行界面。既可以在整个流程中只使用这些界面中的一个,也可以在设计流程的不同阶段使用不同的选项。
图 QuartusII软件的开发流程
(二) 可编程逻辑器件概述
u 传统的硬件设计思路
在传统硬件电路系统设计制作中,设计者根据电路图画出电路板并做出PCB板,把电路元件焊接好后对整个电路板系统进行模拟调试。在整个设计过程中,若稍有疏忽,则将前功尽弃,不仅浪费时间,还造成资源上的浪费。可编程逻辑器件则改变了传统的硬件电路系统设计方式、方法及制作过程,它摒弃了传统设计中的不灵活性,可以通过软件编程的方法对其硬件结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样方便快捷。随着计算机软件、硬件和集成电路制造技术的飞速发展,可编程逻辑器件在复杂程度及模块功能上也经历着从量变到质变的飞跃。
ü 可编程逻辑器件的发展历程
早期的可编程逻辑器件只有可编程只读存贮器(PROM)、紫外线可擦除只读存贮器(EPROM)和电可擦除只读存贮器(EEPROM)三种。由于结构的限制,它们只能完成简单的数字逻辑功能。
其后,出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与-或”表达式来描述,所以,PLD能以乘积和的形式完成大量的组合逻辑功能。
这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。 PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输出可以通过触发器有选择地被置为寄存状态。 PAL器件是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和EEPROM技术。还有一类结构更为灵活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。 PLA器件既有现场可编程的,也有掩膜可编程的。在PAL的基础上,又发展了一种通用阵列逻辑GAL (Generic Array Logic),如GAL16V8,GAL22V10 等。它采用了EEPROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。这些早期的PLD器件的一个共同特点是可以实现速度特性较好的逻辑功能,但其过于简单的结构也使它们只能实现规模较小的电路。
为了弥补这一缺陷,20世纪80年代中期。 Altera和Xilinx分别推出了类似于PAL结构的扩展型器件CPLD(Complex Programmab1e Logic Device,复杂可编程逻辑器件)和与标准门阵列类似的FPGA(Field Programmable Gate Array,现场可编程门阵列),它们都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。与门阵列等其它ASIC(Application Specific IC,专用集成电路)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。
FPGA 与 CPLD 都是可编程逻辑器件,它们是在PAL,GAL等逻辑器件的基础之上发展起来的。同以往的PAL,GAL等相比较,FPGA/CPLD的规模比较大,它可以替代几十甚至几千块通用IC芯片。这样的FPGA/CPLD实际上就是一个子系统部件。这种芯片受到世界范围内电子工程设计人员的广泛关注和普遍欢迎。经过了十几年的发展,许多公司都开发出了多种可编程逻辑器件。比较典型的就是Xilinx公司的FPGA器件系列和Altera公司的CPLD器件系列,它们开发较早,占有了较大的PLD市场。通常来说,在欧洲用Xilinx的人多,在日本和亚太地区用Altera的人多,在美国则是平分秋色。全球PLD/FPGA产品60%以上是由Altera和Xilinx提供的。可以讲Altera和Xilinx共同决定了PLD技术的发展方向。当然还有许多其它类型器件,如:Lattice,Vantis,Actel,Quicklogic,Lucent等。
u FPGA简介
现场可编程门阵列(FPGA)的出现是超大规模集成电路(VLSI)技术和计算机辅助设计(CAD)技术发展的结果。FPGA器件的集成度高、体积小,具有通过用户编程实现专门应用的功能。它允许电路设计者利用基于计算机的开发平台,经过设计输入、仿真、测试和校验,直接到达到预期的结果。使用FPGA器件可以大大缩短系统的研制周期,减少资金投入。更吸引人的是,采用FPGA器件可将原来的电路板级产品集成为芯片级产品,从而降低了功耗,提高了可靠性,同时还可以很方便地对设计进行在线修改。FPGA器件成为研制开发的理想器件,特别适合于产品的样机开发和小批量生产,因此有时人们也把FPGA称为可编程的ASIC。
u FPGA的基本结构
FPGA 的发展相当迅速,现已形成了各种不同的结构。按逻辑功能块的大小分类,可分为细粒度 FPGA 和粗粒度 FPGA。细粒度 FPGA 的逻辑功能块小,资源可利用度高,但连线和开关多,速度慢;粗粒度 FPGA 的逻辑功能模块大,功能强,但资源不能充分利用。从逻辑功能块的结构上分类,可分为查找表结构、多路开关结构和多级与非门结构。
根据 FPGA 的内部连线的结构不同,可分为分段互连型 FPGA 和连续互连型FPGA 两种。分段互连型 FPGA 中具有多种不同长度的金属线,各金属线段之间通过开关矩阵或反熔丝编程连接,走线灵活方便,但走线延时无法预测;连续互连型 FPGA 是利用相同长度的金属线,连接与距离远近无关,布线延时是固定和可预测的。
根据编程方式,FPGA可分为一次编程型和可重复编程型两类。一次编程型采用反熔丝开关元件,具有体积小、集成度高、互连性特性阻抗低、寄生电容小和高速度的特点,此外还具有加密位、防拷贝、抗辐射、抗干扰、不需外接PROM或EPROM的特点,但只能一次编程,比较适合于定型产品及大批量应用,Actel公司和Quicklogic公司提供此类产品。可重复编程型FPGA采用SRAM开关元件或FLASH控制的开关元件,配置数据存储在SRAM或FLASH中。SRAM型的FPGA的突出优点是可以反复编程,系统上电时,给FPGA加载不同的配置数据就可完成不同的硬件功能,甚至在系统运行中改变配置,实现系统功能的动态重构。FLASH型FPGA具有非易失性和可重复编程的双重优点,但不能动态重构,功耗也较SRAM型高。目前FPGA的主流仍然是Xilinx公司的产品。
FPGA一般有由三种可编程电路和一个用于存放编程数据的SRAM组成,这三种可编程电路是:可编程逻辑模块CLB(Configurable Logic Block)、输入/输出模块IOB(I/O Block)和可编程布线通道(其中包括可编程内部连接点PIP),其基本结构如图2-1所示。CLB是FPGA的主要组成部分,是实现逻辑功能的基本单元。I/O 模块提供了器件引脚和内部逻辑阵列之间的连接,通常排列在芯片的四周。可编程布线通道把各逻辑模块与 I/O 模块互相连接起来,构成各种功能复杂的系统。
图 FPGA的基本结构
3.2软件设计过程
可编程逻辑器件的设计方法及流程
在EDA 出现以前,人们采用传统的硬件电路设计方法来设计数字系统。传统的硬件电路采用自下而上的设计方法。其主要步骤是:根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流程图,对系统的功能进行分化,合理的划分功能模块,并画出系统的功能框图;接着就是进行功能的细化和电路设计;各功能模块电路设计调试完成后,将各功能模块的硬件电路连接起来,再进行系统的调试;最后完成整个系统的硬件电路设计。随着计算机技术、大规模集成电路的技术的发展,这种设计方法已经落后于当今技术的发展。一种崭新的自上而下的设计方法已经兴起,它为硬件电路设计带来一次重大的变革。
20世纪80年代初,在硬件电路设计中开始采用计算机辅助设计技术(CAD),开始仅仅是利用计算机软件来实现印刷板的布线,以后慢慢地才实现了插件板级规模的电子电路的设计和仿真。随着大规模专用集成电路的开发研制,为了提高开发的效益和增加已有开发成果的可继承性,以及缩短开发时间,各种新兴的EDA工具开始出现,特别是硬件描述语言HDL(Hardware Description Language)的出现,使得传统的硬件电路设计方法发生了巨大的变革,新兴的EDA设计方法采用自上而下的设计方法。所谓自上而下的设计方法,就是从系统总体要求出发,自上而下地逐步将设计内容细化,最后完成系统硬件的整体设计。
可编程逻辑器件的设计是指利用EDA开发软件和编程工具对器件进行开发的过程。高密度复杂可编程逻辑器件的设计流程如图2-2所示,它包括设计准备,设计输入,功能仿真,设计处理,时序仿真和器件编程及测试等七个步骤。
u 总体设计
CPU的设计采用模块化的设计思想,可分为3个模块:
1) FPGA数据发送模块、
2) FPGA波特率发生器控制模块
3) 数据接收模块
u CPU的结构和帧格式
CPU主要包括接收器和发送器。从异步接收输入信号SIN接收到的异步信号通过接收器完成串行/并行的转换,形成异步数据帧;发送器将CPU发出的8位数据进行并行/串行转换,从SOUT发送出去。功能包括微处理器接口、TBR(发送缓冲器)、TSR(发送移位寄存器)、帧产生、并转串、RBR(接收缓冲器)、RSR(接收移位寄存器)、帧产生、串转并。
CPU的帧格式包括线路空闲状态(idle,高电平)、起始位(start bit,低电平)、5位~8位数据位(da-ta bits)、校验位(parity bit,可选)和停止位(stop bit,位数可为1、1.5、2位)。这种格式是由起始位和停止位来实现字符的同步。CPU内部一般有配置寄存器,可以配置数据位数(5位~8位)、是否有校验位和校验的类型、停止位的位数(1,1.5,2位)等设置。
u CPU的设计与实现
CPU是广泛使用的串行数据传输协议。CPU允许在串行链路上进行全双工的通信。串行外设使用RS-232-C异步串行接口,一般采用专用集成电路即CPU实现。如8250、8251、NS16450等芯片都是常见的CPU器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时不需要使用完整的CPU的功能和这些辅助功能,或者使用了FPGA/CPLD,那么就可以将所需要的CPU功能集成到FPGA内部。使用VHDL将CPU的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。
下面分别设计CPU的3个模块(发送器、接收器和波特率产生器),并给出其仿真结果。
u 设计流程方法
Quartus II软件功能强大,易于使用的设计流程如下所示:
Ø 预先I/O分配和确认:Quartus II软件采用了预先I/O分配和确认(pdf)技术(甚至在设计模块之前),提高了设计效率,缩短了产品上市的时间,并且非常易于使用。这样在设计的早期阶段,就可以进行印刷电路板(PCB)布局。
Ø Quartus II 集成综合以及对第三方综合的支持:Quartus II软件包括了全面的集成综合方案 (PDF),以及对来自Mentor Graphics、Synopsys和Synplicity的主要第三方综合软件的高级集成。
Ø LogicLock基于模块的设计:Quartus II软件采用LogicLock™ 基于模块的设计流程缩短并简化了设计和验证过程,该流程是构建和集成模块化系统最简单灵活的方法。LogicLock方法非常适合进行团队设计。
Ø 存储器编译器:Quartus II软件用户可以从容易使用的图形用户界面下选择并配置存储器或者从VHDL或Verilog源代码中直接得出存储器。存储器编译器动态生成基于用户参数的存储器结构运行的波形显示,支持“假设”分析。
Ø 脚本支持:Quartus II软件同时支持基于GUI和基于脚本的设计技术。Quartus II软件是第一个来自可编程逻辑器件(PLD)供应商的FPGA和结构化ASIC规划工具,它支持业内标准的工具命令语言(Tcl)脚本界面(PDF)。
Ø 系统设计技术
Altera的Quartus II软件是第一个支持基于知识产权(IP)系统设计的软件,它包括完整、自动的系统定义和实施,不需要底层的硬件描述语言(HDL)或原理图。设计人员可以利用这种特性在几分钟内将他们的构想变成正常运行的系统。Quartus II包括下面列出的系统设计工具:
Ø SOPC Builder:该系统开发工具自动加入参数化并连接IP核,如嵌入式处理器、协处理器、外设存储器和用户定义的逻辑,无需底层的HDL或原理图。
Ø 现成的IP核: Altera和Altera Megafunction合作伙伴计划(AMPPSM)的流行Nios®II嵌入式处理器和参数化IP模块经过了严格的测试和优化,实现Altera®器件的最佳性能构架。
Ø 时序逼近方法
Quartus II 软件采用了业内领先的时序逼近方法,使设计人员能够快速实现设计的时序要求。Altera是第一个开发并实现了全套时序逼近方法的可编程逻辑供应商,该方法集成在其现有工具包中,无需额外费用。
Ø 物理综合:FPGA业内唯一的集成物理综合技术 (PDF),无需用户干预,即可提高设计性能。
Ø 设计空间管理器脚本:设计空间管理器方法 (PDF) 组合Quartus II软件设置,自动寻找最优性能架构,从而提高了性能表现,节省了工程时间。它还支持多个计算机采用不同优化设置而同时运行编译的分布式工作环境。
Ø 时序逼近平面布置编辑器:时序逼近平面布置编辑器方法 (PDF) 提高了平面布置中时序数据的分析能力。
Ø 芯片编辑器:芯片编辑器使得小的、后期布局布线设计更改在几分钟内完成,缩短了验证的时间(而同时支持时序逼近)。
Ø 寄存器传送级(RTL)和工艺映射查看器:RTL查看器 (PDF) 在进一步的仿真、综合和布局布线之前,提供能够用于分析设计结构的设计原理图。这样,在Quartus II中,可以在全面的综合和布局布线之后,查看设计规划映射到Altera器件基元的逻辑图表征以及详细的时序信息。
Ø 验证方案
Quartus II不仅集成了主要的第三方EDA验证工具和方法,还提供以下功能:
1) 高级多时钟时序分析能力:高级多时钟时序分析 (PDF)能力允许用户决定设计中的速率关键和性能受限路径,从而优化关键的时序路径。
2) PowerPlay功率分析和优化技术:采用PowerPlay技术,从设计的概念产生到实施阶段,用户可以准确的分析、优化动态和静态的功耗。
3) 芯片编辑器:芯片编辑器在几分钟内,实现系统内的渐进式设计更改。
4. 结论
通过本次毕业设计让我系统的了解和学习了FPGA及其应用。并在实验室对比较简单组合逻辑电路、时序逻辑电路、基本模块仿真下载到芯片上去;在对I/O连接与设置,可以看到结果。VHDL硬件描述语言是FPGA编程语言之一,我从实际例子入手,对它有了更进一步的认识。能看的懂一般的程序,能写出比较简单的程序,尤其是状态机着一块,了解到它是一个非常好的开发工具。
系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关FPGA与软件平台上的许多细节问题都要靠自己去摸索,再加之本人水平有限,并没有完全地理解它们的强大功能,而且还存在着许多不足之处。如:
1)受到软件的版本更新相当快,有很多软件嵌入在别的软件里面,它们必须得配套。否则有很多模块及某处关键地方有问题。
2)由于时间有限,对FPGA器件种类了解的不多。
通过本次毕业设计我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。让我感触最深的是,我认为做某方面的东西,除了学习它本身外,更重要的是注重方法和培养能力。
u 致谢:
(1)感谢我的我的指导老师,他们严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。
(2)感谢同学们对我的帮助和指点。没有他们的帮助和提供资料对于我一个对网络知识一窍不通的人来说要想在短短的几个月的时间里学习到电子知识并完成毕业论文是几乎不可能的事情。
岁月如流,流走的是时光,流不动的是永存于心底的这份情愫!
u 参考文献
[1] 侯正信 王安国编,数字信号处理基础,北京:电子工业出版社,2004年1月。
[2] 褚振勇 翁木云编,FPGA设计及应用,西安:西安电子科技大学出版社,2003年1月。
[3] 梅开乡编,数字逻辑电路,北京:电子工业出版社,2003年8月。
[4] 谭会生 张昌凡编,EDA技术及应用(第二版),西安:西安电子科技大学出版社,2004年9月。
[5] 潘松 黄继业编,EDA技术实用教程(第二版),北京:科学出版社,2005年4月。
[6] 王振红编,VHDL数字电路设计与应用实践教程,北京:机械工业出版社2003年3月。
[7] 张志涌 徐彦琴编,matlab教程,北京:北京航空航天大学出版社,2005年2月。
[8] 潘松 编,现代DSP技术,西安:西安电子科技大学出版社,2005年9月。