大唐电信FPGA-CPLD数字电路设计经验分享(1)
- 格式:pdf
- 大小:195.39 KB
- 文档页数:4
FPGA/CPLD数字电路设计经验分享摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。
关键词:FPGA 数字电路时序时延路径建立时间保持时间1 数字电路设计中的几个基本概念:1.1 建立时间和保持时间:最小建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
如图1 。
数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。
PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间(如图2)图1 建立时间和保持时间关系图注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。
在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。
建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。
保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。
因此合理的设计系统的时序是提高设计质量的关键。
在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。
1.2 FPGA中的竞争和冒险现象信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。
FPGA与CPLD课程心得159030004 杨文忠QuartusII软件的使用在本科学数电的时候有接触过,当时学的很简单,用的是Verilog,跟之前学过的C++还是有不少共通之处的。
写简单的模块参照书上的例子基本都没什么问题,只是要做一个系统性的东西的时候就有点没有头绪了。
例如这次的电子钟,主程序要怎么分别调用子模块,以及模块与模块之间的连接要如何实现,对于之前没有做过完整工程的我来说都是很大的问题。
刚开始想到的是本科学过的一点简单的单片机知识,当时单片机也是让做的数字钟。
像系统时钟的分频问题,单片机由于位数的限制是需经过多次分频的,而FPGA分频可以实现一次到位。
还有就是按键功能的实现以及状态机的设计,之前都没有什么明确清晰的思路,通过看同学的程序,与这方面比较厉害的同学交流学习,使我对整个设计有了更清晰的认识。
关于引脚锁定的问题,以前没做过具体某一款芯片的实验,都不知道引脚锁定是怎么完成的,通过向同学请教才知道有相应的.tcl文件可以帮助寻找到相应的引脚,特别是对于大型的系统性实验,挨个锁引脚就会变得很繁琐,可以通过修改.tcl文件里的端口名,使其与自己程序里定义的端口名保持一致,然后删除不需要的端口及引脚,保存并运行.tcl文件,可以实现自动锁引脚。
最后总结起来就是得多做,多想,多问。
书读千遍,不如做一遍;看别人做百次,不如自己做一次;就是要实践。
只有通过不断实践,才能发现自己的缺点和不足,才能不断地进步。
在做的过程中要多想,多想想问题出现的原因,问题解决后要多问几个为什么,这也是经验积累的过程,最好要记笔记,把问题及原因、解决的办法都写进去。
还要多问,遇到问题经历了痛苦的思索后还得不到解决就要问了,问搜索引擎,问网友,问同学问老师,一篇文章、朋友们的点拨都可能帮助自己快速解决问题。
FPGA\CPLD设计学习笔记题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD 来的,首先对整理者表示感谢。
这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一个有志于FPGA/CPLD方面发展的工程师学习的。
1、硬件设计基本原则(1)、速度与面积平衡和互换原则:一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。
从而实现了用面积复制换取速度的提高。
(2)、硬件原则:理解HDL本质(3)、系统原则:整体把握(4)、同步设计原则:设计时序稳定的基本原则2、Verilog作为一种HDL语言,对系统行为的建模方式是分层次的。
比较重要的层次有系统级(system)、算法级(Algorithm)、寄存器传输级(RTL)、逻辑级(Logic)、门级(Gate)、电路开关级(Switch)。
3、实际工作中,除了描述仿真测试激励(Testbench)时使用for循环语句外,极少在RTL级编码中使用for循环,这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。
一般常用case语句代替。
4、if…else…和case在嵌套描述时是有很大区别的,if…else…是有优先级的,一般来说,第一个if的优先级最高,最后一个else的优先级最低。
而case语句是平行语句,它是没有优先级的,而建立优先级结构需要耗费大量的逻辑资源,所以能用case的地方就不要用if…else…语句。
补充:1.也可以用if…; if…; if…;描述不带优先级的“平行”语句。
所谓综合,就是把描述语言转化成能硬件实现的电路,学verilog的时候,没有人给我说要不要考虑能否综合的问题~~~看了5本书,居然没有一本书讲到能否综合,所以设计出来的程序完全不能用~~~而且,书中都是讲语句的具体使用办法,例如always @(),但是什么时候用always,几个always之间、时序电路、逻辑电路、任务与函数什么时候用,却没有一本书能讲清楚。
这个笔记详细写了这些思路的问题,分享给新手看看,学习一种思路~~先记下来:1、不使用初始化语句;2、不使用延时语句;3、不使用循环次数不确定的语句,如:forever,while等;4、尽量采用同步方式设计电路;5、尽量采用行为语句完成设计;6、always过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;7、所有的内部寄存器都应该可以被复位;8、用户自定义原件(UDP元件)是不能被综合的。
一:基本Verilog中的变量有线网类型和寄存器类型。
线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器,还有可能被优化掉。
二:verilog语句结构到门级的映射1、连续性赋值:assign连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。
因此连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。
Assign语句中的延时综合时都将忽视。
2、过程性赋值:过程性赋值只出现在always语句中。
阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。
建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。
过程性赋值的赋值对象有可能综合成wire, latch,和flip-flop,取决于具体状况。
如,时钟控制下的非阻塞赋值综合成flip-flop。
过程性赋值语句中的任何延时在综合时都将忽略。
建议同一个变量单一地使用阻塞或者非阻塞赋值。
3、逻辑操作符:逻辑操作符对应于硬件中已有的逻辑门,一些操作符不能被综合:===、!==。
四种常用FPGA/CPLD设计思想与技巧本文讨论的四种常用F PGA/CPLD设计思想与技巧:乒乓操作、串并转换、流水线操作、数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作种取得事半功倍的效果。
FPGA/CPLD的设计思想与技巧是一个非常大的话题,由于篇幅所限,本文仅介绍一些常用的设计思想与技巧,包括乒乓球操作、串并转换、流水线操作和数据接口的同步方法。
希望本文能引起工程师们的注意,如果能有意识地利用这些原则指导日后的设计工作,将取得事半功倍的效果!乒乓操作“乒乓操作”是一个常常应用于数据流控制的处理技巧,典型的乒乓操作方法如图1所示。
乒乓操作的处理流程为:输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。
在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输入数据选择单元”的选择,送到“数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2个周期的数据通过“输入数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。
如此循环。
乒乓操作的最大特点是通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与处理。
把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。
所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。
CPLDFPGA原理及应用首先,我们来了解CPLD和FPGA的原理。
CPLD是一种具有可编程逻辑单元和可编程互连资源的器件。
它的核心部分是由可编程逻辑门组成的逻辑单元,可以实现各种逻辑功能。
CPLD还具有非易失性存储器(EEPROM),用于存储逻辑功能的配置信息。
在使用过程中,我们可以通过编程软件将特定的逻辑功能配置到CPLD中,使其按照我们的需要工作。
FPGA是一种更加灵活、可定制度更高的可编程逻辑器件。
与CPLD相比,FPGA的逻辑资源和互连资源更加丰富。
FPGA的核心部分是由多个可编程逻辑单元(Look-Up Tables,简称LUTs)和可编程互连资源(Interconnects)组成的。
LUT是FPGA中的基本逻辑单元,它可以根据输入信号的不同进行配置,实现特定的逻辑功能。
而互连资源可以将不同的逻辑单元之间互连起来,形成更复杂的电路。
接下来,我们来讨论CPLD和FPGA的应用。
由于CPLD和FPGA具有灵活、可定制性强的特点,它们在各种电子设备中都有广泛的应用。
首先,在数字系统设计中,CPLD和FPGA可以用于实现各种逻辑功能。
例如,在数字信号处理(DSP)系统中,CPLD和FPGA可以实现滤波器、乘法器等复杂的数字运算。
在通信系统中,它们可以用于实现调制解调器、协议解析器等功能。
其次,在嵌入式系统中,CPLD和FPGA可以用于控制和接口的设计。
它们可以充当硬件逻辑控制器,实现系统中各个模块的协同工作。
同时,CPLD和FPGA还可以提供各种接口,方便与外部设备进行通信。
此外,CPLD和FPGA还在测试和测量领域得到了广泛的应用。
由于CPLD和FPGA可以灵活地实现各种逻辑功能,它们可以用于设计测试仪器和测试电路,快速准确地获取电路的各种参数。
最后,在教育和研究中,CPLD和FPGA也扮演着重要的角色。
它们可以帮助学生更好地理解数字逻辑和数字系统设计的原理。
同时,研究人员也可以利用CPLD和FPGA进行各种新算法和新理论的验证。
2.6 FPGA/CPLD 中的时钟设计无沦是用离散逻辑、可编程逻辑,还是用全定制硅器件实现的任何数字设计,为了成功地操作,可靠的时钟是非常关键的。
设计不良的时钟在极限的温度、电压或制造工艺的偏差情况下将导致错误的行为,并且调试困难、花销很大。
在设计FPGA/CPLD 时通常采用几种时钟类型。
时钟可分为如下四种类型:全局时钟、门控时钟、多级逻辑时钟和波动式时钟。
多时钟系统能够包括上述四种时钟类型的任意组合。
无论采用何种方式,电路中真实的时钟树也无法达到假定的理想时钟,因此我们必须依据理想时钟,建立一个实际工作时钟模型来分析电路,这样才可以使得电路的实际工作效果和预期的一样。
在实际的时钟模型中,我们要考虑时钟树传播中的偏斜、跳变和绝对垂直的偏差以及其它一些不确定因素。
对于寄存器而言,当时钟工作沿到来时它的数据端应该已经稳定,这样才能保证时钟工作沿采样到数据的正确性,这段数据的预备时间我们称之为建立时间(setup time )。
数据同样应该在时钟工作沿过去后保持一段时间,这段时间称为保持时间(hold time )。
因此具体的时钟如图5所示。
其中网络延迟是指时钟的传播延时以及因为跳变不垂直等效的偏差,在此基础上考虑一些不确定因素实际的工作时钟沿如图中所示。
保持时间(hold )和建立时间(setup )都是相对于实际时钟跳变而言的。
因此在确定电路时序时,必须要考虑到这些因素,使得建立时间和保持时间符合要求。
网络为了使电路正常工作,建立时间和保持时间应该分别满足:min_log min __ic Q clock skew hold t t t t +<+skewsetup ic Q clock clock t t t t t +++>max _log max __其中t clock _Q _max 是时钟沿变化到数据输出端变化的最慢变化情况,t logic _max 是寄存器间组合逻辑的最大可能延迟,t clock _Q _min 和t logic _min 表示最快情况。
FPGA与CPLD设计流程FPGA(Field-Programmable Gate Array)和CPLD(Complex Programmable Logic Device)是现代数字电路设计中常用的可编程逻辑器件。
它们具有配置灵活、可重构的特点,使得数字电路的设计和开发更加高效和便捷。
本文将介绍FPGA与CPLD的设计流程,并探讨在设计过程中需要注意的一些关键要点。
一、设计前准备在进行FPGA与CPLD设计之前,我们首先需要明确设计的目标和需求,包括功能需求、性能需求和接口需求等。
同时,根据设计的规模和复杂性,确定所需的FPGA或CPLD器件型号,以及需要采用的开发工具和设计语言。
二、设计框架搭建在设计框架搭建阶段,我们需要创建一个新的工程,并选择适当的开发平台和工具。
根据设计需求,将逻辑功能进行划分,确定模块间的接口和数据交互方式。
同时,选择合适的开发语言,如Verilog或VHDL,开始进行设计代码的编写。
三、模块设计与验证在模块设计与验证阶段,我们需要将整个设计划分为多个模块,并逐个进行设计和验证。
每个模块都应该具备独立的功能,并能够与其他模块进行正确的数据交互。
设计人员可以使用仿真工具对每个模块进行功能验证,并通过调试和测试来保证模块的正确性。
四、综合与优化在综合与优化阶段,我们需要使用合成工具将设计代码转换为逻辑网表。
综合工具会将设计代码翻译成与目标FPGA或CPLD器件兼容的逻辑门级表示,并进行优化以提高设计的性能和面积效率。
在这个阶段,设计人员还需根据目标平台的资源限制进行约束设置,以确保设计在合理的范围内。
五、布局布线与时序分析在布局布线与时序分析阶段,我们需要将逻辑网表映射到目标FPGA或CPLD器件的物理资源上,并进行物理布局和布线。
同时,进行时序分析来保证设计在时钟频率和时序要求下能够正常工作。
此外,设计人员还需要注意信号的噪声抑制和时钟域的管理,以确保设计的可靠性和稳定性。
大唐电信FPGA/CPLD数字电路设计经验分享(1)
在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。
1 数字电路设计中的几个基本概念:
1.1 建立时间和保持时间:
建立时间(setup TIme)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold TIme)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。
如图1 。
数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。
PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间(如图2)
图1 建立时间和保持时间关系图。