GOWIN软件使用

1、管脚复用

根据自己需求把复用管脚勾选上,管脚当普通管脚使用 

JTAG设置成普通管脚,下载程序时候JTAGEN管脚需要上拉高电平(可以在下载器线上上拉个电阻,下载后把下载线拔走,否则JTAG管脚无法使用,管脚充裕最好不使用JTAG)

2、程序下载

下载Access Mode选择默认是SRAM,这下载是程序立即被启用,设备重启这程序会失效,主要测试时候使用。有重启操作程序下载到Flash中

3、时序约束

最近使用GWINR-9芯片做项目,逻辑单元用到80%以上,下图红框显示告警,红色的

刚开始没搭理(以前做的都是低速的,资源充足,不影响业务) ,调试几天业务一直不正常,没辙,排除法。先把报警的解决。

问了高云技术支持,出现跨时钟域了,让加时序约束,抓瞎,以前没约束过。还好技术提供文档,谢谢!!。

 时序约束主要约束时钟频率和不同时钟关系,跨时钟域主要是不同时钟域间的信号传递,编译时软件认为时钟间有关联。(我的理解,哈哈)

①编译完进入配置界面,后右击选择Create Clock,时钟频率约束,

         在1填个方便记忆的名称,2选择大概的时钟频率(可以不准,可以比实际大,但不要比实际小很多),3点击...出现选择框,选择实际信号。

4选择信号类型,芯片管脚选get_ports,其他选择get_nets,在5填信号在程序中具体名称查找到后执行6,然后OK。时钟频率约束好了

②时钟关系约束 

        点击false Path后在右边右击出现set false Path.  1与2后面...选择需要配置的时钟(直接用上面约束的时钟就可以)

        理解:to时钟是from时钟衍生的或有紧密关系的,

        设备晶振输入时钟CLK25M,可以在from不选,在to选择CLK25M,这样其他时钟就不会影响CLK25M时钟

        设备计数复位时钟CLK50HZ,只有from,没有to,可以from选择CLK50HZ,to不选,这样CLK50HZ不会影响其他时钟

4、 GWINR-9中PSRAM的IP核使用

给PSRAM核时钟,4中选择90,不能错。3中CLKOUT是PSRAM核中操作SRAM的时钟,5中CLOCKD是业务逻辑使用时钟

PSRAM的IP核:1默认是32根据自己需求,我这选择16,Burst Num自动变成4,意思一次写4个数据(4*数据宽度64bit) 

问题:①地址+2(一个数据占2个地址,PSRAM中有2个颗粒)读写数据,连续读4个数据一样的,与写入数据不符

原因:burst Num是4,一次最少写4个数据,地址0写有效,2、4、6写无效。所以连续4个数据一样。(读可以+2读,但是读出来数据是4个,只是我这用第1个)

问题:②做个fifo,时钟1往里面写数据,时钟2读出数据做其他用,fifo一会出现空一会满现象,乱跳。

原因:时钟1和时钟2与PSRAM的IP核时钟域不一样,获取读写信号获取错误。

下图:时钟2读写操作:黄色是半空标志,出现后需要从PSRAM读数据,蓝色电平变换1次表示读出1个数据。正常应该是半空标志出现读1个数据,成功后半空标志消失,但是时钟2与PSRAM的IP核不在一个时钟域中,信号出现亚稳态

亚稳态产生消除: 亚稳态的产生机理、消除办法_亚稳态产生的原因及消除方法-CSDN博客

刚开始认为亚稳态是个斜线,造成影响只是获取信号可以比预期的快或慢一个周期,不会影响现在业务判断,现在发现亚稳态是波浪形的,不同时钟域采集肯定出问题 

解决方法:fifo读写操作直接使用PSRAM的IP核同样时钟域时钟(rppl输出的CLKOUTD做读写需求判断,PSRAM接口输出的CLKOUT/2做具体读写操作)

5、高云IP核修改

一直以为高云IP核配置好后,没修改功能,只能重新生成替换,每次查找*.ipc文件,按照里面参数重新生成一个IP。最近找到资料,是可以的!!按123步骤打开需要修改的IP核修改就可以

6、license到期更新:双击安装目录中的license_config_gui.exe

F:\Gowin\Gowin_V1.9.9_x64\IDE\bin\license_config_gui.exe

### Gowin FPGA 点灯程序 示例代码 Gowin FPGA 是一种性价比较高的可编程逻辑器件,常用于嵌入式系统设计。对于初学者来说,“点灯”是一个非常基础且重要的实验项目。以下是基于 Gowin FPGA 的点灯程序示例代码。 #### Verilog 实现 LED 点亮 以下是一段使用 Verilog 编写的简单 LED 控制代码: ```verilog module led_blink ( input wire clk, // 主时钟信号 output reg led // 输出到LED的信号 ); // 定义计数器变量 reg [24:0] counter; always @(posedge clk) begin if (counter == 25'd50_000_000) begin // 假设时钟频率为50MHz counter <= 25'd0; // 计数器清零 led <= ~led; // 切换LED状态 end else begin counter <= counter + 1'b1; // 计数器加一 end end endmodule ``` 上述代码实现了一个简单的 LED 闪烁功能[^2]。通过一个 25 位的计数器来分频主时钟信号(假设为主时钟为 50 MHz),从而控制 LED 每隔一定时间切换一次状态。 --- #### 使用 PicoRV32 软核加载点灯程序 如果希望利用 NANO 9K 提供的 PICORV32 软核运行更复杂的点灯程序,则可以通过 ISP 下载工具将编译后的二进制文件烧录至 FPGA 中。以下是一个简单的 C 语言点灯程序示例: ```c #include "pico-sdk/pio.h" #define LED_PIN 25 // 假设 LED 连接在 GPIO25 上 int main() { gpio_init(LED_PIN); // 初始化GPIO引脚 gpio_set_dir(LED_PIN, true); // 设置为输出模式 while (true) { gpio_put(LED_PIN, true); // 打开LED sleep_ms(500); // 延迟500ms gpio_put(LED_PIN, false); // 关闭LED sleep_ms(500); // 延迟500ms } } ``` 此代码片段展示了如何配置 GPIO 引脚并使其周期性地改变电平状态以点亮或熄灭 LED[^3]。 --- #### 工具链与开发环境搭建 为了完成以上操作,需先安装 Gowin FPGA 开发套件以及对应的 SDK 或 IDE。具体步骤如下: - **硬件连接**:确保 NANO 9K 板卡已正确连接至上位机并通过 USB-TTL 接口供电。 - **软件准备**:下载并安装 GowinSuite 和相关驱动程序。 - **工程创建**:新建一个 Gowin FPGA 工程,在顶层设计中加入所需模块(如上文提到的 `led_blink`)。 - **综合与布局布线**:执行综合、适配流程后生成比特流文件。 - **程序下载**:借助 GowinProg 将比特流写入目标设备内部 FLASH 存储单元。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值