高云FPGA教程:IP原语使用与仿真实践

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

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

1. GW1NSR-4C支持的IP

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

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

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

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

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

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

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

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

最终生成的文件:

登录后复制

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_OSC1.2.3.4.5.6.7.8.9.10.11.12.13.14.

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

高云FPGA系列教程(3):基本IP原语使用和仿真_网络协议_05

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

登录后复制

\Gowin\Gowin_V1.9.8.07_Education\IDE\doc\CN\UG286-1.9.4_Gowin时钟资源(Clock)用户指南.pdf1.

3. IP示例2:锁相环PLLVR

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

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

4. IP示例3:分频器CLKDIV

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

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

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

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

顶层文件:

登录后复制

/*************************************************************** * 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.localparamlocalparam 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/2localparam LED_PERIOD2 = 50_000_000 / 10;      //100ms=27_000_000/10//localparam LED_PERIOD1 = 100;      //simulation//localparam LED_PERIOD2 = 200;      //simulation//3.regreg [31:0] cnt;//4.wire wire [31:0] CNT_MAX = (key == KEY_PRESS) ? LED_PERIOD2 : LED_PERIOD1;wire clk_osc;   //250/10=25MHzwire clk_pll;   //25*8=200MHzwire clk_div;   //200/4=50MHzwire pll_locked;//5.assign//6.alwaysalways @ (posedge clk_div) begin    if(!gresetn) begin        cnt <= 'd0;    end    else begin        if(cnt >= CNT_MAX)            cnt <= 'd0;        else             cnt <= cnt + 'd1;    endendalways @ (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, 250MHzGowin_OSC osc_250m(    //Inputs    .oscen(1'b1),        //Outputs    .oscout(clk_osc)    //250/10=25MHz);//25*8=200MHzGowin_PLLVR gwin_pll(    //Inputs    .clkin(clk_osc),    //25MHz    //Outputs    .clkout(clk_pll),   //200MHz    .lock(pll_locked));//200MHz/4=50MHzGowin_CLKDIV gwin_div(    //Inputs    .hclkin(clk_pll),       //200MHz    .resetn(pll_locked),    //Outputs    .clkout(clk_div)        //50MHz);endmodule   //top_hdl end1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99.100.101.102.103.

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

5. IP核配置修改

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

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

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

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

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



这样就可以进行修改了

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

6. Modelsim仿真IP

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

登录后复制

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

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

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

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

高云FPGA系列教程(3):基本IP原语使用和仿真_网络协议_13

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

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

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

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

提示如下:

登录后复制

# ** 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 failed1.2.3.4.5.



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

登录后复制

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

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

高云FPGA系列教程(3):基本IP原语使用和仿真_网络协议_16

仿真波形:

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

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

高云FPGA系列教程(3):基本IP原语使用和仿真_网络协议_18

7. 总结

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

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

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


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空