前言

目前FPGA设计任务主要是两方面的作用:系统的原型实现和ASIC的原型验证。使用FPGA设计规范的目的是:

 1. 在于规范整个设计流程,实现开发的合理性、一致性、高效性。2. 形成风格良好和完整的文档。3. 实现在FPGA不同厂家之间以及从FPGA到ASIC的顺利移植。4. 便于新员工快速掌握本部门FPGA的设计流程。

以Altera为例,工具组合为 modelsim + Leonardo Spectrum / FPGA CompilerII + QuartusII,下面主要介绍FPGA设计的设计流程。

1. 设计流程概述

1.1 设计流程图

说明:

 1. 逻辑仿真器主要指modelsim,Verilog-XL等。2. 逻辑综合器主要指LeonardoSpectrum、Synplify、FPGA Express/FPGA Compiler等。3. 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 布局布线

布局布线流程图:

说明:

一般来说,布局布线功能在厂家提供的FPGA验证工具中进行,即在RTL图对各功能模块进行布局布线。

1.2.5 时序仿真

时序仿真流程图:

2. Verilog HDL设计

作为目前最常用、最容易上手的HDL语言,Verilog HDL语言有了C语言的逻辑性和书写习惯,也逐渐代替VHDL成为最受欢迎的一门硬件描述语言。针对混合设计和混合仿真的趋势,所有开发人员都应掌握Verilog HDL语言。

2.1 编程风格(Coding Style)要求

2.1.1 文件

(1)每个模块(module)一般应存在于单独的源文件中,通常源文件名与所包含模块名相同。(2)每个设计文件开头应包含如下注释内容:
/*
年份及公司名称。
作者。
文件名。
所属项目。
顶层模块。
模块名称及其描述。
修改纪录。
*/

2.1.2 大小写

(1)如无特别需要,模块名和信号名一律采用小写字母。(2)为醒目起见,常数(`define定义)/参数(parameter定义)采用大写字母。

2.1.3 标识符

(1)标识符采用传统C语言的命名方法,即在单词之间以“_”分开,如:max_delay、data_size等等。(2)采用有意义的、能反映对象特征、作用和性质的单词命名标识符,以增强程序的可读性。(3)为避免标识符过于冗长,对较长单词的应当采用适当的缩写形式,如用‘buff’代替‘buffer’,‘ena’代替‘enable’,‘addr’代替‘address’等。

2.1.4 参数化设计

 为了源代码的可读性和可移植性起见,不要在程序中直接写特定数值,尽可能采用`define语句或paramater语句定义常数或参数。

2.1.5 空行和空格

(1)适当地在代码的不同部分中插入空行,避免因程序拥挤不利阅读。(2)在表达式中插入空格,避免代码拥挤,包括:

赋值符号两边要有空格;双目运算符两边要有空格;单目运算符和操作数之间可没有空格, 示例如下:

a  <=  b;
c  <=  a  +  b;
if (a  ==  b) then ...
a  <=  ~a  &  c;

2.1.6 对齐和缩进

(1)不要使用连续的空格来进行语句的对齐。(2)采用制表符Tab对语句对齐和缩进,Tab键采用4个字符宽度,可在编辑器中设置。(3)各种嵌套语句尤其是if...else语句,必须严格的逐层缩进对齐。

2.1.7 注释

必须加入详细、清晰的注释行以增强代码的可读性和可移植性,注释内容占代码篇幅不应少于30%。

2.1.8 参考C语言的资料

 要形成良好的编程风格,有许多细节需要注意,由于Verilog HDL和C语言的形式非常近似,所以可以参考C语言的一些资料来对Verilog进行规范设计。

2.1.9 可视化设计方法

为提高设计效率和适应协同设计的方式,可采用可视化的设计方法,Mentor Grahpics的Renoir软件提供了非常好的设计模式。

2.2 可综合设计

用HDL实现电路,设计人员对可综合风格的RTL描述的掌握不仅会影响到仿真和综合的一致性,也是逻辑综合后电路可靠性和质量好坏最主要的因素,对此应当予以充分的重视。

3. 逻辑仿真

考虑到性能和易用性,首选的逻辑仿真器是Mentor Graphics的modelsim。

3.1 激励测试程序(test bench)

测试程序对于设计功能和时序的验证有着举足轻重的影响,测试激励的完备性和真实性是关键所在,有以下原则须遵循:

(1)测试激励输入和响应输出采集的时序应当兼顾功能仿真(无延时)和时序仿真(有延时)的情况。(2)对于周期较多的测试,为提高效率,尽可能采用程序语句来判断响应与标准结果是否一致,给出成功或出错标志,而不是通过观察波形来判断。(3)采用基于文件的测试是很好的办法,即由matlab或spw等系统工具产生测试数据,测试程序将其读入产生激励,再把响应结果写入到文件,再交给上述工具进行处理或分析。(4)仿真器支持几乎所有的Verilog HDL语法,而不仅仅是常用的RTL的描述,应当利用这一点使测试程序尽可能简洁、清楚,篇幅长的要尽量采用task来描述。

3.2 使用预编译库

在进行功能仿真和后仿真时都需要某些模块的行为仿真模型和门级仿真模型,如Altera Quartus里的220model库文件(LPM模块行为仿真模型),为避免在不同的设计目录中多次编译这些模型,应当采用一次编译,多次使用的方法。

具体做法如下:

1、在某个工作目录下新建一库名 220model,将220model.v编译到其中。2:在图形界面中的Load Design对话框中装入仿真设计时,在Verilog 标签下指定预编译库的完整路径。


布局布线后,观察RTL门级电路图,进行验证。

4. 逻辑综合

目前可用的FPGA综合工具有Mentor Graphics 的 Leonardo Spectrum,Synplicity 的 Synplify 和 Synopsys 的FPGA CompilerII / FPGA Express,Leonardo Spectrum由于性能和速度最好,FPGA CompilerII / FPGA Express由于可以和Design Compiler代码兼容也可用。

4.1 逻辑综合的一些原则

HDL代码综合后电路质量的好坏主要取决于三个方面:

1、RTL实现是否合理、
2、对厂家器件特点的理解
3、对综合器掌握的程度。

4.2 调用模块的黑盒子(Black box)方法

使用黑盒子方法的原因主要有两点:

一、HDL代码中调用了一些FPGA厂家提供的模块(如Altera的LPM模块)或第三方提供的IP,这些模块不需要综合,而且有些综合器也不能综合(如FPGA CompilerII/FPGA Express可以综合包含LPM的代码而LeonardoSpectrum不能)。因此须提供一个黑盒子接口给综合器,所调用的模块到布局布线时才进行连接。二、方便代码的移植,由于厂家提供的模块或第三方提供的IP通常都是与工艺有关的,直接在代码中调用的话将不利于修改,影响代码移植。

下面以调用Altera的LPM库中的乘法器为例来说明。调用一个模块需要这样一个文件:mult8x8.v。
代码如下:


// mult8x8.v
module mult8x8 (dataa, datab, result);
input [7:0] dataa;
input [7:0] datab;
output [15:0] result;// exemplar translate_off
// synopsys translate_off
lpm_mult    lpm_mult_component(.dataa   (dataa),.datab  (datab),.aclr       (1'b0),.clock  (1'b0),.clken  (1'b0),.sum    (1'b0),.result (result));defparamlpm_mult_component.lpm_widtha             = 8,         lpm_mult_component.lpm_widthb             = 8,  lpm_mult_component.lpm_widths            = 16,lpm_mult_component.lpm_widthp             = 16,  lpm_mult_component.lpm_representation   = "SIGNED",
// exemplar translate_on
// synopsys translate_onendmodule

注意上述的代码有两对编译指示:

> // exemplar translate_off 和 // exemplar translate_on  (Leonardo Spectrum 支持)
> // synopsys translate_off 和 // synopsys translate_on(Leonardo Spectrum 和 FPGA CompilerII都支持)
对于相应的综合器,在这些编译指示中间的语句将会被忽略,那我们可以看到在综合过程中模块mult8x8实际变成了一个只有I/O定义的空盒子(即black box),所以该部分的代码没有连接,在Quartus布局布线的时候,lpm模块的代码才连接到整个设计,在仿真的时候,编译指示不影响模块的完整性。
至此,常用的FPGA设计规范就已经介绍完毕,我们以后使用FPGA设计开发ASIC原型验证、SOC系统设计等,都可以使用此规范来进行规则约束,提高对FPGA工具的开发。

常用且标准的FPGA设计规范相关推荐

  1. 【信息系统项目管理师】常用网络标准与网络协议

    软考信息系统项目管理师(高级)必背之常用网络标准与网络协议 1  OSI七层模型 2  TCP/IP 3  协议类型 4  以太网规范 5  常用网络标准与网络协议总结 如果文章对你有帮助,记得点赞, ...

  2. java的mysql语句规范_常用的标准SQL 语句

    1.创建数据库的语句如下: Create database databaseName 上述语句创建一个名字叫 databaseName 的数据库 2.删除数据库的语句如下. Drop database ...

  3. 常用Python标准库对象速查表(1)

    封面图片:<Python程序设计基础(第2版)>,董付国,清华大学出版社 =============== 常用Python标准库对象速查表(1) 标准库 对象 简要说明 math sin( ...

  4. 分隔符有哪些_Python有哪些常用的标准库?Python基础教程,常用标准库(一)

    上一节课我们学习了如何自定义模块,大家可以定义自己的模块,但是项目中通常不允许我们自己造轮子,所以本节课主要学习Python的标准库,学习使用别人的轮子,由于标准库内容较多,所以我们分开两次课程来学习 ...

  5. 人脸对齐算法常用评价标准总结

    转载请注明作者和出处: http://blog.csdn.net/john_bh/ 文章目录 1. I O N 和 I P N ION和IPN ION和IPN 2. M N E MNE MNE (th ...

  6. SAP MM模块常用的标准报表

    MM模块常用的标准报表 一. 采购订单查询 采购订单的查询,可以根据供应商.物料号或者采购订单号码进行查询显示. 事务代码和路径: ME2L:后勤 -> 物料管理 -> 采购 ->  ...

  7. 人脸对齐算法常用评价标准

    人脸对齐常用评价标准 1 the inter-ocular distance normalized error        其中xixix_i表示预测坐标点,x∗ixi∗x^*_i表示ground- ...

  8. 软件测试中的程序接缝指什么,接缝滑移-定滑移量常用测试标准与方法

    接缝滑移-定滑移量常用测试标准与方法 已被阅读9264次 2018-12-21 织物接缝滑移,也就是之前国内所称的纰裂程度.是指织物经接缝后,缝纫处的纱线抵抗外在拉力的能力,是衡量织物接缝性能的一个重 ...

  9. 常用Python标准库

    众所周知,Python有庞大的库资源,有官方标准库以及第三方的扩展库.每个库都一把利器,能帮助我们快速处理某方面的问题.作为一名python的初学者,当把基本的语法.列表和元组.字典.迭代器.异常处理 ...

最新文章

  1. Learn OpenGL (七):摄像机
  2. 中国无人车公司AutoX,打响加州RoboTaxi服务第一枪
  3. RHEL6的系统开机的过程
  4. [Hibernate系列—] 2. 创建SessionFactory 与 Session
  5. PyQt5 技术篇-调用文件对话框获取文件、文件夹路径。文件对话框返回选中的多个文件路径
  6. Generic Access Profile (GAP)
  7. HTML: 字體設置
  8. c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
  9. android 初始化类,Android 常用编程技巧/Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)...
  10. 神奇的发明 —— 百叶窗
  11. java逐行读取文件_Java逐行读取文件
  12. 等级保护三级测评-----云计算安全扩展要求
  13. b站上的计算机课程有哪些,B站课程排行榜,这届大学生最爱学什么?
  14. w ndows热键,Window 10 优雅的快捷键
  15. 51单片机控制动态数码管的显示
  16. 利用go语言创建钱包并遍历钱包(wallet)
  17. vim常用插件安装及使用
  18. CMDN CLUB第14场:小米与友盟专家详解Android开发:
  19. 商城系统开发使用微信服务号和小程序那个好?
  20. android x86 v2ex,v2ex签到脚本改进 - 就爱阅读网

热门文章

  1. 分布式文件存储FastDFS介绍安装部署及相关Java代码编写
  2. JS undefined报错
  3. 颜色恒常性CVPR2020 Multi-Domain Learning for Accurate and Few-Shot Color Constancy阅读笔记
  4. 按降序显示奇数python_程序在Python中分别以升序和降序对所有偶数和奇数进行排序...
  5. linux c字符串用0补位,Linux中10个你不知道的命令补齐技巧
  6. 洛谷P1125笨小猴C语言
  7. C++程序设计同步实践宝典——前言
  8. 如何找到官方公布的和汇丰公布的PMI数据
  9. Qt编写安防视频监控系统18-云台控制
  10. 如何在计算机中增加硬盘分区,win10系统电脑下增加新磁盘分区的操作方法