草庐IT

初试高云FPGA

maaaaark 2023-03-28 原文

前言

之前一直眼馋Sipeed的Tang系列,正好遇到有工程需要高速控制并行总线,就买了NANO 9K和Primer 20K试试水
买回来先拆的贵的20k,结果发现Sipeed设计师有奇怪的脑回路:

  • 核心板没有指示灯,没有集成下载器
  • tf卡在核心板与底板中间藏着,JTAG丝印在背面
  • JTAG接口和官方下载器需要扭麻花形式连接
  • 调整供电bank需要手动拆除0R电阻。
  • 板载晶振27MHz,很奇怪的频率


结果就是失去了调试的兴趣,随便写了个分频器输出1pps脉冲了事。

之后拆了NANO 9K,这个就比20K好用多了,板载一串LED,虽然一些板载资源占用了IO,但还是比较方便调试的。

Sipeed还有个问题就是,例程太少,点灯、点屏幕,没了。好在高云的手册比较多,虽然各个功能的手册是分别发布的,没有系统教程,但好在详细。摸索了一天,算是明白了这个工具要怎么用,因此先写一篇博客记录一下。

软件准备

  1. 前往高云官网下载软件和各种参考手册。推荐使用教育版,不用申请license。
  2. 安装下载好的云源软件,我安装的1.9.8.09教育版,有的教程说要另外下载programmer,该版本已自带。软件安装问题可以参考SUG501手册。
  3. 打开软件,界面功能问题可以参考SUG100手册。
  4. 新建工程,点灯测试,详见Sipeed点灯例程
  5. 综合、约束、下载之类的基础操作在例程中已有详解,这里列一下可能用到的手册
    • 综合问题在SUG550
    • 约束在SUG935和SUG940
    • 下载在SUG502
    • 其他高级功能样例在SUG918,所有功能有独立说明手册
      所以说高云手册虽然不系统,但好在很详细

IP核调用

IP核怎么调用,没有专门教程参考,仅在SUG100中放了个界面。各各IP核手册中也只是用Verilog或VHDL实例化原语,搞得我这Verilog入门菜鸟一头雾水。在此随手记录一下IP核调用方式。

项目目标

点灯教程中系统时钟来自于板载时钟27MHz,这个时钟我猜测是为了保留3M时钟基频,以便精确PLL出如21M、12M、24M等时钟(那为什么不用21M时钟,还包含7M基频)。

但是我看27MHz不顺眼,于是项目目标就是,利用GW1NR-9C自带的可编程时钟,产生一个25MHz频率,再用这个25MHz进PLL产生100MHz时钟,同时把25MHz用缓冲器输出到引脚上,以检测板子的信号完整性。最后固化到内部Flash,完成烧录与脱机运行。

这样,该项目检测了逻辑单元、IO、IO速率、PLL、CLK,只剩下DSP、SRAM和一些PHY没测试了,之后可以写一个DDS工程,测一下DSP和SRAM。

IP核配置

  1. 首先是打开IP核界面,选择时钟模型,选择OSC,双击
  2. 可以看到内部可编程时钟的配置是很简单的,只需要填一个分频数就好。该IP核的详细说明见UG286,具体搭载的时钟原频率是多少,不要参考软件中IP核的说明,要参考IC的Datasheet,如GW1NR-9的DS117的晶振时钟章节

  3. 软件自动生成verilog文件,自己也可以仿照该文件直接在主模型文件中例化原语。
  4. 在主模型文件中将该OSC模型实例化
  5. 接着,在IP核管理界面选择rPLL模块,一般使用普通模式即可,填入输入时钟、输出时钟、误差容忍度,点击计算即可自动配置。需注意,有些需求时钟是不能产生的,或者它自动生成参数后综合软件认为不在VCO适用频率内,这时就需要手动凑数计算了。详细参数计算综合报错时会有,UG286也有计算方法。

  6. 在主文件中将该PLL实例化
  7. 直接在主文件中将25M时钟连到OBUF上,输出带缓冲的clk_out
  8. 对点灯例子中的一些计数值稍作修改,即可完成代码
  9. 综合约束,烧录。烧录选择烧录在内部Flash里,这样可以离线运行

代码如下:

module led (
    input sys_rst_n,        // reset input
    output reg [5:0] led,    // 6 LEDS pin
    output wire clk_out
);

reg [31:0] counter;
wire pll_clk;
wire sys_clk;

Gowin_OSC SYSOSC(sys_clk);
Gowin_rPLL APLL(pll_clk,sys_clk);
OBUF uut(
    .O(clk_out),
    .I(sys_clk)
);

always @(posedge pll_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 32'd0;
    else if (counter < 32'd49_999_999)       // 0.5s delay
        counter <= counter + 1'b1;
    else
        counter <= 32'd0;
end

always @(posedge pll_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 6'b111110;
    else if (counter == 32'd49_999_999)       // 0.5s delay
        led[5:0] <= {led[4:0],led[5]};
    else
        led <= led;
end

endmodule

约束:

有关初试高云FPGA的更多相关文章

  1. FPGA 之 时钟,时钟域, 以及复位系统的设计 - 2

    FPGA时钟和时钟域时钟树所谓时钟树为FPGA内部资源,分:全局时钟树,区域时钟树,IO时钟树原则上优先使用全局时钟树,在GT接口上使用IO时钟树,一般工具也会对GT时钟加以限制;时钟树使用方式正确的物理连接FPGA会由物理管脚专门用于全局时钟设置,通过查询数据手册可以在PCB设计阶段进行确认,当外部时钟接入此管脚时,工具会自动占有全局时钟树资源,当接入普通信号时不会分配时钟树资源;恰当的代码描述原语的使用,即BUFG的使用,可以将PLL的输出等内部时钟进行全局时钟资源的分配;IO时钟资源需要参考相应接口手册,以ultrascale的GTH为例,其JESD204的时钟方案针对不同的子类会由不同

  2. MicroBlaze在纯FPGA下 Xilinx SDK固化程序到外部SPI FLASH - 2

    外部SPIFLASH:MicronN25Q128A13ESE40G(128Mbit(16MByte))FPGA:XC7A100T CPU:Microblaze第一种情况:Microblaze在简单的应用,比如运行LED,IIC,SPI,UART之类的低俗接口驱动,或做一些简单的辅助型工作时,一般生成的applicationelf文件都不大,在10几KB或者几十,百几KB,此时使用FPGA内部的BRAM资源已经足够。XC7A100T本身就有600几KB的BRAM资源。这种情况下直接将硬件流文件和elf文件合并为download.bit文件,在直接烧录到外部SPIFLAH即可。1.Xilinx--

  3. FPGA配置之SelectMAP总线 - 2

    1FPGA启动流程图1 7SerialsFPGA配置流程1.1DevicePower-Up1.2ClearConfigurationMemory在上电后的任何时间内,可以对Slave-FPGA配置存储器(BlockRAM)进行复位处理。复位方式是将PROGRAM_B信号拉低(下降沿有效)。1.3SampleModePins当复位完成后,INIT_B恢复高电平,Slave-FPGA对M[2:0]模式引脚进行采样,然后开始在CCLK上升沿接收配置数据。1.4Synchronization在接收配置数据前,Slave-FPGA首先进行总线位宽检测。主机发送的配置文件中,“BusWidthAutoDe

  4. FPGA面试题目笔记(二)——同步异步D触发器、静动态时序分析、分频设计、Retiming - 2

    文章目录1、行为级与RTL级的区别1.1RTL级(可综合成门级电路)1.2行为级2、关于LUT2.1LUT是什么2.2N维查找表2.3FPGA中的LUT3、`include和条件编译4、写异步D触发器(扬智电子笔试)4.1八位同步D触发器4.2具有异步清零,同步复位信号功能的D触发器5、静态、动态时序分析的优缺点(威盛VIA2003.11.06上海笔试试题)6、采用二选一多路器mux2和inv非门实现异或操作(飞利浦-大唐笔试)7、寄存器和锁存器的区别,为什么多用寄存器,行为级描述中锁存器如何产生8、D触发器实现2分频的Verilog描述(汉王笔试)9、D触发器实现带同步高置数和异步高复位端的

  5. fpga卷积神经网络加速器,FPGA卷积神经网络综述 - 2

    如何使用FPGA加速机器学习算法如何使用FPGA加速机器学习算法 当前,AI因为其CNN(卷积神经网络)算法出色的表现在图像识别领域占有举足轻重的地位。基本的CNN算法需要大量的计算和数据重用,非常适合使用FPGA来实现。上个月,RalphWittig(XilinxCTOOffice的卓越工程师)在2016年OpenPower峰会上发表了约20分钟时长的演讲并讨论了包括清华大学在内的中国各大学研究CNN的一些成果。在这项研究中出现了一些和CNN算法实现能耗相关的几个有趣的结论:①限定使用片上Memory;②使用更小的乘法器;③进行定点匹配:相对于32位定点或浮点计算,将定点计算结果精度降为16

  6. 【正点原子FPGA连载】第二十三章 DDS信号发生器实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0 - 2

    1)实验平台:正点原子MPSoC开发板2)平台购买地址:https://detail.tmall.com/item.htm?id=6924508746703)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-340252-1-1.html第二十三章DDS信号发生器实验DDS(DirectDigitalSynthesizer)即直接数字式频率合成器,是一种新型的频率合成技术。与传统的频率合成器相比,DDS具有相对带宽大,频率转换时间短,稳定性好,分辨率高,可灵活产生多种信号等优点。较容易实现频率、相位及幅度的数控调制,因此,在现代电子系统及设备的频率源

  7. 基于FPGA的双目相机目标深度图像提取实现——详细版 - 2

    目录一、理论基础1.1整体构架1.2MATLAB仿真测试二、核心程序2.1顶层程序

  8. fpga[1]计数器(附源码) - 2

    计数器介绍1.创建项目文件夹2.绘制波形图3.编写rtl代码4.编写testbench代码5.上板验证6.总结介绍计数器电路是在数字电子技术中应用的最多的时序逻辑电路。计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。在许多大型电路中必然有计数器电路的身影,可以说了解并掌握计数器的设计方法是学习fpga的第一步。本文使用的软件是QuartusII13.1、modelsim和notepad++,开发板是黑金的AX301。下图是计数器的基本设计流程。CreatedwithRaphaël2.3.0绘制波形图依照波形图编写rtl代码仿真验证功能是否正确上板

  9. 基于PCIe的NVMe协议在FPGA中实现方法 - 2

            NVMe协议是工作在PCIE的最上层协议层的,故需要先搞清楚PCIE。本文基于Xilinx的UltraScale+,开发工具为Vivado2021.2。学习中以spec为主,其它资料辅助参考(重点介绍学习方法及资料,有时间再加细节)。请勿转载!1PCIe学习与实践1.1理论   主要参考的文章是《老男孩读PCIe》,同时参考《古猫先生》,重点学习TLP报文部分,数据链路层和物理层的内容可以先不看。再买一本书《PCIExpress体系结构导读-王齐》用来查阅做笔记。   老男孩读PCIe介绍系列_Ha-Ha-Interesting的博客-CSDN博客_老男孩读pciePCIe最全

  10. FPGA - 7系列 FPGA内部结构之SelectIO -07- 高级逻辑资源之ISERDESE2 - 2

    前言本文节选UG471的第三章,进行整理翻译,用于介绍SelectIO资源内部的ISERDESE2资源。输入串并转换器(ISERDESE2)和输出并串转换器(OSERDESE2)支持非常快的I/O数据速率,并允许内部逻辑运行速度降低8倍比I/O。输入串并逻辑资源(ISERDESE2)简介7系列FPGA中的ISERDESE2是专用的串并转换器,具有特定的时钟和逻辑功能,旨在促进高速源同步应用的实施。ISERDESE2避免了在FPGA架构中设计解串器时遇到的额外时序复杂性。ISERDESE2特性包括:专用解串器/串并转换器ISERDESE2解串器可实现高速数据传输,无需FPGA架构匹配输入数据频率

随机推荐