文章目录

  • @[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->gclkAdd 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点灯工程创建、程序下载和固化相关推荐

  1. 高云FPGA系列教程(5):ARM点灯工程设计

    文章目录 @[toc] 1. ARM核定制 2. ARM核程序设计 3. ARM程序烧写 4. 工程下载 本文是高云FPGA系列教程的第5篇文章. 前面几篇笔记都是介绍的高云GW1NSR-4C FPG ...

  2. 高云FPGA系列教程(基于GW1NSR-4C TangNano 4K开发板)

    文章目录 @[TOC] 已完成 待完成 已完成 国产FPGA高云GW1NSR-4C,集成ARM Cortex-M3硬核 高云FPGA系列教程(1):FPGA和ARM开发环境搭建 高云FPGA系列教程( ...

  3. 高云FPGA系列教程(3):基本IP原语使用和仿真

    文章目录 @[toc] 1. GW1NSR-4C支持的IP 2. IP示例1:片上时钟OSC 3. IP示例2:锁相环PLLVR 4. IP示例3:分频器CLKDIV 5. IP核配置修改 6. Mo ...

  4. 高云FPGA系列教程(1):FPGA和ARM开发环境搭建

    文章目录 @[toc] 1. 获取安装包 2. 申请License 3. 安装高云FPGA开发环境 4. 安装高云MCU开发环境 5. 替换TangNano 4K专用下载软件 总结 本文是高云FPGA ...

  5. FPGA verilog can mcp2515 altera xilinx工程 代码 程序

    FPGA verilog can mcp2515 altera xilinx工程 代码 程序 -altera.xilinx工程 均提供 -标准帧.扩展帧 均提供 -提供仿真激励文件testbench ...

  6. 分享ActionScript视频系列教程——第31讲 聊天室程序

    分享ActionScript视频系列教程--第31讲 聊天室程序 本次视频演示了利用ActionScript 3.0制作聊天室的过程.本案例通过HTTP和RTMP两种协议分别实现聊天室功能.另外,本次 ...

  7. Keil(MDK-ARM-STM32)系列教程(四)工程目标选项配置(Ⅱ)

    Ⅰ.写在前面 本文接着上一篇文章"工程目标选项配置(Ⅰ)"进行讲述工程目标选项中后五项的配置,也就是C/C++.Asm.Linker.Debug.Utilities这五项配置的具体 ...

  8. HAL库与Cubemx\rt-thread Nano系列教程-01-新建HAL工程及移植RT-Nano到Alios Developer Kit

    Part1教程计划 1第一阶段 基于Alios DevelopeKit开发板(主控STM32L496VGT6); HAL库与cubemx开发,RT_THread作为操作系统使用,仅仅是作为操作系统,目 ...

  9. fpga开发教程 labview_LabVIEW FPGA教程

    导入 LabVIEW FPGA 硬件的同时通过 LabVIEW FPGA 程序框图 与它进行通讯的框架.一旦导入成功,相对于 LabVIEW FPGA , IP 可以独立地.并行地运行. IP 既能以 ...

  10. Nexys4 DDR 开发板程序下载与固化【FPGA】

    Nexys4 DDR开发板 Nexys4 DDR开发板,使用的是 XC7A100T-1CSG324C FPGA芯片,当然还有一堆外设,使用Vivado软件开发. 拿到板子,最先关注的就是供电方式:Ne ...

最新文章

  1. Kubernetes的Service
  2. NS4225D 类音频功率放大器 - 失败告终
  3. web页面版权部分的显示问题
  4. python 删除文件、目录_python实现删除文件与目录的方法
  5. no nlsxbe in java.library.path
  6. 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,使其和等于 m
  7. pytorch数据加载时报错OSError: [Errno 22] Invalid argument
  8. 充电枪cp信号控制板_筋膜枪究竟是不是智商税?体验评测后,我的回答更肯定了...
  9. Berkeley DB Java Edition
  10. 2021高考成绩查询镇远一中,【护航高考 消防同行】——镇远消防圆满完成高考期间消防安保任务...
  11. 聊聊jQuery is not defined
  12. 电商产品经理:如何搭建会员管理体系(多图干货)
  13. 常用纽扣电池的型号对照表
  14. mac备忘录html,MAC 使用备忘录
  15. 万字长文的Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
  16. [涛思数据库taosdata学习打卡系列]-001安装
  17. Android 图片文件读取
  18. OpenVR学习01 成功打开了VR设备
  19. 【高等数学笔记】证明:闭包一定是闭集
  20. 提升效率之如何打印出漂亮的带颜色的日志(输出高亮)

热门文章

  1. [PDDL人工智能] 01.PDDL规划器安装及入门详解(规划领域定义语言)
  2. 家用投影机预埋布线图_家庭影院装修如何布线(装修前必看·附图)
  3. 我爱淘冲刺阶段站立会议每天任务4
  4. MIT/GNU Scheme用户手册(八) Edwin
  5. Falsy Bouncer
  6. 一个WEB应用的开发流程 供学习用!
  7. 面试题——————JAVA完成人民币大写转化
  8. java金额小数位,java 数字转大写金额,小数部分太简单略
  9. 实现上下拉刷新MJRefresh
  10. vue基于vant实现上拉加载下拉刷新