FPGA流水灯的设计流程

4.4 流水灯的设计输入
4.4.1 建立fpga工程
完成项目需求分析、电路图分析以及方案设计后,接下来可以进行fpga设计了。如果用户的计算机已安装云源软件gowin fpga designer,双击桌面上的程序图标,即可打开gowin fpga designer。在工作界面中依次单击菜单“file→new”,可打开新建工程(projects)或文件(files)类型选择对话框,如图4-6所示。
图4-6 新建工程或文件界面
选中“projects→fpga design project”条目,或直接单击主界面中的“quick start→new project”图标,即可打开新建工程对话框,在对话框中设置工程的名称(waterlight)和存放路径,单击“next”打开器件选择(select device)对话框,如图4-7所示。
图4-7 fpga 器件选择界面
根据cgd100开发板上的fpga器件型号,在器件系列(series)列表框中选择gw1n,器件(device)列表中选择gw1n-4b,封装(package)列表中选择lqfp144,速度等级(speed)中选择c6/i5,图中的列表框中自动筛选出cgd100开发板对应的fpga型号gw1n-uv4lq144c6/i5,选中该器件型号,依次单击“next→finish”完成工程的创建,且软件自动返回到主界面。
此时打开工程路径所指向的文件夹,可以发现目录中出现了两个子文件夹“impl”、“src”以及cprj类型的工程文件waterlight。其中,impl文件夹存放工程编译后的一些过程文件,src文件夹存放工程中新建的资源文件。可以双击waterlight.gprj直接启动云源软件并打开该fpga工程。
完成工程创建后,如需重新指定fpga设计的目标器件,可以单击云源软件主界面中的目标器件名称,打开器件设置界面重新指定目标器件,如图4-8所示。
图4-8 创建工程后重新设置目标fpga器件界面
4.4.2 verilog hdl程序输入
完成fpga工程建立后,开始编写verilog hdl程序代码进行fpga设计。amd、intel公司的fpga开发环境均提供了原理图方式及hdl代码两种输入方式,云源软件仅提供了hdl代码输入方式。原理图的设计输入方式类似于绘制电路图的设计方式,虽然直观,但十分不便于程序移植和后期代码的维护修改,因此应用很少。本书均采用hdl代码输入的方式进行fpga程序设计。
在gwin fpga designer主工作界面中依次单击菜单“file→new”,打开新建资源界面,在资源界面中选中“files→verilog file”,单击“ok”,在文件名编辑框(name)中输入verilog hdl文件名waterlight,文件存放目录编辑框(create in)自动设置为当前工程目录下的src文件夹下,如图4-9所示。
图4-9 新建verilog文件界面
单击“ok”按键,完成verilog hdl文件的创建,软件主界面的工作区中自动生成名为“waterlight.v”的文件,且该文件处于打开状态,可以在文件中输入设计代码。
在文件中输入下列代码。
//waterlight.v文件
module waterlight(
input clk50m,              //系统时钟:50mhz
input rst_n,                //复位信号:低电平有效
output reg [7:0] led          //8个led灯
);
reg [29:0] cn=0;
always @(posedge clk50m or negedge rst_n)
if (!rst_n) begin
     cn <= 0;
 led 30'd8000_0000) cn <=0;
 else cn <= cn + 1;
 if (cn<30'd1000_0000) led <=8'b0000_0001;
 else if (cn<30'd2000_0000) led <=8'b0000_0010;
 else if (cn<30'd3000_0000) led <=8'b0000_0100;
  else if (cn<30'd4000_0000) led <=8'b0000_1000;
  else if (cn<30'd5000_0000) led <=8'b0001_0000;
  else if (cn<30'd6000_0000) led <=8'b0010_0000;
 else if (cn<30'd7000_0000) led <=8'b0100_0000;
 else led <=8'b1000_0000;
 end
endmodule
上述文件代码实现的是一个8位流水灯功能电路,每个灯点亮0.2s的时间,依次循环点亮,实现流水灯效果。本章仅关注fpga的基本开发流程,关于流水灯的设计思路及verilog hdl语法细节将在后续章节逐步展开讨论。
完成代码输入后保存文件。流水灯程序共有10个信号接口:时钟信号clk50m、复位信号rst_n,以及8根led灯信号。要使设计的程序能够在fpga开发板上正确运行,需要将程序的端口信号与cgd100电路板上的fpga管脚关联起来。完成信号与管脚关联过程称为物理管脚约束。
新建类型为“physical constraints file”,在文件中输入下列代码。
//cgd100.cst文件io_loc clk50m 7;io_port clk50m io_type=lvcmos33;io_loc rst_n 65; //k8io_port rst_n io_type=lvcmos33;io_loc led[0] 23;io_loc led[1] 24;io_loc led[2] 25;io_loc led[3] 26;io_loc led[4] 27;io_loc led[5] 28;io_loc led[6] 29;io_loc led[7] 30;io_port led[0] io_type=lvcmos33;io_port led[1] io_type=lvcmos33;io_port led[2] io_type=lvcmos33;io_port led[3] io_type=lvcmos33;io_port led[4] io_type=lvcmos33;io_port led[5] io_type=lvcmos33;io_port led[6] io_type=lvcmos33;io_port led[7] io_type=lvcmos33; 至此,我们完成了流水灯例程的所有代码输入工作。双击gowin fpga designer主界面中的“run all”工具按键,软件自动完成工程的综合及布局布线工作。如果代码输入正确,则软件界面左侧“process”窗口中的“synthesize”和“place & route”条目均会出现绿色的勾,表示程序综合及布局布线正确,如图4-10所示。
图4-10 程序综合及布局布线成功后的界面
4.5程序文件下载
程序布局布线成功后,在工程目录的“implpnr”路径下会生成扩展名为fs的程序文件。对于流水灯工程实例来讲,生成的程序文件为waterlight.fs。采用usb线连接cgd100开发板和电脑,双击“ program device”条目,启动程序下载工具gowin programmer,同时弹出下载线设置对话框,如图4-11所示。
图4-11 程序下载线设置对话框
按图4-11设置下载线状态,单击“save”,返回到gowin programmer界面。设置“series”为gw1n,“device”为gw1n-4b。单击“operation”,打开下载模式设置界面。fpga最主要的程序下载模式有两种:sram模式及embedded flash模式,前者模式在掉电后程序即丢失,后者模式在掉电后程序不丢失。对于sram模式来讲,在下载模式设置界面中,“access mode”选择sram mode,“operation”选择“sram program”;对于embedded flash模式,在下载模式设置界面中,“access mode”选择embedded flash mode,“operation”选择“embflash erase,program”。在“file name”编辑框中设置下载文件为工程布局布线后生成的waterlight.fs。两种程序下载模式的设置界面如图4-12、4-13所示。
图4-12 sram模式下载模式设置界面
图4-13 embedded flash下载模式设置界面
图4-14 gowin programmer配置界面
完成设置后的gowin programmer界面如图4-14所示。单击“program/configure”工具按钮即可完成程序的下载。程序下载完成后,可以观察到cgd100的8个led灯呈现流水灯效果。
4.6 小结
本章以流水灯实例为例详细介绍了fpga的设计流程。相对于amd、intel等fpga厂商的fpga开发环境来讲,高云云源软件的开发界面及流程都要简单得多,因此更适合fpga初学者快速掌握fpga的设计流程。本章的学习要点可归纳为:
(1)了解fpga的设计流程,并将设计流程与pcb设计流程进行对比分析。
(2)掌握云源软件的基本使用方法及步骤。
(3)理解sram及embedded flash两种下载模式的特点。


FS3144单极性霍尔效应锁存传感器概述及特点
车载扬声器的产品类型
笔记本外壳材料-镁合金和铝合金
电源工程师必须掌握的开关电源EMI五大抑制策略
造成红外热像仪故障的常见原因之一是什么?
FPGA流水灯的设计流程
浅谈餐饮油烟监测的使用方法及其应用特点
王一博与中国移动咪咕公司共同谱写中国滑板时代新篇章
Galaxy Watch表带有望实现测量体脂功能
四芯CMOS模拟IC-RS2268,四通道模拟开关 单刀单掷300MHz
智能感测型静电消除器的原理
Intel酷睿i9-10980XE处理器的性能怎么样
北汽新能源销量压力大 宣布未来将打造高端乘用车
安捷伦科技推出最新E6703H W-CDMA/HSPA实验室应用软件
工控机在服务机器人交互领域中的应用
海信推出旋转屏电视 在CES上博得了不少眼球
沃达丰裁员上千 高管涨年薪百万
【技术分享】Ubuntu上如何使用AWStudio
特控端边云一体化解决方案实现高效实时的互联互通
李飞飞确认将离职的原因是什么?带你回顾谷歌造富神话