[信息与通信]第4章 FPGA 设计思想与方法二.ppt

[信息与通信]第4章 FPGA 设计思想与方法二.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[信息与通信]第4章 FPGA 设计思想与方法二

第4章 FPGA设计思想与方法(二) 周晓波 北京交通大学电子信息学院 xbzhou@bjtu.edu.cn内容提要 常用模块之二:全局时钟资源与锁相环 FPGA设计的具体准则 异步时钟域设计问题 全局时钟资源 全局时钟布线资源 专用时钟缓冲与驱动结构 到达可配置单元的时延和抖动最小 长线资源-第二全局时钟资源 片内集成DLL(Delay-Locked Loop)或PLL Xilinx:DLL,DCM模块 Altera:PLL 全局时钟资源 时钟模块的生成和配置方法 HDL代码和原理图中直接实例化 IP核生成器中配置相关参数 Xilinx: Archetecture Wizard 生成DCM模块 Altera:MegaWiard 综合约束文件中编写约束属性完成时钟模块的约束 Xilinx DCM配置 FPGA设计的具体指导准则 HDL语言的层次含义 结构化层次编码 注意LATCH 逻辑复制与资源共享 其他问题 信号敏感表 复位逻辑 状态机设计 CPLD的设计 HDL语言的层次含义 HDL 硬件描述语言 系统与标准级 功能模块级 行为级 寄存器传输级 门级 基于HDL描述的FPGA设计流程 流程图 :虚线框表示可以省略的部分 实线框表示必须实现的部分 HDL语言的适用层次 流程图 :虚线框表示适用程度低 实线框表示适用程度高 结构层次化编码 模块化设计思想的体现 结构化层次示意图 结构化层次设计要点 结构的层次不宜太深,3-5层 顶层模块仅包含对所有模块的组织和调用,不完成复杂的逻辑功能 所有的IO信号,都在顶层模块中描述 子模块之间也有接口,不建立子模块之间跨层次的接口 子模块的合理划分 模块划分的基本原则(一) 对每个同步时序设计的子模块的输出使用寄存器(registering) 寄存器分割同步时序模块的原则 优点:便于综合工具权衡所分割的子模块中的组合电路部分和同步时序电路部分,从而达到更好的时序优化效果。 模块划分的基本原则(二) 将相关的逻辑或可以复用的逻辑划分在同一模块内 呼应系统原则 优点:可以在最大程度上复用资源,减少设计面积;也利于综合工具优化某个具体功能的时序关键路径。 模块划分的基本原则(三) 同一模块内只用一个时钟源 在时钟变换接口使用同步模块(2个FF,DPRAM,异步FIFO) 模块划分的基本原则(四) 时钟域的命名 通过时钟域的命名,区别设计中各个信号的时钟域 ex: uClk = microprocessor clock, uaddr, udata… vClk = video clock, vframe, vdata… dClk = display clock, dwrite,ddata… udata,vdata,dwrite,etc 模块划分的基本原则(五) 合理的模块规模 将不同优化目标的逻辑分开 面积 速度 模块划分的基本原则(六) 将存储逻辑独立划分成模块 RAM,ROM,CAM,FIFO等 优点:便于用综合约束属性指定存储单元的结构和所使用的资源类型;仿真时消耗的内存少些,提高仿真速度 注意LATCH 同步时序逻辑尽量避免Latch 产生原因:不完全的条件判断语句 Example: reg data_out; always@(data_in,con) begin if(con) data_out=data_in; end 防止非目的性的latch 完备if-else语句 完备case语句,default选项,状态机设计 仔细检查综合器的综合报告,注意warning 逻辑复制与资源共享 资源共享 例子:补码乘法器 module resource_share (data_in,square); input [7:0] data_in; //输入为补码 output [15:0] square; wire [7:0] data_bar; assign data_bar = ~data_in + 1; assign square=(data_in[7])?(data_bar*data_bar):(data_in*data_in); endmodule module resource_share1 (data_in,square); input [7:0] data_in; //输入为补码 output [15:0] square; wire [7:0] data_tmp; assign data_tmp =(data_in[7])?(~data_in+1):data_in; assign square=data_tmp*data_tmp; endmodule 逻辑复制 通过增加面积而改善时序

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档