高云FPGA系列教程(3):基本IP原语使用和仿真
创始人
2024-03-30 19:42:24
0

文章目录

    • @[toc]
      • 1. GW1NSR-4C支持的IP
      • 2. IP示例1:片上时钟OSC
      • 3. IP示例2:锁相环PLLVR
      • 4. IP示例3:分频器CLKDIV
      • 5. IP核配置修改
      • 6. Modelsim仿真IP
      • 7. 总结
      • 8. 工程下载

本文是高云FPGA系列教程的第3篇文章。

本篇文章介绍高云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)用户指南.pdf

3. 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(//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 = 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=50MHzwire pll_locked;//5.assign//6.always
always @ (posedge clk_div) beginif(!gresetn) begincnt <= 'd0;endelse beginif(cnt >= CNT_MAX)cnt <= 'd0;else cnt <= cnt + 'd1;end
endalways @ (posedge clk_div) beginif(!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. 工程下载

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

  • gw1nsr_4c_ip_demo.rar

本文是高云FPGA系列教程的第3篇文章。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...