华为_FPGA设计流程指南.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华为_FPGA设计流程指南.doc

FPGA设计流程指南 前言 本部门所承担的FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。编写本流程的目的是: 在于规范整个设计流程,实现开发的合理性、一致性、高效性。 形成风格良好和完整的文档。 实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利移植。 便于新员工快速掌握本部门FPGA的设计流程。 由于目前所用到的FPGA器件以Altera的为主,所以下面的例子也以Altera为例,工具组合为 modelsim + LeonardoSpectrum/FPGACompilerII + Quartus,但原则和方法对于其他厂家和工具也是基本适用的。 目 录 1. 基于HDL的FPGA设计流程概述 1 1.1 设计流程图 1 1.2 关键步骤的实现 2 1.2.1 功能仿真 2 1.2.2 逻辑综合 2 1.2.3 前仿真 3 1.2.4 布局布线 3 1.2.5 后仿真(时序仿真) 4 2. Verilog HDL设计 4 2.1 编程风格(Coding Style)要求 4 2.1.1 文件 4 2.1.2 大小写 5 2.1.3 标识符 5 2.1.4 参数化设计 5 2.1.5 空行和空格 5 2.1.6 对齐和缩进 5 2.1.7 注释 5 2.1.8 参考C语言的资料 5 2.1.9 可视化设计方法 6 2.2 可综合设计 6 2.3 设计目录 6 3. 逻辑仿真 6 3.1 测试程序(test bench) 7 3.2 使用预编译库 7 4. 逻辑综合 8 4.1 逻辑综合的一些原则 8 4.1.1 关于LeonardoSpectrum 8 4.1.1 大规模设计的综合 8 4.1.3 必须重视工具产生的警告信息 8 4.2 调用模块的黑盒子(Black box)方法 8 参考 10 修订纪录 10 1. 基于HDL的FPGA设计流程概述 1.1 设计流程图 说明: 逻辑仿真器主要指modelsim,Verilog-XL等。 逻辑综合器主要指LeonardoSpectrum、Synplify、FPGA Express/FPGA Compiler等。 FPGA厂家工具指的是如Altera的Max+PlusII、QuartusII,Xilinx的Foundation、Alliance、ISE4.1等。 1.2 关键步骤的实现 1.2.1 功能仿真 说明: “调用模块的行为仿真模型”指的是RTL代码中引用的由厂家提供的宏模块/IP,如Altera 提供的LPM库中的乘法器、存储器等部件的行为模型。 1.2.2 逻辑综合 说明: “调用模块的黑盒子接口”的导入,是由于RTL代码调用了一些外部模块,而这些外部模块不能被综合或无需综合,但逻辑综合器需要其接口的定义来检查逻辑并保留这些模块的接口。 1.2.3 前仿真 说明: 一般来说,对FPGA设计这一步可以跳过不做,但可用于debug综合有无问题。 1.2.4 布局布线 1.2.5 后仿真(时序仿真) 2. Verilog HDL设计 基于将来设计转向ASIC的方便,本部门的设计统一采用Verilog HDL,但针对混合设计和混合仿真的趋势,所有开发人员也应能读懂VHDL。 Verilog HDL的学习可参考[1][2]。 2.1 编程风格(Coding Style)要求 2.1.1 文件 每个模块(module)一般应存在于单独的源文件中,通常源文件名与所包含模块名相同。 每个设计文件开头应包含如下注释内容: 年份及公司名称。 作者。 文件名。 所属项目。 顶层模块。 模块名称及其描述。 修改纪录。 请参考标准示例程序[3]。 2.1.2 大小写 如无特别需要,模块名和信号名一律采用小写字母。 为醒目起见,常数(`define定义)/参数(parameter定义)采用大写字母。 2.1.3 标识符 标识符采用传统C语言的命名方法,即在单词之间以“_”分开,如:max_delay、data_size等等。 采用有意义的、能反映对象特征、作用和性质的单词命名标识符,以增强程序的可读性。 为避免标识符过于冗长,对较长单词的应当采用适当的缩写形式,如用‘buff’代替‘buffer’,‘ena’代替‘enable’,‘addr’代替‘address’等。 2.1.4 参数化设计 为了源代码的可读性和可移植性起见,不要在程序中直接写特定数值,尽可能采用`define语句或paramater语句定义常数或参数。 2.1.5 空行和空格 适当地在代码的不同部分中插入空行,避免因程序拥挤不利阅读。 在表达式中插入空格,避免代码拥挤,包括: 赋值符号两边要有空格; 双目运算符两边要有空格; 单目运算符和操作数之间可没有空格, 示例如下: a =

文档评论(0)

各行业精品文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档