概述 科学合理的FPGA设计流程是为了更加直观地展示一个完整的设计流程,本节以一个基础的实验——二选一选择器,来介绍完整的FPGA设计开发流程。 良好的文件夹设置以及工程管理是学好FPGA设计的基础,在学习之初就应建立良好的习惯。因此首先在新建的工程文件夹下面,分别建立如图 2.2‑1所示的子文件夹。 图 2.2 1 FPGA工程子文件夹 上图中,prj为工程文件存放目录;rtl为verilog可综合代码存放目录;testbench为测试文件存放目录;img为设计相关图片存放目录;doc为设计相关文档存放目录;prj文件夹下还建立了子文件夹ip,用于存放Quartus Prime中生成的IP核文件。 建立工程 每个开发过程开始时都应建立一个Quartus II工程,Quartus II以工程的方式对设计过程进行管理,Quartus II工程包括创建FPGA配置文件需要的所有设置和设计文件。 打开安装好的Quartus Prime软件,软件启动界面及启动后的主界面如图 2.2 2以及图 2.2 3所示。 图 2.2‑2 Quartus Prime启动界面 图 2.2‑3 Quartus Prime主界面
第一步,单击New Project Wizard来启动一个工程向导。会显示如图 2.2‑4所示的工程向导介绍,此处直接单击Next即可。 图 2.2‑4 工程向导简介
第二步,选择新建工程所在路径、设置工程命名以及顶层设计实体名称。在输入顶层设计实体时默认与工程名称一致,此处可根据具体情况来自行修改,如图 2.2‑5所示。 图 2.2‑5 工程路径设置以及命名 选择工程类型时可以选择一个全空的工程,也可以基于现有的工程模版来实现。此处选择新建一个空的工程,如图 2.2‑6所示。
图 2.2‑6 选择新建工程类型 第三步,添加已有设计文件。如没有,可直接点击Next,本次单击Next,如图 2.2‑7所示。 图 2.2‑7 添加已有设计文件 第四步,选择器件。在这里选择芯路恒FPGA开发板上的Cyclone IV E系列的EP4CE10F17C8,如图 2.2‑8所示。这里可在右面红色框内可通过添加限定条件来减少需要翻看器件的目录。 图 2.2‑8 设置工程用器件 第五步,EDA工具的选择。从上至下依次是综合工具、仿真工具、形式验证工具以及板级工具,可根据实际情况自行选择。在这里根据自己安装情况将仿真工具设置为Modelsim-Altera或者Modelsim,语言选择Verilog HDL,其他选项可暂时不做处理,如图 2.2‑9所示。 图 2.2‑9 EDA工具设定 第六步,单击Finish完成工程的建立。 设计输入 工程建立完成后,需要为工程添加新的设计文件,单击File→New→Verilog HDLFile,或者工具栏中的New,弹出图 2.2‑10的选择框。此处选择Design Files中的Verilog HDLFile,如图 2.2‑11所示。 图 2.2‑10 新建设计文件图 图 2.2 11 新建设计文件选择框 新的文件建立完成后,输入程序清单2.1所示代码,并以led_test.v命名保存到工程对应的rtl文件夹下。 程序清单2.1 二选一多路器代码 module led_test(a,b,key_in,led_out); input a;//输入端口A input b;//输入端口B input key_in; //按键输入,实现输入通道的选择 output led_out; //led 控制端口 //当key_in == 0 :led_out = a assign led_out = (key_in == 0)? a : b; endmodule |
分析和综合 单击工具栏中的Start Analysis & Synthesis来进行分析和综合,如图 2.2 12所示。如在设计过程有错误的地方,在分析和综合后会提示Error或者Warning,需针对不同情况进行修改。我们汇总了分析和综合过程中常见的问题以及解决方式,可参见 www.corecourse.cn网站上相关文章针对性解决。 图 2.2‑12 分析和综合
全编译后可以在RTL Viewer中可以看到图 2.2‑13所示的硬件逻辑电路。即一个二选一选择器,符合设计预期。 图 2.2 13 RTL Viewer中硬件逻辑电路 功能仿真 编写测试激励文件 为了验证以上逻辑设计是否成功,在直接下载到开发板观察现象之前需编写激励文件,此处再新建一个.v文件并输入程序清单2.2所示内容,以led_test_tb.v保存到工程对应的testbench文件夹下,并再次进行分析和综合查看是否存在语法设计错误。 程序清单2.2 二选一多路器测试代码 `timescale 1ns/1ps module led_test_tb; //激励信号定义,对应连接到待测试模块的输入端口 reg signal_a; reg signal_b; reg signal_c; //待检测信号定义,对应连接到待测试模块的输出端口 wire led; //例化待测试模块 led_test led_test0( .a(signal_a), .b(signal_b), .key_in(signal_c), .led_out(led) ); //产生激励 initial begin signal_a = 0;signal_b = 0;signal_c = 0; #100;//延时100ns signal_a = 0;signal_b = 0;signal_c = 1; #100; signal_a = 0;signal_b = 1;signal_c = 0; #100; signal_a = 0;signal_b = 1;signal_c = 1; #100; signal_a = 1;signal_b = 0;signal_c = 0; #100; signal_a = 1;signal_b = 0;signal_c = 1; #100; signal_a = 1;signal_b = 1;signal_c = 0; #100; signal_a = 1;signal_b = 1;signal_c = 1; #200; $stop; end endmodule |
设置仿真脚本 单击标题栏的Assignments→Settings→Simulation,查看仿真工具以及语言是否与之前的设置一致,否则根据实际使用情况进行相应的修改,如图 2.2‑14所示。选中Compile test bench单击Test Benches后点击OK。可以看到如图 2.2‑15界面。 图 2.2 14 仿真脚本设置 图 2.2 15 新建激励 点击New,弹出如图 2.2 16所示的Test Bench设置文件对话框,找到已经编写好的激励文件,单击Add。在Test bench name中填写对应的激励名称。点击OK后回到主界面。
图 2.2 16 测试激励设置 启动仿真 单击Tools→Run Simulation Tool→RTL Simulation来进行前仿真也就是常说的功能仿真,如图 2.2 17所示。 图 2.2 17 开启功能仿真 如出现如图 2.2 18对话框,即仿真软件路径报错,可在Tools→Options→EDA Tool Options设置对应的仿真软件的路径即可,如图 2.2 19所示。 图 2.2 18 错误信息示例 图 2.2 19 设置EDA工具的链接 仿真结果分析 至此,即可在仿真软件modelsim中看到如图 2.2 20的波形文件,可以看出符合设计预期,当key_in等于0时led_out等于a,当key_in等于1时led_out等于b。即功能仿真通过。 图 2.2 20 功能仿真波形 如没有出现预期波形,可针对具体问题具体分析,芯路恒也汇总了一部分在功能仿真过程中常见问题及解决办法,此部分详细内容可参见 www.corecourse.cn网站上相关文章针对性解决。 综合与布局布线 点击Quartus Prime主界面的Start Compilation,进行综合&布局布线,如图 2.2 21所示。布局布线过程中如遇出错,应根据编译错误信息具体修改。 图 2.2 21 布局布线 时序仿真 点击Tools→Run Simulation Tool→Gate Leval Simulation或者在工具栏点击Gate Leval Simulation进行后仿真,也就是门级仿真。 弹出选择时序模型对话框,可针对相应情况具体选择。此时可选择第一个时序模型:慢速工作、环境温度为85℃、内核供电1.2V的情况进行仿真,如图 2.2 22所示。 图 2.2 22 仿真模型设置 时序仿真完成后,可以在Modelsim的波形窗口中看到图 2.2 23的时序仿真波形。从波形中发现与之前的功能仿真相比有了一些差异,如:存在不希望存在的脉冲、且在200ns时,led相对输入信号有一定时间的逻辑延时。 图 2.2 23 时序仿真波形 IO分配以及生成配置文件 IO分配其方法不唯一,常用的有三种。在标题栏中Assignments—Pin Planner或者直接单击工具栏的Pin Planner进行IO分配,如图 2.2 24所示。同时也可通过编写Tcl文件的方式来实现引脚分配.此处需针对不同板卡进行不同的设置。 图 2.2 24 Pin Planner 以芯路恒AC620开发板为例,最终的引脚分配如图 2.2 25所示。 图 2.2 25 分配好的引脚 此处需注意,在分配好引脚后,仍需再进行一次全编译才能使引脚分配生效。 配置FPGA下载 单击工具栏中的Programmer,如图 2.2 26所示,弹出以下对话框。确认连接好下载器并在Hardware Setup中选中USB-Blaster以及被下载的.sof文件后,单击Start即可将设计好的逻辑电路下载到开发板中,如图 2.2 27所示。 图 2.2 26 程序下载 通过按键以及两根杜邦线控制P2插接件下方的GPIO0 (R1)以及GPIO1(P2)接入不同的电平值,可以观测到led灯(LED0)具有不同的亮灭效果。 图 2.2 27 下载界面
|