野火-FPGA学习笔记09-一个完整的设计过程

目录

9.2  正确的设计流程

9.4.6 新建工程

9.4.10 Testbench及其设置

9.4.13 NativeLink 的设置

9.4.14打开 ModelSim 观察波形

9.4.16 引脚约束

9.4.17 全编译

9.4.19 未使用管脚的默认设置

9.4.20程序的固化


9.2  正确的设计流程

正确的设计流程是开发项目的关键,大概主要分为以下几个步骤:

1. 首先进行设计规划,有一个全局的考虑,分析项目的具体需求来设计系统的结构、划分系统的层次,确定各个子模块的结构关系和信号之间 的相互关系,然后确定模块的端口信号有哪些;

2. 根据每个模块的功能和自己的理解并结合芯片、接口的时序手册我们使用 Visio 画 出该模块能正常工作的时序波形图;

3. 根据所画的波形图严格设计代码,所谓的严格就是要保证设计代码的仿真结果要和 所画的波形保持一致;

4. 代码编写完成后对代码进行编译,目的是检查代码中的语法错误。若代码存在语法 错误,对代码进行修改,再次编译,直至通过编译;

5. 根据 RTL 代码设计合理的 Testbench 进行逻辑仿真(也称为前仿真、功能仿真);

6. 使用仿真工具进行仿真(可以使用软件自带的仿真工具,也可以使用其他的第三方 仿真工具,本教程中我们使用 ModelSim),并将仿真出来的波形和用 Visio 画出 的时序波形图进行对比,如果对比有差别则修改代码直至相同;

7. 绑定管脚后进行分析综合、布局布线,然后下载到硬件板卡中,此时如果硬件板卡 能够正常工作,则说明前期的设计和编写的代码都正确;如果硬件板卡不能够正 常工作,查找并解决问题,反复迭代直至正确实现功能,并重复后面的流程,最 终保证硬件板卡能够正常工作。

9.4.6 新建工程

        1 是这个新建的工程的位置,选择到 led 文件夹下的 quartus_prj 文件夹;2 是这个工 程的名字,也取名为 led;3 是整个工程设计顶层的文件名,这个名字保持和 2 中的命名一致即可。然后点击“Next”,如图 1 所示:

图1

        1 框是选择使用哪个系列的芯片,咱们使用的是 CycloneIV 系类的芯片; 

        2 框是选择该芯片的封装类型,选择 FBGA 封装;

        3 框是管脚数量,选择 256; ○4 框是速度等级,选择 8。

这 4 个选项设置好以后就得到了5 框的筛选结果,我们使用的芯片具体型号—— EP4CE10F17C8。全部选择好后,点击“Next”,如图 2 所示: 

 

图2

如图3所示: 1 是器件具体的名字;

        2 是内核电压,我们使用的芯片内核电压是 1.2v;

        3是 Logic ELements(每个逻辑单元主要由一个四输出的查找表和一个寄存器构成, 还包括其他的必要电路)的数量,逻辑单元数越多说明资源越多,能够实现更多的逻辑设 计,芯片的价格也就越贵,设计逻辑代码主要使用的是这部分资源;

4 是用户可配置的 I/O 共 180 个,虽然该芯片有 256 个管脚但是有一些管脚是不可以 随意配置的,如电源管脚、固定功能的管脚,除去具有固定功能的管脚,留给用户可任意 配置的管脚只有 180 个,设计中使用比较多的内存时就可以使用这部分专用资源; 

                5 是存储器的容量,共 423936bit,主要是指 Block RAM(块 RAM),423936bit 即 46 个 M9K(每一块中包含 8192 个存储位,加上校验位共 9216 位,故称 M9K); 

        6 是嵌入式乘法器数目共 46 个,在进行数学运算时可以调用该部分的资源,以节省逻 辑资源的开销;

        7 是锁相环的数量,一共有两个,主要用于分频、倍频和时钟相位的调制;

        8 是全局时钟管脚,一共有 10 个,全局时钟管脚是连接到全局时钟树上的,能够保证 连接到全局时钟树上的时钟信号到达每个寄存器的时间都是相同的。

图3

9.4.10 Testbench及其设置

 注:在线逻辑分析仪实时的对信号抓取可以确定是不是时序的问题

时序的问题还要对系统进行静态时序分析(SAT)针对具体违例的时序加以约束

时序仿真(后仿真)

`timescale 1ns/1ns

always #10 key_in <= {$random} % 2; /*取模求余数,产生非负随机数 0、1; 每隔 10ns 产生一次随机数*/

         下图3中的2 框中“Format for output netlist:”栏是选择输出网表的语言格式,该网表主要用于后仿真,因为 我们在逻辑设计中往往不做后仿真,所以这里默认即可;

        3 框中“Time scale:”栏是选择 输出网表的时间单位,所以也默认即可;

        选择4 框中的“Output direction:”选择输出网表 的位置,这里我们默认即可。默认后即可在工程目录下产生一个名为 simulation 的文件 夹,里面还有一个名为 modelsim 的子文件夹,这里不仅存放输出的网表文件,还存放了后 面当 ModelSim 运行仿真后所产生的相关文件。

图4 

下图是自己仿真的设置参数及步骤(注意3处选择为Modelsim-Altera

9.4.13 NativeLink 的设置

         基于 NativeLink 的设计就是在 QuartusII 中设置好一些参数后直接打开 ModeSim 软件 可以立刻看到仿真的结果,可谓是一键操作式的仿真,十分方便。

        先选择“NativeLink setting:”的“Comple test bench:”(如果设计了多个 Testbench 可 以在该栏进行选择),然后点击后面的“Test Benches...”。如下图 所示:

 如图 5 所示:

        1 框“Test bench name:”就是前面“Comple test bench:”框中的名 字,也就是上图中新建的这个 Test Benches 的名字(一般情况下框1 和框2 的名字保持一致即可);        

        2 框“Top level module in test bench:”是 Testbench 顶层的名字,这里只有一个 层次那就是图 6 所示中的名字 tb_led

        3 是“End simulstion at:”是设置打开 ModelSim 时波形运行多久后停止,如果这里不设置就需要在仿真代码中仿真完毕的地方添加 “$stop”代码暂停仿真,或者在弹出的 ModelSim 界面中按暂停按钮,否则 ModelSim 会一 直运行。我们设置的是 1us,这个时间不长不短刚刚好,即打开 ModelSim 后运行 1us 后波形停止运行,如果所需要观察的波形 1us 时刻之后,可以在 ModelSim 中再设置运行时间后 继续运行;○4 框“File name:”选择 sim 文件夹下的 tb_led.v 文件。都设置好后点击 “Add”将 tb_led.v 文件添加进来。

 

图5

图6

9.4.14打开 ModelSim 观察波形

        点击 RTL SIMULATION

        点击下图中的放大镜图标显示全部仿真时间的波形,也就是 1us,和图5设置的结果是一 致的。

图7

在modelsim的sim中对模块点击右键再点击add wave(或者使用快捷键ctrl+w对波形模块进行添加)

图8 

再范围wave中CTRL + A  在进行CTRL + G对modelsim中的波形进行分组

 图9

顺序点击设置1 2 3 进行仿真    4为全局视图

图10 

点击左下角缩短波形文件名称 

图11 

 点击框中第一个按钮即添加参考线(黄色的线即是参考 线),点击第二个按钮即去掉参考线。当鼠标在波形界面中点击时,参考线也会指定到该 位置,如果有两条黄色参考线时,会两条参考线之间的显示时间差(如图13所示)。

图12

 图13

        点击图14左下角处的“小锁”即可固定参考线,被固定的参考线显示红色(添加和 删减参考线也可以通过“小锁”旁边的“+”、“-”号实现)

 

图14

         为了更好地观察分析 ModelSim 仿真出的波形有以下几处按钮会用到。如图 15 所 示:其中1 框中的图标是波形复位,我们直接点击 “OK”即可对界面的波形进行全部清空;

        2 框是设置运行一次仿真的时间,根据实际观察波形的需要填写相应的时间。但仿真 的时间越久所需要等待的时间也会越久,所生成的仿真文件也会越大; 3 框中的第一个图标是运行左边设置的时间值,图中显示的是 100ps,那么点击一次 就运行 100ps,运行完 100ps 后就会自动停止,也可以手动输入其他的时间单位和时间值。

        3 框中的第二个和第三个图标点击一次后波形会一直运行下去,直到点击第四个和第五个 按钮时才会停止;

        4 框中的图标分别是波形的下降沿定位和上升沿定位,当选中要观察的信号时,再点 击这两个按钮时参考线就可以立刻定位到该信号的下降沿或上升沿,再次点击即跳到下一 个下降沿或上升沿;

        5 框中的第一个和第二个图标分别是波形放大和缩小(波形的放大缩小也可以按住键 盘上的“Ctrl”键同时滚动鼠标滚轮)。第三个图标是全局波形显示。第四个图标作用是 将参考线位置处的波形进行放大。第五个图标的作用是将参考线处的波形移动到波形显示 窗口的最开头处。

 

 图15

9.4.16 引脚约束

        绑定完后的管脚状态如图16 所示,其中:

(1) Node Name:RTL 代码中定义的端口名字。

(2) Direction:管脚的输入输出方向。

(3) Location:管脚绑定的位置。

(4) I/O Bank:用于支持对应不同的电平标准,即 VCCIO。每个 Bank 只能有一种电压标 准,一般情况下选择默认值就好。一种颜色下的 I/O 口代表一组 Bank。当管脚的 Location 约束完成以后,I/O Bank 会自动进行填充。

(5) VREF Group:Bank 内部的细分区域,非修改属性,会自动填充。

(6) I/O Standard:对管脚内部的 I/O 进行不同的电平约束。FPGA I/O 的电压由 I/O Bank 上 的 VCC 引入,一个 Bank 上如果引入了 3.3V 的 TTL 电平,那么此时整个 Bank 上输出 3.3V 的 TTL 电平。设置好以后工具可以结合 Current Strength 一起计算功率。如果没 有特殊要求默认即可。 (7) Reserved:这个是对管脚内部的 I/O 逻辑进行约束的,这个约束的是 FPGA 在 I/O 端的 输入输出区域的逻辑。无特殊要求可以为空。

(8) Current Strength:是驱动电流强度,一般选择默认值。如果需要驱动大功率的电路, 可以在 FPGA 外围加驱动电路。

(9) Slew Rate:是电压转换速率,表示单位时间内电压升高的幅值,跟信号跳变时间有 关,一般选择默认值。

(10) Differential Pair:差分管脚。

(11) Filter:通过过滤选项显示指定种类的管脚。

 图16

9.4.17 全编译

        全编译和分析综合的不同是全编译需要进行布局布线管脚绑定后就可以对全局进行 布局布线了。点击如图17所示的按钮进行全部的分析综合布局布线。

 图17

如图 9-87 所示:

1 框是综合后的资源使用率报告;

2 框是综合后提示的错误警告数,这里没有错误,只有警告和严重警告存在,一共 7 个;

3 框是编译时每一步详细的过程,包括执行每一个部分所使用的具体时间,从上到下顺序执行,第一个是之前进行过的分析与综合,第二个是布局和布线,第三个是生成程序 文件,第四个是静态时序分析,第五个是写入网表,这 5 个步骤编译后都是自动完成的不 需要进行干涉,如果后期自动完成不能满足需求是需要手动进行设置以实现优化;

4 框中从左往右依次是错误、严重警告、警告,只要不出现错误就暂时先不用管,当警告或者严重警告影响功能时再去分析;

5 框是编译的总进度;

6 框是在编译过程中实时显示的时间,该时间随着工程量对增大而增大,硬件的编译 一次的时间是非常慢的,不像软件那样瞬间就完成了,所以这也是需要进行仿真的原因之 一。

 图18

9.4.19 未使用管脚的默认设置

点击下图Devide,在打开的界面中选择“Unused Pins”,在“Reserve all unused pins:”框中发现默认的设置是“As input tri-stated weak pull-up”即弱上拉输入,意思是所 有没有定义的引脚,都作为输入引脚,并附加弱上拉电阻。

 我们在“Reserve all unused pins:”框中选择“As input tri-stated”即三态输入,然后点 击“OK”完成设置.在本例中,默认的选择 “As input tri-stated with week pull-up”是一个安全的选项,除此之外,“As input tri-stated”等也是安全 的选项。但是“ As output driving ground ”是一个危险选项,意思是未用到的 FPGA 引脚 会被下拉到地。危险在于如果这些引脚在被 PCB 上的外围电路上拉到高电位,则可能会产 生一个强烈的灌入电流,可能会烧毁 FPGA 的引脚。因此为了避免经济损失,无论如何请 你注意一下这里的选择,不要莫名其妙地把 FPGA 烧坏了。

9.4.20程序的固化

图19

 

 图20

 点击FLASH LOADER 后 点击右侧红框⑤出现的add device 选择如下图中与FPGA相对应的设备

 

图21

 点击SOF  DATA后点击右侧红框⑤出现的add file然后选择我们工程文件输出的.sof文件,如下图22所示

图22

 最后一步:点击Generate生成.jic文件到目标文件夹下

 

图23

注意:尽量不要带电插拔 JTAG 口,否则容易烧坏 FPGA 的 JTAG 口。如果用万用表 测到 JTAG 号 TDI TDO TMS TCK 任意一个与地短路了,那你的 FPGA 可能已经被烧坏 了。并不是每次热插拔 JTAG 口都一定会烧坏,但是至少会有一定烧坏的可能性,为了能 让开发板陪伴我们学习完本教程,所以最好谨慎行事!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值