FPGA设计原则以及代码规范-精选文档
FPGA设计的指导原则

FPGA设计的指导原则/***********************************************************************/欢迎转载!特约作者westor原创,广大斑竹期待和您深入交流!欢迎转载,请尊重作者劳动,保留作者和网站信息!/************************************************************************/整理者:Channel Elle(带着蜗牛散步)。
科技创造未来。
/************************************************************************/ 第一章FPGA设计指导性原则这一部分主要介绍FPGA/CPLD设计的指导性原则,如FPGA设计的基本原则、基本设计思想、基本操作技巧、常用模块等。
FPGA/CPLD设计的基本原则、思想、技巧和常用模块是一个非常大的问题,在此不可能面面俱到,只能我们公司项目中常用的一些设计原则与方法提纲携领地加以介绍,希望引起同事们的注意,如果大家能有意识的用这些原则方法指导日后的工作,不断积累和充实自己,将取得事半功倍的效果!本章主要内容如下:·基本原则之一:面积和速度的平衡与互换;·基本原则之二:硬件原则;·基本原则之三:系统原则;·基本原则之四:同步设计原则;·基本设计思想与技巧之一:乒乓操作;·基本设计思想与技巧之二:串并转换;·基本设计思想与技巧之三:流水线操作;·基本设计思想与技巧之四:数据接口的同步方法;·常用模块之一:RAM;·常用模块之二:FIFO;·常用模块之三:全局时钟资源与时钟锁相环;·常用模块之四:全局复位、置位信号。
1.1基本原则之一:面积和速度的平衡与互换这里“面积”指一个设计消耗FPGA/CPLD的逻辑资源的数量,对于FPGA可以用所消耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等价逻辑门数。
fpga知识汇集-编写可综合代码(rtl)需要注意的规则总结

fpga知识汇集-编写可综合代码(rtl)需要注意的规则总结编写可综合代码(RTL)是 FPGA 设计过程中的关键一步。
以下是一些需要注意的规则总结:1. 时钟和时序:在 RTL 设计中,时钟和时序是至关重要的。
确保所有触发器(寄存器)都连接到正确的时钟域,并遵循同步设计原则。
同时,确保时序满足目标平台的要求,以避免时序违规。
2. 信号命名:给变量和信号起有意义的名称,能够准确描述其功能和用途。
使用清晰、简洁的命名规范,以提高代码的可读性和维护性。
3. 可综合的语言特性:在编写 RTL 代码时,只使用可综合的语言特性。
这意味着避免使用仅在仿真环境下有效的语言特性或语法。
4. 避免复杂的逻辑:尽量保持代码简洁明了,避免使用过于复杂的逻辑。
使用层次化设计和模块化思想,将复杂的逻辑划分为相对独立的子模块,提高代码的可读性和可维护性。
5. 注释和文档:为代码添加详细的注释和文档,以解释代码实现的意图、功能和设计决策。
这有助于团队成员之间的共享和合作,并提供未来维护和修改代码的指导。
6. 避免设计异构:FPGA 设计中,使用不同类型、大小和速度的逻辑单元可能会导致布局和时序问题。
尽量避免设计异构,即使用相同类型和规格的逻辑单元。
7. 避免不确定行为:在 RTL 代码中,避免使用带有不确定行为的语言特性或操作符。
确保代码在所有情况下都能正确工作,并且不会产生意外的结果。
8. 编写可综合测试台:编写可综合的测试台,对 RTL 代码进行全面测试。
验证代码的正确性,并确保代码在不同环境和情况下都能正常运行。
9. 可重用性:设计代码时考虑到可重用性,使其可以在不同的项目和场景中复用。
将通用的功能和模块抽象出来,以便在需要时能够方便地重用。
10. 性能和资源优化:在编写 RTL 代码时,考虑到目标平台的资源和性能要求。
优化代码以减少资源占用和功耗,并提高系统的性能。
以上是编写可综合代码(RTL)需要注意的一些规则总结。
FPGA设计基础第3章FPGA设计入门

FPGA设计基础第3章FPGA设计入门FPGA(现场可编程门阵列)是一种可改变内部逻辑功能的集成电路。
通过在芯片上编程,FPGA可以实现各种不同的功能。
在本章中,我们将介绍FPGA设计的基础知识,包括FPGA的工作原理、FPGA设计流程以及一些常用的FPGA设计工具。
首先,我们来了解一下FPGA的工作原理。
FPGA由一系列可编程的逻辑门和存储单元组成。
这些逻辑门可以被编程为实现各种不同的逻辑功能,而存储单元可以被编程为存储数据。
通过在FPGA上编程,我们可以定义逻辑功能和数据的处理方式,从而实现各种不同的电路设计。
接下来,我们将介绍FPGA设计的基本流程。
FPGA设计通常包括以下几个步骤:1.设计规范:在开始设计之前,我们需要明确设计的目标和要求。
这包括确定所需的逻辑功能、输入输出接口以及其他相关的系统要求。
2. 设计输入:在开始设计之前,我们需要编写设计的输入文件。
这些文件描述了设计的逻辑功能、数据处理方式以及其他相关的设计参数。
常用的设计输入文件包括VHDL(VHSIC Hardware Description Language)和Verilog。
3.综合:综合是将设计输入文件转换为可实现的逻辑电路的过程。
综合工具将设计输入文件转换为逻辑门级的电路描述。
在综合之前,我们需要选择合适的综合工具,并进行一些必要的设置。
4.布局布线:布局布线是将逻辑电路映射到FPGA芯片上的过程。
布局布线工具会根据FPGA的物理结构和设计的要求,自动将逻辑电路映射到FPGA芯片的不同位置,并进行网线的布线。
综合工具是将设计输入文件转换为逻辑电路的软件工具。
常用的综合工具包括Xilinx的ISE和Vivado,以及Altera的Quartus。
布局布线工具是将逻辑电路映射到FPGA芯片上的软件工具。
常用的布局布线工具包括Xilinx的PAR和Altera的Fitter。
FPGA逻辑设计基础

满足时序更为重要,两者冲突时速度优先
RTL编码风格
我没有了个性?! 这又不影响功能!
对个人而言,或许如此。但对于需要协作 的团队而言,编码风格的不统一,存在诸 多缺点。
RTL编码风格
对于一个团队来讲,编码风格的不统一 造成代码难以阅读,又不好维护,甚至 对于你自己,程序的作者亦是如此。你 或许思维敏捷、聪明伶俐,然而你编写 的代码令你的才干与造诣黯然失色。
思考一下:
传播延时对定时裕度有什么影响?
数字电路中的几个基本概念 - 时钟偏移 (1)
I A Ta Clock Tb O 组合逻辑 I B O
时钟偏移(clock skew)指的是时钟信号在各个负载路径上 的延时差。 以上图为例:假设时钟信号到达器件A 的最大延 时为 T a ,时钟信号到达器件B的最大延时为Tb,那么该时钟信 号的时滞即为Ta-T b。
FPGA逻辑设计基础
目录
● ● ● ● ●
FPGA 设计基本原则 RTL 编码风格 数字电路的几个基本概念 系统同步电路的静态时序分析 FPGA 设计案列分析
FPGA设计基本原则-同步设计原则
异步电路 电路的核心逻辑用组合电路实现, 比如异步的FIFO/RAM读写信号、 地址译码等电路 电路的主要信号、输出信号等并不 依赖于任何一个时钟信号,不是由 时钟信号驱动FF产生的 异步实现电路的最大缺点是容易产 生毛刺 不利于器件的移植,这包括器件族 之间的移植和从FPGA向结构化 ASIC的移植 不利于静态时序分析(STA),验证 设计时序性能 同步电路 电路的核心逻辑用各种各样的触 发器实现 电路的主要信号、输出信号等都 是由某个时钟沿驱动触发器实现 的 同步时序电路可以很好地避免毛 刺 利用器件移植,这包括器件族之 间的移植和从FPGA向结构化 ASIC的移植 有利于静态时序分析(STA),验证 设计时序性能
FPGA设计规范华为内部规范系列

1. 基于 HDL 的 FPGA 设计流程概述 ...........................................................................................
1
1.1 设计流程图 ........................................................................................................................
1
1.2 关键步骤的实现 ................................................................................................................
2
1.2.1 功能仿真 .................................................................................................................
8
4.1.1 关于 LeonardoSpectrum .........................................................................................
8
4.1.1 大规模设计的综合 .................................................................................................
4
2. Verilog HDL 设计 .........................................................................................................................
FPGA设计的十五条原则详细解析

FPGA设计的十五条原则详细解析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…;描述不带优先级的“平行”语句。
5、FPGA一般触发器资源比较丰富,而CPLD组合逻辑资源更丰富。
6、FPGA和CPLD的组成:FPGA基本有可编程I/O单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等6部分组成。
第7章 FPGA设计原则

第1节FPGA高级应用可编程逻辑器件上的嵌入式处理器1 Altera--Nios/Nios II (soft)、ARM922T (hard)--Quartus II,SOPC Builder,Nios II IDE--Avalon总线2 Xilinx--MicroBlaze 、PicoBlaze (soft)、PowerPC (hard)--ISE、EDK--CoreConnect总线3 其他--LatticeMico32、Core8051s、ARM 、……使用FPGA 实现DSP1 硬件支持:--硬件乘法器、硬件乘加器、专用的DSP 逻辑片;-Xilinx XtremeDSP逻辑片-Altera DSP块-Lattice sysDSP块2 软件支持:--DSP IP核--系统级设计工具:System Generator、DSP Builder、AccelDSP、Lattice BlockSet、……可重配置计算1 一种新型的计算模式。
2 可重配置逻辑作为微处理器的协处理单元。
3 可重配置逻辑可以配置成不同的功能,为不同的应用和计算提供硬件支持。
4 可重配置逻辑一般采用基于SRAM的FPGA器件实现。
结构硬件的灵活性1 处理器种类、个数2 互连机制3 存储机制4 硬件逻辑电路、外设软件的可编程性1 高级语言 2 操作系统支持IRL-基于Internet的可重配置逻辑1 Internet Reconfigurable Logic (IRL)是Xilinx倡导的一种新的FPGA设计理念,其核心是通过Internet对远程设备的硬件设计和软件程序进行升级、重构、调试和监控。
2 这种设计理念伴随着嵌入式Internet技术的蓬勃发展必将对嵌入式设备的设计模式产生深远的影响。
3 IRL包括三个方面的基本要素:--含有配置bit流或应用程序的主机;--含有配置功能的目标系统;--Internet或远程访问介质。
FPGA代码编写风格规范

(24) 避免冗长的逻辑和子表达式;
(25) 避免采用内部三态电路,建议用多路选择电路代替内部三态电路。
(8) 当描述多比特总线时,使用一致的定义顺序,对于verilog建议采用bus_signal[x:0]的表示;
(9) 尽量遵循业界已经习惯的一些约定。如*_r表示寄存器输出,*_a表示异步信号,*_pn表示多周期路径第n个周期使用的信号,*_nxt表示锁存前的信号,*_z表示三态信号等;
(10) 在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;
(19) 对一些重要的always语句块定义一个有意义的标号,这样有助于调试。注意标号名不要与信号名、变量名重复;
(20) 代码编写时的数据类型只使用IEEE定义的标准类型,在VHDL语言中,设计者可以定义新的类型和子类型,但是所有这些都必须基于IEEE的标准;
(21) 在设计中不要直接使用数字,作为例外,可以使用0和1。建议采用参数定义代替直接的数字。同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系;
(11) 使用适当的注释来解释所有的always进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
而C语言编译后,其机器指令在CPU 的高速缓冲队列中基本是顺序执行的。
系统原则
一方面是一个硬件系统,例如一块板卡如何进 行功能模块划分与任务分配,什么样的算法和功能 适合放在传统FPGA里面实现,什么样的算法和功 能适合放在DSP、CPU里面实现,或者在使用内嵌 CPU和DSP Block的FPGA中如何划分软硬件功能, 以及FPGA的规模估算数据接口设计、开发成本的 估算等。 另一方面就是具体到FPGA内部设计要有一个宏 观上的合理安排,比如时钟域、模块复用、约束、 面积、速度等问题。
同步设计原则-建立/保持时间
同步设计中,稳定可靠的数据采样必须遵从以 下两条基本原则:
1、在有效时钟沿到达前,数据输入至少已经稳定 了采样寄存器Setup时间之久。这条原则简称满足 Setup时间原则。
2、在有效时钟沿到达后,数据输入至少还将稳定 保持采样寄存器Hold时间之久。这条原则简称满足 Hold时间原则。
结构层次化编码注意事项
4) 一般来说,进入FPGA的信号必须先同步,以 提高系统工作频率; 5) 所有模块的输出都要寄存器化,以提高工作 频率,这对设计做到时序收敛也是极有好处的;
6) 将相关的组合逻辑放在同一模块;
结构层次化编码注意事项
7)所有未使用的模块输入必须加上确定的 逻辑值,不允许输入信号出现悬空状态; 8)尽量少用组合逻辑设计;
9)多用case语句少用if-else语句,if-else的 嵌套不能超过四级; 10)描述always块尽量简洁。
信号命名要规范化。
1) 信号名一律小写,参数用大写。 2) 对于低电平有效的信号结尾要用_n标记,如rst_n。 3) 端口信号排列要统一,一个信号只占一行,最好按 输入输出及从哪个模块来到哪个模块去的关系排列,这 样在后期仿真验证找错时后方便很多。如:
FPGA设计代码规范
Verilog代码编写风格的必要性 结构层次化编码 时钟和RESET信号设计指南
可综合性编码
Verilog代码编写风格的必要性
Verilog代码编写规范,经常是一个不太受欢迎 的话题,但却是非常有必要的。
遵循代码编写规范书写的代码,很容易阅读、 理解、维护、修改、跟踪调试、整理文档。相反代码 编写风格随意的代码,通常会很凌乱,会给开发者本 人的调试、修改工作带来困难,也会给合作者带来很 大麻烦。
面积换速度:
fpga
125Mb/s处理模块(0) 125Mb/s处理模块(1) 125Mb/s处理模块(2)
SERDES
1.25G 10*125M
125Mb/s处理模块(6) 125Mb/s处理模块(8) 125Mb/s处理模块(9)
硬件原则
FPGA设计和软件设计存在本质区别,要做到
对所需实现的硬件电路“心有成竹”,对该部分硬
module a( clk, rst_n, wren, rden, avalon_din, sdi, data_ready, avalon_dout );
常量/参数化设计
尽量少用立即数,多用常量。使用常量有以下优点:(1) 常量对于一个设计具有更多的灵活性;(2)常量值只需要在一 个地方修改。 方法: 对于Verilog程序,把常数和参数定义在一个或多个 小文件中,例如文件design_parameters.v,然后在需要调用这 些参数的模块中插入“`include design_parameters.v “语句即可。
同步设计原则-同步与异步
在设计电路时,可以有异步电路和同步电路 两种实现方法。 异步电路使用组合逻辑电路实现,没有统一 的时钟信号,容易产生毛刺和竞争冒险。
同步时序电路使用组合逻辑和触发器实现电 路功能,主要信号和输出信号都由时钟驱动触发 器产生,能够避免毛刺,信号稳定。
同步设计原则-时钟 同步设计时钟信号的质量和稳定性决 定了同步时序电路的性能。 FPGA的内部有专用的时钟资源,如 全局时钟布线资源、专用的时钟管理模块 DUL、PLL等。
进一步了解FPGA内部的“面积”资源!
面积与速度的平衡与互换原则
fpga
速度换面积:
125Mb/s处理模块(0) 125Mb/s处理模块(1) 125Mb/s处理模块(2)
SERDES
125Mb/s处理模块(6) 125Mb/s处理模块(8) 125Mb/s处理模块(9)
1.25G
10*125M
件的结构与连接十分清晰,然后再用适当的HDL语 句表达出来。 要明确FPGA的逻辑设计所采用的硬件描述语 言(HDL)和软件语言(如C,C++等)的区别, HDL的本质作用在于描述硬件!它的最终实现结果 是芯片内部的实际电路。
硬件原则-并行处理 硬件原则的另外一个重要理解是“并 行”和“串行”的概念。 一般来说硬件系统比软件系统速度快, 实时性高,其中一个重要原因就是硬件 系统中各个单元的运算是独立的,信号 流是并行的。
FPGA设计原则以及代码规范
2009.4.22
FPGA设计原则
面积和速度的平衡与互换
硬件原则
系统原则
同步设计原则
面积与速度
“面积”指一个设计消耗FPGA的逻辑资源的数量, 一般可以用所消耗的触发器(FF)和查找表(LUT) 来衡量,更一般的衡量方式可以用设计所占用的等 价逻辑门数。 “速度”指设计在芯片上稳定运行,所能够达到 的最高频率,这个频率由设计的时序状况决定,它 和设计满足的时钟周期,PAD to PAD Time,Clock Setup Time,Clock Hold Time ,Clock to output delay等众多时序特征量密切相关。
编写规范的宗旨
缩小篇幅;
提高整洁度;
便于跟踪、分析、调试;
增强可读性,帮助阅读者理解;
便于整理文档; 便于交构层次化编码注意事项
1) 结构的层次不宜太深,一般为3到5层即可; 2) 顶层模块最好仅仅包含对所有模块的调用,而 不应该完成比较复杂的逻辑功能。比较为合理的 顶层模块由输入输出管脚声明、模块的调用与实 例化、全局时钟资源、全局置位/复位、三态门控 制等构成; 3) 所有的I/O信号,如输入、输出、双向信号等的 描述在顶层模块完成;