fpga第二讲
- 格式:pdf
- 大小:187.35 KB
- 文档页数:21
可编程逻辑器件设计技巧1.什么是.scf?答:SCF文件是MAXPLUSII的仿真文件。
2.在max7000系列中, 只允许有两个输出使能信号, 可在设计中却存在三个, 每次编译时出现“d evice need too many [3/2] output enable signal”. 如果不更换器件(使用的是max7064l c68). 如何解决这个问题?答:这两个独特的输出使能中每个都可能控制大量三相信号. 例如, 可能有16个双向I/O引脚. 每个引脚需要一个输出使能信号。
如果将这些信号一起分组到一个16位总线, 就可以使用一个输出使能控制所有信号, 而不用每个信号一个输出使能。
3.关于vhdl的问题:process(a, b, c) begin… end process; 如果a、b、c同时改变, 该进程是否同时执行三次?答:PROCESS STATEMENTS 中的执行跟逻辑有关系,假如是同步逻辑, 则在每次时钟的触发沿根据A, B, C的条件来执行一次;假如是异步逻辑, 则根据判断A、B、C的条件来执行. 一般我们都推荐使用同步逻辑设计。
4.在设计最初, 由于没有将时钟信号定义在全局时钟引脚上, 导致MAXPLUS II 在时间分析时提示错误:(时钟偏斜加上信号延迟时间超过输入信号建立时间). 全局时钟引脚的时钟信号到各个触发器的延时最小, 有没有可能通过编译软件设置, 将普通I/O脚上的时钟信号也经过芯片内部的快速通道以最小的延迟送到每个触发器时钟引脚?答:可以寄存这个信号, 并将它指定为全局信号,步骤如下:指定—>逻辑选项—>个别逻辑选项—>全局信号. 但是, 最好通过专用输入引脚输入时钟信号。
5.用MaxplusII 软件设计完后, 用Delay Matrix查看延迟时间. 由于内部触发器的时钟信号用了一个输出引脚的信号, 譬如将一引脚ClkOut定义为Buffer, Clkout是一时钟信号, 然后反馈到内部逻辑, 内部逻辑用此信号作为时钟信号, 但用Delay Matrix, 却查看不到一些信号相应于ClkOut的延迟, 因为ClkOut是一Output引脚, 在Delay Matrix source 一栏中没有C lkOut信号, 如何解决这个问题?答:这种做法在逻辑设计中称为GATE CLOCK, 所谓GATE CLOCK就是将设计中的组合逻辑结果拿来做时钟信号,这是一种异步逻辑设计.现在都推荐使用同步逻辑设计方法. 可以将该信号(CLKOUT)拿来作使能信号, 即ENABLE信号, 而时钟信号还是采用原来的统一时钟, 使设计用尽量少的同步时钟, 这样一来就还是用D ELAY MATRIX来分析原有的时钟。
第2章FPGA设计基础2.1 Verilog HDL基础知识2.1.1概述硬件描述语言HDL(Hardware Description Language )是一种用形式化方法来描述数字电路和数字逻辑系统的硬件描述语言,有两种类型:VHDL和Verilog HDL。
举个例子,在传统的设计方法中,对2输入的与门,我们可能需要到标准器件库中调出一个74系列的器件,但在硬件描述语言中,“& ”就是一个与门的形式描述,“C = A & B”就是一个2输入与门的描述,而“and”就是一个与门器件。
Verilog HDL 语言具有这样的描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言,可综合的Verilog模块可以构成一个可靠的复杂IP软核和固核模块。
Verilog HDL 语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog 仿真器进行验证。
Verilog HDL语言从C 编程语言中继承了多种操作符和结构。
Verilog HDL 模型可以是实际电路的不同级别的抽象,主要指:(1)系统级(2)算法级(3)RTL 级(4)门级(5)开关级,前三种属于行为级描述。
VHDL侧重于系统级描述,从而更多的为系统级设计人员所采用;Verilog 侧重于电路级描述,从而更多的为电路级设计人员所采用。
Verilog非常容易掌握,只需有C语言编程基础,就可很快上手。
2.1.2 Verilog 与C语言的比较虽然Verilog语言是从C语言过渡而来的,其某些语法与C语言接近,但存在如下几方面的本质区别:1.Verilog是一种硬件语言,最终是为了产生实际的硬件电路或对硬件电路进行仿真;C语言是一种软件语言,是控制硬件来实现某些功能;2.C语言只要是语法正确,都是可以编译执行的;而Verilog语言有可综合的限制,即在所有的verilog语句中,只有一部分可以被综合,而另外的部分则不能被综合,只能用来仿真;3.C语言是一种软件编程语言,其基本思想是语句的循序执行,而Verilog语言的基本思想是模块的并行执行;4. 利用Verilog编程时,要时刻记得Verilog是硬件语言,要时刻将Verilog与硬件电路对应起来。
fpga 第二段状态机用时序逻辑(实用版)目录1.FPGA 器件的仿真验证和设计约束2.时序分析在 FPGA 设计中的重要性3.状态机设计技巧在 FPGA 中的应用正文FPGA(现场可编程门阵列)是一种半导体集成电路,用于实现数字逻辑功能。
在 FPGA 设计中,仿真验证和设计约束与时序分析是非常重要的环节。
通过对硬件系统进行功能及时序验证,可以确保设计项目的成功与否。
通常,硬件系统的仿真分为功能仿真和时序仿真,或称为前仿真和后仿真。
在 FPGA/CPLD 设计中,常用的仿真软件包括 Mentor 公司的ModelSim、Adec 公司的 Active-HDL、Cadence 公司的 NC-VEOG 和NCWHDL、Synopsys 公司的 VCS/S 等。
时序分析在 FPGA 设计中占据了重要地位。
时序分析的主要目的是评估设计方案的时序性能,以确保系统能够按照预期的速度稳定运行。
通过时序分析,可以检测到可能的时序问题,例如建立时间、保持时间等方面的问题。
在 FPGA 设计中,通过合理的时序约束和时序分析,可以有效地降低设计风险,提高系统的可靠性和稳定性。
状态机是数字电路设计中一种重要的概念。
状态机分为 Mealy 型和Moore 型,用于描述数字电路的有限状态。
在 FPGA 设计中,状态机可以用 Verilog HDL 等语言进行描述。
状态机的设计技巧包括如何合理地划分状态、如何选择合适的状态机类型以及如何进行状态机的时序逻辑设计等。
通过运用状态机设计技巧,可以简化 FPGA 设计,提高系统的可读性和可维护性。
总之,FPGA 器件的仿真验证和设计约束与时序分析及状态机设计技巧在 FPGA 设计中发挥着重要作用。
现在开始FPGA的第二讲:本讲内容:一、可编程逻辑器件基本原理与结构,第二、硬件描述语言简介一、可编程逻辑器件基本原理与结构:可编程逻辑器件基本原理与结构,在第一章第一讲介绍的基础上,我们再略为对基本的、简单的可编程逻辑器件做一个描述,我们重点分析CPLD和FPGA。
可编程技术发展历程:在第一讲我们讲到了,从70年代80年代90年代器件是怎么一步步发展起来的。
那么在这个基础上我们再看一下,在70年代以存储器为主的出现的可编程逻辑器件就是PROM,我们注意PROM实际上也可以实现逻辑功能的,只是在大规模的PROM器件下,利用率不是很高。
然后出现了可编程的处理单元,就是CPU,80年代。
我们说一个电子系统尤其是数字电子系统有三部分组成的,一个是CPU,CPU包括:单片机、DSP处理器或者是微处理器,这些处理器的指令和数据,就必须有存储器,存储器也是可编程的,但是另外一部分是电子系统的控制逻辑,或者我们说相应的粘附逻辑Logic,到90年代之前,这些粘附逻辑用的器件都是中小规模的器件,并不是可变成编程的,到了80年代后期和90年代初,出现了可编程逻辑器件以后,这样粘附逻辑也可以实现可编程,所以这个时候电子系统的三部分:CPU、存储器和逻辑,都是可编程的,这样的话对数字系统设计带来很大的方便,但是这三部分可能没有作到一个芯片上,随着半导体工艺的进一步,线宽的进一步缩小,逐步把存储器作到逻辑芯片里头,慢慢的把CPU微处理器集成到芯片里头,就可以按照系统级的要求来设计芯片,出现了片上系统,这样一些片上系统,如果用可编程逻辑器件来实现就是可编程的片上系统或者叫做SOPC,或者叫做CSOC。
什么是可编程系统?那么从上面一个图,从存储器到CPU到逻辑电路再到一个系统,这样一个可编程技术的发展历程,我们现在来看一下,什么是可编程系统?刚才说了构成电子系统尤其是数字电子系统的三个部分是CPU、存储器和控制逻辑,在他们都是可以编程的情况下,系统可以很方便的更新、修改或者在现场装修,达到的缩短产品样品的开发周期,产品的上市时间和节约成本,这样的一个系统是可编程的系统,如果还能把这三个部分集成到一个芯片内,那么就是可编程的片上系统,或者叫做SOPC或者叫CSOC。
6、PROM第6页这就是我们第一章看到的PROM的结构,我们说PROM是与阵列固定,或阵列可编程,这个图也可以说明PROM除了存储一些程序以外,也可以实现相应的逻辑。
7、PLAPLA可编程逻辑阵列,第一章我们也指出了,可变成逻辑阵列是与阵列和或阵列两者都可编程的,那么在确定了你的与、或阵列的逻辑关系以后,我们可以把多出来的阵列部分可以节省下来,所以在半导体工艺里头,如果用PLA来实现的话就可以节省面积和资源。
8、PALPAL器件是与阵列可编程或阵列固定,那么在实现逻辑阵列里头,PAL是用的最多的,PAL器件是一次性编程的,所以发展又出现了可以有输出可编程的多次使用的GAL器件。
9、PROM/PLA/PAL比较这里呢我们把PROM、FPLA、PAL和GAL再列一个表说明一下,从阵列结构上来说,这四种器件都是由与阵列或阵列构成的,但是PROM是与阵列固定,或阵列可编程。
PLA这里叫做FPLA,现场的可编程逻辑阵列,是与阵列或阵列都是可编程的,PAL可编程阵列逻辑,那么与阵列可编程,或阵列固定。
GAL和PAL 是相同的,就是将来的输出是可以反复编程的,这四种器件PROM、FPLA、PAL 和GAL。
我们说它是小规模的、简单的可编程逻辑器件,也就是我们第一章所说的简单PLD,或者说SPLD.10、CPLD 复杂PLD器件,复杂可编程逻辑器件,那么这个图表示了复杂可编程逻辑器件的结构,这个图上的FB(Function Block)就是功能块,一个功能块就相当于简单的CPLD当中的一个PAL器件,比如说22微时,这个图表明CPLD.11、这里我们举个CPLD的例子,从这个例子我们可以看出,除了可编程阵列以外,还会有功能块和触发器电路来构成我的这个功能块,这个图实际上包含三个与门、或门再到易或门的宏单元再加上触发器,那么是不是使用触发器将来可以用多路开关来控制。
12、CPLD实现一位全加器 CPLD怎么样实现逻辑功能的话,我们举一个CPLD的例子13、FPGA:现场可编程门阵列FPGA,FPGA从它提出这样的概念和推出这样的产品的时候,要求它必须有三种可编程的资源,就像这个图上给出来的,那么这个中间的更加表示了器件内部的结构,就是说一般的可编程逻辑器件,因为现在国际上都是把FPGA和CPLD都叫做可编程逻辑器件,只是结构上不同,我们一个叫做复杂PLD,一个叫做FPGA,FPGA和实际上都是四周是IO,中间是相应的逻辑电路,FPGA的中间的电路像阵列一样的纵横排列的,有行有列的排列的逻辑单元,中间实际上就是为连接的互连的资源。
按照这种的结构,实际上必须具备三种可编程的资源,这三种可编程的资源是,I/O是可编程的,用户可以设置引腿是输入还是输出,是什么电平,是CMOS电平还是TTL电平,可以决定我是有没有上拉或者是信号激变的情况,或者是速率的快慢等等,这是一个资源,可编程资源,IO就是用户可编程的。
第二个逻辑是可编程的,也就是说它中间的排成行和列的这些逻辑单元是可编程的,可以实现我们在第一讲的组合逻辑电路和时序逻辑电路,也就是说在这个逻辑块里头有实现组合逻辑的块和集成的元件触发器,下面我们讲到这样的东西怎么样构成可编程逻辑单元,这是第二个可编程的逻辑资源,也就是说逻辑是可编程的,那么包括了组合的逻辑和触发器的时序电路;第三个可编程的资源,是可编程的互连线资源,在贯穿了行和列的逻辑块之间,分布了很多的互连线,这些互连线是可编程的,你用哪些用什么方式来把各种的功能连接起来完成我所要做的设计,那么具有这三种可编程资源以后呢,就构成了FPGA。
我们又根据FPGA的逻辑实现的方式和它可编程的方式分为两类,一类它的逻辑是用查找表来实现的,编程是通过SRAM方式来实现的,把这个类叫做SRAM查找表结构,还有一类逻辑是通过多路开关来实现的,编程是通过熔丝的通断来实现的,我们称它为多路开关反熔丝结构,或者说是反熔丝的多路开关结构。
下面我们针对这两类,一类是SRAM查找表结构,一类是反熔丝的多路开关结构,来介绍一个FPGA的结构和原理。
14、SRAM查找表结构—Altera:这个呢是SRAM查找表结构中的代表之一Altera的逻辑单元的图,大家可以看出有一个查找表实现的逻辑单元,这个逻辑单元中间的部分有四个输入,后面有一个触发器,中间还会有一些进位的逻辑和逻辑的扩展的能力,这个在早期没有,在后面的发展把这个加进去了,这个是SRAM查找表结构之一Altera的逻辑单元。
15、SRAM查找表结构—Xilinx逻辑单元SRAM的查找表的另外一个代表,是Xilinx逻辑单元,这个逻辑单元也是查找表的,两个逻辑单元构成了一个逻辑片,叫Slice,这个图我们也可以看出来,上下也两个输入的查找表,每个都配有一个触发器,这是SRAM查找表的结构另外的一个代表Xilinx。
SRAM查找表结构—Lattice:第16页就是第三个SRAM查找表结构的代表,Lattice的FPGA,它的逻辑的单元也是这样,像这个图上给出来的,它的逻辑单元一个查找表可以是五个输入,但是它可以分成两个四输入,也就是说它一个逻辑单元有两个输出,输入是五个,输出是两个,那么可以分成两个四输入,分别产生输出,所以我们也说它是四输入的逻辑单元,后面有四个触发器来构成,所以我们列出来了目前的FPGA市场上有代表性的三款SRAM查找表的结构一个是Altera,一个是Xilinx,另外一个是Lattice。
17、实现一位全加器下面我们来看一下查找表的一个结构,怎么样实现逻辑功能,我们同样以实现一位全加器进行说明,在这里我们把一位全加器的真值表列出来的,三个输入信号A0、B0和进位出CI,要产生了输出S0和C0,那么按照和信号的输出是三个输入信号A0、B0、C0异或的结果,我们可以列出它的真值表,也就是说A0、B0两两相异或的时候呢,只是两个输入信号不同的时候得1,相同的时候得0,那么再跟CA异或的时候呢,不同的时候得1,相同的时候得0。
这样我们就得到它的输出为0110,那么下半部分同样异或的结果跟11与的时候呢,01就得1,11就得0,所以下半部分1001。
这三个信号异或的结果的真值表,三个信号两两相与相加相或的结果,我们可以列出C0的进位出的真值表,比如说A0和B0的相与是0,A0和CA相与是0,或起来还是0,那么或的话,要求三个信号与出来都为1的时候才能得1,A和B,A0B0相与得1,其他两个呢,1跟0与是0,有一个1或起来会得1,只要两两相与里面有一个为1,那么输出就为1这个是真值表。
那么查找表的结构实际上把真值表存在一个存储器里头,查找表就相当于一个存储器,这个存储器SRAM来做的。
这个时候查找表的输入信号就变成查找表的地址,根据你输入信号的数值决定在查找表什么地址把它的真值取出来,就得到了我要的输出。
所以在查找表里,输入信号是查找表的地址,根据输入的信号数字的实现它的逻辑功能,一般这个查找表16×1的存储器,这个图给出来了,一位全加器的实现的逻辑功能查找表来实现的。
对于器件来说,只是一个存储器存取的时间,实现复杂的逻辑功能比真正的逻辑器件因为花费的存储时间,查找表怎么实现逻辑功能的,实际上把输入的信号作为查找表的地址存储相应的数字来实现相应的逻辑功能,不管逻辑功能多少的复杂,只化费一个存储器存取时间来提高运行的速度。
SRAM查找表FPGA-Altera:第18页给出了SRAM查找表的结构的FPGA Altera的一个结构图,那么这个结构图,只是列出来了左上角四周是IO,中间是逻辑块,间隔中间是一个连线,那么它的逻辑块构成逻辑阵列扩充构成逻辑功能这是第18页。
SRAM查找表FPGA-Xilinx:19、SRAM查找表结构的FPGA Xilinx的一个结构图,也是取的它的左上角,左边上边是它的IO块,可编程的IO资源,那么中间的排成两列,就是可编程的逻辑资源,那么这里或用横断出来这部分叫做配置存储器,这种SRAM查找表的结构,刚才我们说的SRAM是配置的方式是通过SRAM来定,也就是说器件怎么工作,是通过配置的存储器SRAM来作的,来决定器件的什么东西怎么连接起来的,实现什么功能,完成它的逻辑功能。
所以这里强调一下,SRAM查找表的FPGA,SRAM我们在分类上说它是编程的方式用的SRAM存储器,但实际上这个图上可编程的逻辑单元查找表也是用SRAM来做的,所以这个SRAM应该有双重的含义,既可以说它是查找表的实现方式,本意是SRAM是配置也是用SRAM,所以不要忘了,SRAM不只是说我形容了查找表是SRAM,更主要的是配置的存储器也是SRAM做的,那么正是由于FPGA的存储器是用SRAM来做的,所以它是掉电丢失的,也就是说这样的FPGA一断电,器件把它的功能丢失了,不知道作什么,而一上电的时候呢需要对它进行配置,下面我们谈到怎么样的配置,也正是因为SRAM的配置方式,所以它是可以反复的编程的,是它真正的具备了可编程的功能,这种的可编程功能包括:动态的可编程,在线的可编程,使它具有灵活的,也正是因为这一点才能实现,原理和结构,进行了说明,那么上面就是SRAM的查找表的结果进行了说明,下面我们看一下另外一类结构:反熔丝的多路开关型的FPGA。