Quartus 简明教程以设计一个简单的LED7段译码器为例介绍使用Quartus设计的全过程。
Step1 :打开quartus,显示窗口如图1所示:ProjectNavigatorMessage Widow图1 quarts启动后的显示界面Step2: 新建工程:Quartus设计都是以工程为单位的,也就是说每一个设计必须包含在某一个工程中。
(1)点击File菜单”New Project Wizard…”菜单项(图2),启动项目向导(图3)。
图2 New Project 选项图3 项目向导第一个窗口在图3中点击Next,出现图4所示的窗口,要求设置项目路径、顶层设计文件的名称。
设计中最好保持project 的名字和顶层文件名相一致,这里我们在project name(第二个编辑框)中输入需要设计的bin27seg(图5)。
点击Next,出现图6所示窗口,在这里可以添加我们已经设计好的文件。
假设我们现在还没有.vhd设计文件,掠过此步,直接点击Next。
项目路径项目名称顶层设计实体名图4 项目基本信息设置图5 项目名称填写图6 添加已有文件图7 第三方eda工具选择Array注意题目图8图9图10图11图12图13 图14图15在bin27seg.vhd 文件中输入代码(代码附后)图16图18图19Bin27seg的rtl级电路图20图21图22 编译全过程图23图设计的另一部分就是验证自己的设计功能是否正确。
这里我们采用激励的方式,给定输入波形,观察输出是否正确。
(注这步也非必须,如果对自己的设计有充足的信心:)不过建议大家稍微大些的设计一定要做仿真)选择File 菜单->new…,在other files 表签页,选择vector waveform file (波形文件),点OK ,如图25所示,将其保存,如图26,注意文件名和要仿真的实体名保持一致波形文件图25图26图27现在要作的是把设计中的输入和输出管脚引进波形文件。
在波形文件窗口的左边栏点击右键,选择insert node or bus ,出现图28点击node finder图28察看filter下拉框中选择pins:all,然后单击list按钮,出现图30所示图29将设计中的管脚引入,即调到右边的框中,可以按ctrl键选择多项,完成之后按OK,返回图31窗口图30将设计中的管脚引入,即调到右边的框中,可以按ctrl键选择多项,完成之后按OK,出现如图32,对应entity中的管脚entity bin27seg isport (data_in : instd_logic_vector (3 downto 0);EN : in std_logic;data_out : out std_logic_vector(6 downto 0));end entity;图31图32图33 图34注意输入激励的设置是随意的,但是决定设计的输出,这样可以根据不同的设计和自己的需要来设置不同的输入激励(波形)图35图36图37特别的,当需要设置时钟时,请使用图标,比如我想让图38图39波形激励设置完成后,可以进行仿真了,选择processing 菜单start simulation 项,启动仿真进程(图39)结果如图40所示。
图40看到波形与自己设计时功能一致,表示设计无误。
到这里,一个设计过程就结束了。
接下来就是下载到芯片了。
这个就先不写了,毕竟自己做的时候不可能下载。
如果需要,可以参看quartus help,特别是tutorial里边的内容,是为初学者准备的。
唯一的遗憾就是全英文的。
另外,在自己做设计的时候需要设定自己的设计到特殊的某个管脚,这时需要用assigment editor, 在assignment 菜单-》assignment editor菜单项。
(图41-45),可以参看help->tutorial这一步应该在analysis & synthesis 之后,fitter之前设定。
如果自己不设定,quartus会自动为你设定引脚。
图46是设定完的引脚在器件的位置,注意,你设计所用的管脚可以定义到任意IO,时钟管脚除外(定义在某一个GCLK端),图47是实际的器件与图46对应图41图42图43图44图45图46图47 PLCC封装的EPM7128(CPLD)图48 xilinx公司的FPGA(圆圈中的那个芯片)CPLD基本原理一.基于乘积项(Product-Term)的PLD结构采用这种结构的PLD芯片有:Altera的MAX7000,MAX3000系列(EEPROM工艺),Xilinx的XC9500系列(Flash工艺)和Lattice,Cypress的大部分产品(EEPROM工艺)我们先看一下这种PLD的总体结构(以MAX7000为例,其他型号的结构与此都非常相似):图1 基于乘积项的PLD内部结构这 种PLD可分为三块结构:宏单元(Marocell),可编程连线(PIA)和I/O控制块。
宏单元是PLD 的基本结构,由它来实现基本的逻辑功能。
图1中兰色部分是多个宏单元的集合(因为宏单元较多,没有一一画出)。
可编程连线负责信号传递,连 接所有的宏单元。
I/O控制块负责输入输出的电气特性控制,比如可以设定集电极开路输出,摆率控制,三态输出等。
图1 左上的INPUT/GCLK1,INPUT/GCLRn,INPUT/OE1,INPUT/OE2 是全局时钟,清零和输出使能信号,这几个信号有专用连线与PLD中每个宏单元相连,信号到每个宏单元的延时相同并且延时最短。
宏单元的具体结构见下图:图2 宏单元结构左 侧是乘积项阵列,实际就是一个与或阵列,每一个交叉点都是一个可编程熔丝,如果导通就是实现“与”逻辑。
后面的乘积项选择矩阵是一个“或”阵列。
两者一起 完成组合逻辑。
图右侧是一个可编程D触发器,它的时钟,清零输入都可以编程选择,可以使用专用的全局清零和全局时钟,也可以使用内部逻辑(乘积项阵列)产 生的时钟和清零。
如果不需要触发器,也可以将此触发器旁路,信号直接输给PIA或输出到I/O脚。
二.乘积项结构PLD的逻辑实现原理下面我们以一个简单的电路为例,具体说明PLD是如何利用以上结构实现逻辑的,电路如下图:图3假设组合逻辑的输出(AND3的输出)为f,则f=(A+B)*C*(!D)=A*C*!D + B*C*!D ( 我们以!D表示D 的“非”)PLD将以下面的方式来实现组合逻辑f:图4A,B,C,D由PLD芯片的管脚输入后进入可编程连线阵列(PIA),在内部会产生A,A反,B,B反,C,C 反,D,D反8个输出。
图中每一个叉表示 相连(可编程熔丝导通),所以得到:f= f1 + f2 = (A*C*!D) + (B*C*!D) 。
这样组合逻辑就实现了。
图3电路中D触发器的实现比较简单,直接利用宏单元中的可编程D触发器来实现。
时钟信号CLK由I/O脚输入后进入芯片内部的全局时钟专用通道,直接连接 到可编程触发器的时钟端。
可编程触发器的输出与I/O脚相连,把结果输出到芯片管脚。
这样PLD就完成了图3所示电路的功能。
(以上这些步骤都是由软件自 动完成的,不需要人为干预)图3的电路是一个很简单的例子,只需要一个宏单元就可以完成。
但对于一个复杂的电路,一个宏单元是不能实现的,这时就需要通过并联扩展项和共享扩展项将多个宏单元相连,宏单元的输出也可以连接到可编程连线阵列,再做为另一个宏单元的输入。
这样PLD就可以实现更复杂逻辑。
这种基于乘积项的PLD基本都是由EEPROM和Flash工艺制造的,一上电就可以工作,无需其他芯片配合。
FPGA 结构与原理初步(zz自)一.查找表(Look-Up-Table)的原理与结构采用这种结构的PLD芯片我们也可以称之为FPGA:如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。
查 找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。
目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。
当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每 输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
下面是一个4输入与门的例子,实际逻辑电路LUT的实现方式a,b,c,d 输入 逻辑输出地址RAM中存储的内容0000 0000000001000010....0 01111111111FPGA的总体结构二.基于查找表(LUT)的FPGA的结构我们看一看xilinx Spartan-II的内部结构,如下图:xilinx Spartan-II 芯片内部结构Slices结构Spartan-II主要包括CLBs,I/O块,RAM块和可编程连线(未表示出)。
在spartan-II中,一个CLB包括2个Slices,每个slices包括两个LUT,两个触发器和相关逻辑。
Slices可以看成是SpartanII实现逻辑的最基本结构 (xilinx其他系列,如SpartanXL,Virtex的结构与此稍有不同,具体请参阅数据手册)altera的FLEX/ACEX等芯片的结构如下图:altera FLEX/ACEX 芯片的内部结构逻辑单元(LE)内部结构FLEX/ACEX 的结构主要包括LAB,I/O块,RAM块(未表示出)和可编程行/列连线。
在FLEX/ACEX 中,一个LAB包括8个逻辑单元(LE),每个LE包括 一个LUT,一个触发器和相关的相关逻辑。
LE是FLEX/ACEX芯片实现逻辑的最基本结构(altera其他系列,如APEX的结构与此基本相同,具 体请参阅数据手册)二.查找表结构的FPGA逻辑实现原理我们还是以这个电路的为例:A, B,C,D由FPGA芯片的管脚输入后进入可编程连线,然后作为地址线连到到LUT,LUT中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的数 据然后输出,这样组合逻辑就实现了。
该电路中D触发器是直接利用LUT后面D触发器来实现。
时钟信号CLK由I/O脚输入后进入芯片内部的时钟专用通道,直接连接到触发器的时钟端。
触发器的 输出与I/O脚相连,把结果输出到芯片管脚。
这样PLD就完成了图3所示电路的功能。
(以上这些步骤都是由软件自动完成的,不需要人为干预)这个电路是一个很简单的例子,只需要一个LUT加上一个触发器就可以完成。
对于一个LUT无法完成的的电路,就需要通过进位逻辑将多个单元相连,这样FPGA就可以实现复杂的逻辑。