




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、FPGA设计原则以及代码规范,FPGA设计原则,面积和速度的平衡与互换 硬件原则 系统原则 同步设计原则,面积”指一个设计消耗FPGA的逻辑资源的数量,一般可以用所消耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等价逻辑门数。 “速度”指设计在芯片上稳定运行,所能够达到的最高频率,这个频率由设计的时序状况决定,它和设计满足的时钟周期,PAD to PAD Time,Clock Setup Time,Clock Hold Time ,Clock to output delay等众多时序特征量密切相关,面积与速度,进一步了解FPGA内部的“面积”资源,面积与速度的平
2、衡与互换原则,速度换面积,面积换速度,FPGA设计和软件设计存在本质区别,要做到对所需实现的硬件电路“心有成竹”,对该部分硬件的结构与连接十分清晰,然后再用适当的HDL语句表达出来。 要明确FPGA的逻辑设计所采用的硬件描述语言(HDL)和软件语言(如C,C+等)的区别,HDL的本质作用在于描述硬件!它的最终实现结果是芯片内部的实际电路,硬件原则,硬件原则的另外一个重要理解是“并行”和“串行”的概念。 一般来说硬件系统比软件系统速度快,实时性高,其中一个重要原因就是硬件系统中各个单元的运算是独立的,信号流是并行的。 而C语言编译后,其机器指令在CPU的高速缓冲队列中基本是顺序执行的,硬件原则并
3、行处理,系统原则,一方面是一个硬件系统,例如一块板卡如何进行功能模块划分与任务分配,什么样的算法和功能适合放在传统FPGA里面实现,什么样的算法和功能适合放在DSP、CPU里面实现,或者在使用内嵌CPU和DSP Block的FPGA中如何划分软硬件功能,以及FPGA的规模估算数据接口设计、开发成本的估算等,另一方面就是具体到FPGA内部设计要有一个宏观上的合理安排,比如时钟域、模块复用、约束、面积、速度等问题,同步设计原则同步与异步,在设计电路时,可以有异步电路和同步电路两种实现方法。 异步电路使用组合逻辑电路实现,没有统一的时钟信号,容易产生毛刺和竞争冒险。 同步时序电路使用组合逻辑和触发器
4、实现电路功能,主要信号和输出信号都由时钟驱动触发器产生,能够避免毛刺,信号稳定,同步设计时钟信号的质量和稳定性决定了同步时序电路的性能。 FPGA的内部有专用的时钟资源,如全局时钟布线资源、专用的时钟管理模块DUL、PLL等,同步设计原则时钟,同步设计中,稳定可靠的数据采样必须遵从以下两条基本原则: 1、在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器Setup时间之久。这条原则简称满足Setup时间原则。 2、在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器Hold时间之久。这条原则简称满足Hold时间原则,同步设计原则建立/保持时间,FPGA设计代码规范,Verilog代码编写风
5、格的必要性 结构层次化编码 时钟和RESET信号设计指南 可综合性编码,Verilog代码编写风格的必要性,Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。 遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相反代码编写风格随意的代码,通常会很凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦,编写规范的宗旨,缩小篇幅; 提高整洁度; 便于跟踪、分析、调试; 增强可读性,帮助阅读者理解; 便于整理文档; 便于交流合作,结构层次化编码框架图,1) 结构的层次不宜太深,一般为3到5层即可; 2) 顶层模块最好仅仅包含对所有
6、模块的调用,而不应该完成比较复杂的逻辑功能。比较为合理的顶层模块由输入输出管脚声明、模块的调用与实例化、全局时钟资源、全局置位/复位、三态门控制等构成; 3) 所有的I/O信号,如输入、输出、双向信号等的描述在顶层模块完成,结构层次化编码注意事项,一般来说,进入FPGA的信号必须先同步,以提高系统工作频率; ) 所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也是极有好处的; ) 将相关的组合逻辑放在同一模块,结构层次化编码注意事项,7)所有未使用的模块输入必须加上确定的逻辑值,不允许输入信号出现悬空状态; 8)尽量少用组合逻辑设计; 9)多用case语句少用if-else语句
7、,if-else的嵌套不能超过四级; 10)描述always块尽量简洁,结构层次化编码注意事项,1) 信号名一律小写,参数用大写。2) 对于低电平有效的信号结尾要用_n标记,如rst_n。3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。如,信号命名要规范化,module a( clk, rst_n, wren, rden, avalon_din, sdi, data_ready, avalon_dout,尽量少用立即数,多用常量。使用常量有以下优点:(1)常量对于一个设计具有更多的灵活性;(2)常量值只需要在一
8、个地方修改。 方法: 对于Verilog程序,把常数和参数定义在一个或多个小文件中,例如文件design_parameters.v,然后在需要调用这些参数的模块中插入“include design_parameters.v “语句即可,常量/参数化设计,时钟和RESET信号设计指南,避免在模块内部产生RESET信号:(1)如果可能,尽量避免在模块内部产生RESET信号,或者避免用其它条件逻辑产生RESET信号;(2)如果确实需要条件RESET信号,那么可以创建一个独立的RESET信号,再创建一个独立的条件RESET产生逻辑模块,DFF1: always(posedge clk_125m) be
9、gin if(!rst_n) q=1b0; else q=d; end,DFF2: always(negedge clk_125m) begin if(!rst_n) q=1b0; else q=d; end,例如,避免使用混合时钟沿,1)在你的设计中,要避免同时使用上升沿触发和下降沿触发这两种触发方式的寄存器。 (2)如果在你的设计中必须同时使用大量的上升沿和下降沿出发的触发器,那么应该把他们放在不同的模块中,在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一个模块做时钟域的隔离。这样做可以让综合器综合出更优的结果。 这里的一个模块是指一个module,一个模块尽量只用一个时钟,避免在模块
10、内部产生时钟,避免使用内部产生时钟的方法,例如采用计数器分频出来的脉冲直接拿去当作时钟使用,是不允许的,这种时钟对设计的可靠性极为不利,逻辑分频时钟: always(posedge clk_125m) begin if(!rst_n) clk_div_62m5=1b0; else clk_div_62m5=!clk_div_62m5; end always(posedge clk_div_62m5) begin if(!rst_n) data_out=8h00; else data_out=data_in; end,时钟使能方式: always(posedge clk_125m) begin
11、if(!rst_n) en_clk_62m5=1b0; else en_clk_62m5=!en_clk_62m5; end always(posedge clk_125m) begin if(!rst_n) data_out=8h00; else if(en_clk_62m5) data_out=data_in; end,避免在RTL代码中直接使用门控时钟,门控时钟会增加设计的不稳定性,always(en1 or en2) begin if(!rst_n) data_out=8h00; else data_out=data_in; end,避免使用门控时钟,D,Q,en1,en2,data_
12、in,data_out,Verilog中,用always块设计组合逻辑电路时, 1) 在赋值表达式右端参与赋值的所有信号都必须在 always(敏感电平列表) 中列出, 2) always中if语句的判断表达式必须在敏感电平列表中列出。 3) 确保过程模块敏感信号列表中的信号是必需的。敏感信号列表中没必要出现的信号会降低仿真速度,敏感变量的描述完备性,错误写法:always(aorborc) begin e = d end,敏感变量的描述完备性,1)在Verilog语言中的case语句对应一个单级的多选电路, if-else if-else语句对应于一个优先编码的多级组合选择电路。(2)如果你
13、的设计中没有优先级的要求,最好使用case语句,不要使用if-else if-else语句进行描述,Case语句和If-Else语句,不推荐这种写法,具有优先级例子1,没有优先级例子1,优先级电路,不推荐这种写法,同时不推荐大小写混合使用,具有优先级例子2,优先级电路,例:位置映射法 Block block_1( signal_a, signal_b); 例:信号名映射法 block block_1( .signal_a(signal_a), .signal_b(signal_b),在Verilog中,有两种模块调用的方法, 一种是位置映射: 模块名 (连接端口1信号名, 连接端口2信号名,
14、连接端 口3信号名,); 另一种为信号名映射法: 模块名 (.端口1信号名(连接端口1信号名), .端口2信号名(连接端口2信号名), .端口3信号名(连接端口3信号名),模块调用规范,在书写Verilog可综合代码时,在always(posedge clk)模块中,总是使用非阻塞赋值方式,否则会产生RTL级仿真和门级仿真功能不一样的现象。同一个always中不能混用阻塞,非阻塞赋值,阻塞和非阻塞赋值(Verilog,Error,状态机要写成3段式的(这是最标准的写法),即 always (posedge clk or negedge rst_n)(第一段) . current_state = next_state; . always (current_state .)(第二段) . case(current_state). s1: if . next_state = s2;. always (posedge clk or negedge rst_n)(第三段
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 声测管注浆施工方案
- 美术培训机构宣讲
- 上海市延安实验初级中学2026届九年级英语第一学期期末监测模拟试题含解析
- 高胆红素血症的护理措施
- 行为管理安全培训
- 2026届石狮七中学英语九年级第一学期期末质量检测试题含解析
- 黑龙江省哈尔滨市松北区2026届化学九年级第一学期期中调研试题含解析
- 山东省济南市育英中学2026届九上化学期中质量检测模拟试题含解析
- 2026届吉林省长春市中学九年级化学第一学期期中达标测试试题含解析
- 2026届安徽省六安市舒城县九年级化学第一学期期末质量检测试题含解析
- TSZUAVIA 009.9-2019 多旋翼无人机系统实验室环境试验方法 第9部分:冲击试验
- 舞蹈基础教学舞蹈基础知识科普培训PPT教学课件
- ECPR临床应用与进展课件
- 《装配式综合管廊施工及验收标准》
- 罗湖区-空气质量状况及原因分析
- 玉米病害图谱 症状课件
- 2013版电力建设工程概预算定额宣贯讲义
- 伤逝-课件完整版
- 养老机构入住老人服药记录表模板
- 决策分析管理运筹学课件
- SP30超级数字程控交换机技术手册
评论
0/150
提交评论