原创 【技术笔记】高云FPGA学习笔记4——基本IP原语使用和仿真

2022-10-2 22:44 1226 4 3 分类: FPGA/CPLD 文集: 开发板评测

本文是高云FPGA学习笔记系列的第4篇文章,首发于面包板社区

本篇文章介绍高云GW1NSR-4C FPGA基本原语和IP配置、使用和修改,以及如何在ModelSim环境下仿真这些IP和原语,基于TangNano 4K开发板。

1. GW1NSR-4C支持的IP

打开高云云源软件,点击工具->IP Core Generator可以调出高云IP核生成工具。

可以看到当前使用的器件支持的各类型IP核,如果不支持,IP核为灰色不可选,右侧有当前IP使用的中英文说明文档,点击可以直接下载。

2. IP示例1:片上时钟OSC

GW1NSR-4C芯片内部集成了一颗250MHz的时钟晶体,可以配置2-128偶数分配系数,带使能端。本次示例我们配置成输出25MHz输出,即10分频。

模块名称,保存路径可自定义,这里保持默认设置。

最终生成的文件:

module Gowin_OSC (oscout, oscen);

output oscout;
input oscen;

OSCZ osc_inst (
  .OSCOUT(oscout),
  .OSCEN(oscen)
);

defparam osc_inst.FREQ_DIV = 10;
defparam osc_inst.S_RATE = "SLOW";

endmodule //Gowin_OSC

我们也可以在自己的设计中直接例化OSCZ原语来使用。

关于高云FPGA时钟资源的介绍,可以查看云源软件安装目录下的UG286文档:

\Gowin\Gowin_V1.9.8.07_Education\IDE\doc\CN\UG286-1.9.4_Gowin时钟资源(Clock)用户指南.pdf3. IP示例2:锁相环PLLVR

和OSCZ一样,选择PLLVR进行配置,指定PLL输入频率为25MHz,输出频率为200MHz。

4. IP示例3:分频器CLKDIV

选择CLKDIV配置分频器系数为4

为了同时调用这几个IP,我们按照如下图进行连接。

顶层文件:

/***************************************************************
* Copyright(C), 2010-2022, WeChat:MCU149.
* ModuleName : top_hdl.v
* Date       : 2022年10月02日
* Time       : 20:19:39
* Author     : WeChat:MCU149
* Function   : gw1nsr-4c led driver demo
* Version   : v1.0
*     Version | Modify
*     ----------------------------------
*       v1.0   .....
***************************************************************/

module top_hdl(
   //Inputs
   input gclk,      // 27MHz
   input gresetn,    
   input key,
   
   //Outputs
   output 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 = 50_000_000 / 2 ;      //500ms=27_000_000/2
localparam LED_PERIOD2 = 50_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;

wire clk_osc;   //250/10=25MHz
wire clk_pll;   //25*8=200MHz
wire clk_div;   //200/4=50MHz

wire pll_locked;

//5.assign

//6.always
always @ (posedge clk_div) begin
   if(!gresetn) begin
       cnt <= 'd0;
   end
   else begin
       if(cnt >= CNT_MAX)
           cnt <= 'd0;
       else
           cnt <= cnt + 'd1;
   end
end

always @ (posedge clk_div) begin
   if(!gresetn)
       led <= LED_OFF;
   else if(cnt == CNT_MAX)
       led <= !led;
       // led <= (led == LED_OFF) ? LED_ON : LED_OFF;
end

//7.instance

//osc onchip, 250MHz
Gowin_OSC osc_250m(
   //Inputs
  .oscen(1'b1),
   
   //Outputs
  .oscout(clk_osc)    //250/10=25MHz
);

//25*8=200MHz
Gowin_PLLVR gwin_pll(
   //Inputs
  .clkin(clk_osc),    //25MHz

   //Outputs
  .clkout(clk_pll),   //200MHz
  .lock(pll_locked)
);

//200MHz/4=50MHz
Gowin_CLKDIV gwin_div(
   //Inputs
  .hclkin(clk_pll),       //200MHz
  .resetn(pll_locked),

   //Outputs
  .clkout(clk_div)        //50MHz
);

endmodule   //top_hdl end

和上一篇笔记实现的效果是一样的,按键按下LED快闪,按键释放LED慢闪,只不过本工程没使用到外部的晶体。

5. IP核配置修改

云源软件支持对已经配置的IP核进行修改,说实话我一开始并没有找到这个功能,还以为无法修改呢,后来看了官方的视频教程才发现支持修改已经配置的IP。

首先打开IP核生成界面,点击打开图标。

找到要修改的IP核文件夹下的ipc文件打开。

这样就可以进行修改了

6. Modelsim仿真IP

高云云源软件不包含仿真工具,需要借助第三方工具来完成功能仿真,如果涉及到官方的IP调用,比如PLL,OSC,FIFO等IP的仿真,需要进行添加一个官方的IP仿真库文件,文件路径为:

D:\Program\Gowin\Gowin_V1.9.8.07_Education\IDE\simlib\gw1n\prim_sim.v

这个文件大小约600KB,近两万行代码,包括高云所有IP核的仿真模型,可以在Modelsim或其他第三方仿真工具中添加调用。

高云IP核仿真库文件内容完全开放,没有进行加密处理。

编译通过,仿真时会提示调用的模块未定义

prim_sim.v添加到Modelsim工程,再次编译,执行仿真。

提示如下:

# ** Note: (vsim-3812) Design is being optimized...
#
# ** Error: (vopt-7052) D:/Program/Gowin/Gowin_V1.9.8.07_Education/IDE/simlib/gw1n/prim_sim.v(13111): Failed to find 'GSR' in hierarchical name '/GSR/GSRO'.
#
# Optimization failed

在Testbench中例化如下全局复位模块,因为仿真库中调用了此模块:

GSR GSR(
  .GSRI(1'b1)
);

重新编译,成功执行仿真。

仿真波形:

OSC、PLL、DIV输出时钟频率和配置是一致的。

7. 总结

总的来说,GW1NSR-4C这颗FPGA可以使用的IP核不算太多,但基本的PLL,FIFO,RAM,DSP都有,还有一些非常实用的协议IP,如I2C,SPI,UART主机从机,以及之间的相互转换都有相应的IP,还有一些多媒体相关的IP,可以满足大多数的需求。

联合ModelSim仿真也比较简单,只需要添加一个仿真库文件即可完成所有IP的仿真,还是非常方便的。

8. 工程下载

本次示例中的工程,可以访问下方链接下载:

作者: whik, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3887760.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

给作者打赏,鼓励TA抓紧创作!

赞赏支持
点赞 4
赞赏0

文章评论1条评论)

登录后参与讨论

乖乖兔爸爸 2022-10-10 09:55

从硬件接口来看,摄影头--FPGA--HDMI ,正好是完美的通路
我对加解密,视频编解码 相关的 IP-Core 很感兴趣,可惜没有找到
不过 4068的资源,估计AI什么的,比较难放进了
相关推荐阅读
whik 2022-10-08 23:26
【技术笔记】高云FPGA学习笔记6——ARM点灯工程设计
【技术笔记】高云FPGA学习笔记6——ARM点灯工程设计本文是高云FPGA学习笔记系列的第6篇文章,首发于面包板社区:【技术笔记】高云FPGA学习笔记1——TangNano 4K开发板简介【技术笔记】...
whik 2022-10-06 20:42
【技术笔记】高云FPGA学习笔记5——片上逻辑分析仪GAO的使用
本文是高云FPGA学习笔记系列的第5篇文章,首发于面包板社区:【技术笔记】高云FPGA学习笔记1——TangNano 4K开发板简介【技术笔记】高云FPGA学习笔记2——FPGA和ARM开发环境搭建【...
whik 2022-09-28 22:42
【技术笔记】高云FPGA学习笔记3——FPGA点灯工程创建、下载和固化
本文是高云FPGA学习笔记系列的第3篇文章,首发于面包板社区: 【技术笔记】高云FPGA学习笔记1——TangNano 4K开发板简介 【技术笔记】高云FPGA学习笔记2——FPGA和ARM开...
whik 2022-09-26 23:05
【技术笔记】高云FPGA学习笔记2——FPGA和ARM开发环境搭建
上一篇文章分享了基于高云FPGA的开发板——TangNano 4K,介绍了开发板的硬件资源以及高云FPGA的特性,文末提到高云的FPGA还不支持SerDes高速串行接口,今天(09-26)高云半导体官...
whik 2022-09-25 23:01
【技术笔记】高云FPGA学习笔记1——TangNano 4K开发板简介
标题1:不足百元的国产FPGA开发板,集成ARM Cortex-M3硬核!标题2:国产FPGA开发板上手体验:6x6mm的FPGA芯片还带ARM硬核!之前参与了面包板社区组织的国产替代话题活动,我发表...
我要评论
1
4
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /4 下一条