高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化
文章目录
- @[toc]
- 1. 工程目录创建
- 2. 新建工程
- 3. 设计输入
- 4. 设计仿真
- 5. 综合
- 6. 管脚分配
- 7. 时钟约束
- 8. 比特流文件生成
- 9. 程序下载
- 10. 程序固化
- 11. 总结
- 12. 工程下载
本文是高云FPGA系列教程的第2篇文章。
介绍完高云FPGA开发板,高云FPGA开发环境搭建之后,接下来才是真正的高云FPGA实战开发,如果你有国外FPGA芯片的使用经验,那么对于高云FPGA的使用,也可以很快的上手。
本文介绍基于高云FPGA开发环境——云源软件的使用,介绍如何创建FPGA点灯工程、管脚分配、时钟约束、综合、布局布线、比特流文件生成、下载和固化。
1. 工程目录创建
为了规范的进行开发,建议按照如下文件结构对FPGA工程进行管理,先创建一个文件夹:gw1nsr_4c_fpga_demo
,在这个文件夹下再创建以下文件夹:
- rtl:用于存放Verilog设计文件
- tb:用于存放仿真文件
- modelsim:由于云源软件不支持仿真,需要借助第三方仿真工具进行仿真,此文件夹用于存放modelsim工程文件
- mcu:用于存放MCU工程
- sct:用于存放约束文件,如管脚约束,时钟约束等
(后续实际操作发现,此种文件管理方式不利于工程文件夹的复制和修改)
2. 新建工程
打开高云云源软件教育版,点击新建工程,或者直接按下Ctrl+N
快捷键,打开工程创建向导。
输入工程名称:project
,保存路径选择之前创建的gw1nsr_4c_fpga_demo
,创建工程的同时,会创建一个和工程名称相同的project
文件夹。
以后就可以直接打开project目录下的gprj
后缀的工程文件。
选择芯片型号:GW1NSR-4C
在工程上右键,选择New File
,新建设计文件,在弹出的窗口,输入模块名top_hdl
,文件类型根据需要选择,保存路径为之前创建的rtl
文件夹。
勾选添加到当前工程
3. 设计输入
在云源软件编辑器中输入功能描述,本文以LED点灯为例,结合按键来控制闪烁频率。
实现的功能为:
- 对外部27MHz时钟信号进行计数,控制LED周期性闪烁。
- TangNano 4K板载的两路按键,一路作为复位,一路作为用户按键。
- 用户按键未按下时,LED每500ms翻转一次状态。
- 用户按键被按下后,LED每100ms翻转一次状态。
Verilog源文件
/**************************************************************** Copyright(C), 2010-2022, WeChat:MCU149* ModuleName : top_hdl.v * Date : 2022年9月27日* Time : 20:19:39* Author : WeChat:MCU149* Function : gw1nsr-4c led driver demo* Version : v1.0* Version | Modify* ----------------------------------* v1.0 first version***************************************************************/module top_hdl(//Inputsinput gclk, // 27MHzinput gresetn, input key,//Outputsoutput reg led
);//1.parameter//2.localparam
localparam KEY_PRESS = 1'b0;
localparam KEY_RELEASE = !KEY_PRESS;
localparam LED_ON = 1'b1;
localparam LED_OFF = !LED_ON;localparam LED_PERIOD1 = 27_000_000 / 2 ; //500ms=27_000_000/2
localparam LED_PERIOD2 = 27_000_000 / 10; //100ms=27_000_000/10
//localparam LED_PERIOD1 = 100; //simulation
//localparam LED_PERIOD2 = 200; //simulation//3.reg
reg [31:0] cnt;//4.wire
wire [31:0] CNT_MAX = (key == KEY_PRESS) ? LED_PERIOD2 : LED_PERIOD1;//5.assign//6.always
always @ (posedge gclk) beginif(!gresetn) begincnt <= 'd0;endelse beginif(cnt >= CNT_MAX)cnt <= 'd0;else cnt <= cnt + 'd1;end
endalways @ (posedge gclk) beginif(!gresetn) led <= LED_OFF;else if(cnt == CNT_MAX)led <= !led;// led <= (led == LED_OFF) ? LED_ON : LED_OFF;
end//7.instanceendmodule //top_hdl end
Testbench仿真文件:
`timescale 1ns/1psmodule top_hdl_tb;localparam PERIOD = 10; //nsreg clk;
reg rst_n;
reg key;always #(PERIOD/2) clk <= !clk;initial begin$display("testbench: %s", top_hdl_tb);rst_n = 0;clk = 0;key = 0;#(PERIOD*100)rst_n = 1;#(PERIOD*1000)key = 1;#(PERIOD*1000)key = 0;#(PERIOD*1000)$stop(0);
endtop_hdl top_hdl_ut0(//Inputs.gclk(clk), // 27MHz.gresetn(rst_n), .key(key),//Outputs.led()
);endmodule //top_hdl_tb end
源文件截图:
激励文件截图:
4. 设计仿真
由于云源软件暂时不支持仿真功能,我们还需要借助第三方工具来完成功能仿真,这里我选择的是Modelsim,仿真的波形如下:
和我们的预期设计是一致的,为了缩短仿真时间,我把LED闪烁周期值减小了。
localparam LED_PERIOD1 = 27_000_000 / 2 ; //500ms=27_000_000/2
localparam LED_PERIOD2 = 27_000_000 / 10; //100ms=27_000_000/10
//localparam LED_PERIOD1 = 100; //simulation
//localparam LED_PERIOD2 = 200; //simulation
5. 综合
在进行管脚分配前,需要先进行综合,综合工具为高云自研GowinSynthesis工具,如果有多个设计文件,还需要指定顶层模块的名称,在综合选项右键点击Configuration
指定工程的顶层模块名称为:top_hdl
6. 管脚分配
新建物理(管脚)约束文件,命名为top_sct
,并保存到sct文件夹下。
输入管脚约束文件名。
点击Floor Planner
,打开图形化管脚分配工具。
分配管脚,和开发板上的管脚保持一致
或者直接输入约束语句:
IO_LOC "led" 10;
IO_PORT "led" PULL_MODE=NONE DRIVE=8;
IO_LOC "key" 15;
IO_PORT "key" PULL_MODE=UP;
IO_LOC "gresetn" 14;
IO_PORT "gresetn" PULL_MODE=UP;
IO_LOC "gclk" 45;
IO_PORT "gclk" PULL_MODE=UP;
7. 时钟约束
时序约束不是必须要做,可以省略。
新建时序约束文件,命名为top_sdc
,也保存到sct文件夹中。
点击时序约束Timing Constraints Editor
,打开时钟约束工具。
这里只对外部时钟进行约束,右键点击Ports->gclk
,Add Clock
,输入时钟频率为27MHz。
或者直接输入以下语句:
create_clock -name gclk -period 37.037 -waveform {0 18.518} [get_ports {gclk}]
8. 比特流文件生成
点击Place and Route
,生成比特流文件,速度很快,几秒钟,比国外的EDA环境快很多!
查看时序报告,可以看到满足设计要求,最大频率可以到128MHz。
查看逻辑资源占用情况
9. 程序下载
点击Program Device
,打开编程工具,执行编程。
配置为SRAM模式,选择project/impl/pnr
下的fs格式的比特流文件。这个模式是下载到内部RAM中,掉电程序会丢失。
右键执行编程,下载速度很快。
10. 程序固化
选择Embedded Flash Mode
会把程序固化到内部Flash中,掉电程序不丢失,上电程序瞬时启动,同样是选择fs文件。
fs程序文件的保存路径
fs文件的内容格式
11. 总结
相比于国外FPGA厂商EDA开发环境,几个G到几十个G的大小,高云云源软件安装包也很小巧,界面也很简洁,综合速度非常快,是我没想到的,好像在使用单片机一样,点一下就编译完成了,以本文简单的LED示例工程为例,比特流文件几乎在几秒钟内生成;无论是下载比特流文件到RAM还是Flash中,速度都很快,而且只有一种fs程序文件格式,不用再进行bit/mcs转换;云源软件自带的编辑器也很好用,和Notepad++界面差不多,而且快捷键很方便,具有基本的自动补全功能。
12. 工程下载
以下链接是本次笔记中建立的高云FPGA工程,开发环境是Gowin V1.9.8.07 Education
- gw1nsr_4c_fpga_demo.rar
本文是高云FPGA系列教程的第2篇文章。
高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化相关推荐
- 高云FPGA系列教程(5):ARM点灯工程设计
文章目录 @[toc] 1. ARM核定制 2. ARM核程序设计 3. ARM程序烧写 4. 工程下载 本文是高云FPGA系列教程的第5篇文章. 前面几篇笔记都是介绍的高云GW1NSR-4C FPG ...
- 高云FPGA系列教程(基于GW1NSR-4C TangNano 4K开发板)
文章目录 @[TOC] 已完成 待完成 已完成 国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核 高云FPGA系列教程(1):FPGA和ARM开发环境搭建 高云FPGA系列教程( ...
- 高云FPGA系列教程(3):基本IP原语使用和仿真
文章目录 @[toc] 1. GW1NSR-4C支持的IP 2. IP示例1:片上时钟OSC 3. IP示例2:锁相环PLLVR 4. IP示例3:分频器CLKDIV 5. IP核配置修改 6. Mo ...
- 高云FPGA系列教程(1):FPGA和ARM开发环境搭建
文章目录 @[toc] 1. 获取安装包 2. 申请License 3. 安装高云FPGA开发环境 4. 安装高云MCU开发环境 5. 替换TangNano 4K专用下载软件 总结 本文是高云FPGA ...
- FPGA verilog can mcp2515 altera xilinx工程 代码 程序
FPGA verilog can mcp2515 altera xilinx工程 代码 程序 -altera.xilinx工程 均提供 -标准帧.扩展帧 均提供 -提供仿真激励文件testbench ...
- 分享ActionScript视频系列教程——第31讲 聊天室程序
分享ActionScript视频系列教程--第31讲 聊天室程序 本次视频演示了利用ActionScript 3.0制作聊天室的过程.本案例通过HTTP和RTMP两种协议分别实现聊天室功能.另外,本次 ...
- Keil(MDK-ARM-STM32)系列教程(四)工程目标选项配置(Ⅱ)
Ⅰ.写在前面 本文接着上一篇文章"工程目标选项配置(Ⅰ)"进行讲述工程目标选项中后五项的配置,也就是C/C++.Asm.Linker.Debug.Utilities这五项配置的具体 ...
- HAL库与Cubemx\rt-thread Nano系列教程-01-新建HAL工程及移植RT-Nano到Alios Developer Kit
Part1教程计划 1第一阶段 基于Alios DevelopeKit开发板(主控STM32L496VGT6); HAL库与cubemx开发,RT_THread作为操作系统使用,仅仅是作为操作系统,目 ...
- fpga开发教程 labview_LabVIEW FPGA教程
导入 LabVIEW FPGA 硬件的同时通过 LabVIEW FPGA 程序框图 与它进行通讯的框架.一旦导入成功,相对于 LabVIEW FPGA , IP 可以独立地.并行地运行. IP 既能以 ...
- Nexys4 DDR 开发板程序下载与固化【FPGA】
Nexys4 DDR开发板 Nexys4 DDR开发板,使用的是 XC7A100T-1CSG324C FPGA芯片,当然还有一堆外设,使用Vivado软件开发. 拿到板子,最先关注的就是供电方式:Ne ...
最新文章
- Kubernetes的Service
- NS4225D 类音频功率放大器 - 失败告终
- web页面版权部分的显示问题
- python 删除文件、目录_python实现删除文件与目录的方法
- no nlsxbe in java.library.path
- 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,使其和等于 m
- pytorch数据加载时报错OSError: [Errno 22] Invalid argument
- 充电枪cp信号控制板_筋膜枪究竟是不是智商税?体验评测后,我的回答更肯定了...
- Berkeley DB Java Edition
- 2021高考成绩查询镇远一中,【护航高考 消防同行】——镇远消防圆满完成高考期间消防安保任务...
- 聊聊jQuery is not defined
- 电商产品经理:如何搭建会员管理体系(多图干货)
- 常用纽扣电池的型号对照表
- mac备忘录html,MAC 使用备忘录
- 万字长文的Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
- [涛思数据库taosdata学习打卡系列]-001安装
- Android 图片文件读取
- OpenVR学习01 成功打开了VR设备
- 【高等数学笔记】证明:闭包一定是闭集
- 提升效率之如何打印出漂亮的带颜色的日志(输出高亮)
热门文章
- [PDDL人工智能] 01.PDDL规划器安装及入门详解(规划领域定义语言)
- 家用投影机预埋布线图_家庭影院装修如何布线(装修前必看·附图)
- 我爱淘冲刺阶段站立会议每天任务4
- MIT/GNU Scheme用户手册(八) Edwin
- Falsy Bouncer
- 一个WEB应用的开发流程 供学习用!
- 面试题——————JAVA完成人民币大写转化
- java金额小数位,java 数字转大写金额,小数部分太简单略
- 实现上下拉刷新MJRefresh
- vue基于vant实现上拉加载下拉刷新