4 Star 12 Fork 4

RV少年 (RV4Kids) / RVWeekly

 / 详情

ZYNQ7020折腾之路 - xddcore - ee专业 - chiselos.com

已完成
拥有者
创建于  
2021-05-12 22:13

输入图片说明

ZYNQ7020折腾之路(一)之荔枝糖Hex入门输出“Hello,World!“

https://zhuanlan.zhihu.com/p/199193665

关于荔枝糖Hex ZController开发板是针对 Xilinx Zynq系列 FPGAXC7Z020,专门为 Zy nqFPGA使用 者和 Zynq FPGA学习者提供一款简单易用,价格便宜,易扩展的开发板。

主要模块

  1. FPGA: Zynq XC7Z020-CLG484-1
  2. NANDFl ash: 2Gb NANDFLASH存储芯片:MT29F2G08ABAEAW
  3. LPDDR3: 1GB 内存芯片:MT41K256M16TW-107
  4. 100M 网口: x1 USBHUB&10/ 100网卡芯片:LAN9514JZX
  5. USB2. 0: x4 .4ULPI桥片:USB3320
  6. TF卡槽: x1

说实话,我看到这个配置,然后售价400出头,我还是比较心动的。 毕竟我的需求就是用来捏软核,或者捏神经网络加速器之类的原型验证,对于像屏幕接口,摄像头接口不是很需要。

另外说说这块板子使用不方便的地方,没有专门引出硬件的复位按钮,复位全靠拔插电了(亦或者从软件上实现),问题也不大,在接受范围内 还有另外一个不太好的地方,就是JTAG下载接口,是s形排列的,据说是为了直接把杜邦线插上,然后不用焊接也会很牢靠...但是对于想焊接排针的同学来说,这个就有点难看了 还有就是对于小白来说资料比较少,不过该有的资料都有了。开发起来也没啥难度。无非就是自己融会贯通下别人家的资料。正好锻炼自学能力。 另者,PL侧无晶振,所以想单独开发PL侧的同学可能就没办法了。不过问题不大,可以用PS侧的IP核走FCLK_CLK0给PL测时钟。我想没人买ZYNQ是为了单独PL开发,多多少少都要用到PS侧的,所以这也不算是个大问题

综上所述,如果你没有对camera/screen接口的需求,亦或者是对IO引出数量的大量需求,推荐上车,性价比极高

输出"Hello,World"

我用的vivado 2020.1,官方有过一些类似的demo,只不过还是ISE...太老了。2020年了,怎么还能不用2020vivado

输入图片说明

根据原理图,引出的是UART1 走MIO 48,49

输入图片说明

输入图片说明

点亮了就行

输入图片说明

然后我们这次是用PS侧的uart1发hello,world。所以我们需要把DDR3也给配置下 板载的内存芯片:MT41K256M16TW-107 但是貌似没有可以直接选择,所以我们需要调查下这个DDR的命名规范

  1. 首先 MT41K和41J是啥区别? MT41J系列是旧版的产品,目前很多型号都已经停产,后续替代就是MT41K系列。硬件上的差异是MT41K支持1.35V低电压,同时也兼容1.5V电压,也就是说可以用MT41K直接替换相应型号的MT41J芯片。
  2. 256M16 这个代表不同的bank组合方式,这个需要选对。比如256M16代表256 Meg*16
  3. 剩下的就是一些封装形式了

输入图片说明

  1. 特别注意最后的Timing-cycle time 这东西选个近似的,有一定容错的话,理论上是兼容的。(待测试

综上选择

输入图片说明

当然选Custom之前的一个(也就是整个选项的倒数第二项),MT41J也是可以的。上面说过,他们的电平兼容

经过一波PS侧IP配置后,我们得到了如下图:

输入图片说明

然后再点击以下这个按钮自动走一下block,就收工了。

输入图片说明

输入图片说明

当我准备好开始愉快的printf hello,world时,坑人的地方来了,vivado 20.1的 launch SDK按钮不见了。。。

输入图片说明

现在xilinx把软件部分vitis(也就是原来的SDK)和硬件部分vivado完全分开了,所以现在只能手动导入.xsa文件了

输入图片说明

进来后先点锤子编译下

输入图片说明

创建新应用项目

输入图片说明

输入图片说明

接下来一路next,到如下界面,为了方便我就不自己代码了,直接用官方DEMO就行。

输入图片说明

然后再用小锤子Build下,就收工了。

输入图片说明

然后运行在板子上,然后随便找个串口终端软件,或者用vitis自带的也行。调好波特率等着就行。

输入图片说明

我的板子还在路上,所以报如下错误,云操作一波QAQ

输入图片说明

软核捏完啦,开始折腾了下。收工

输入图片说明

发布于 2020-08-26

评论 (7)

袁德俊 创建了任务
袁德俊 关联仓库设置为RV4Kids/RVWeekly
展开全部操作日志

[Vivado 2020.1]ZYNQ7020折腾之路(二)之荔枝糖Hex片内内存,DDR3测试

https://zhuanlan.zhihu.com/p/202584973

通过上一篇博客,我们完成了荔枝糖Hex PS侧打印"Hello,World!"([Vivado 2020.1]ZYNQ7020折腾之路(一)之荔枝糖Hex入门输出“Hello,World!“---https://blog.csdn.net/qq_36229876/article/details/108054405)

今天我们来测试下芯片内部内存和外置的ddr3内存颗粒

首先创建内存测试应用项目

输入图片说明

一路next后,并 run as hardware 后,可以在vitis串口终端看到如下信息

输入图片说明

从如上图我们可以知道 外部DDR3内存容量为0x3FF00000 bytes = 1023MB

ps侧片内ram为:0xFE00 = 63KB

至此完成对荔枝糖Hex片内内存,DDR3测试

发布于 2020-08-28

[Vivado 2020.1]ZYNQ7020折腾之路(三)之荔枝糖Hex流水灯设计

https://zhuanlan.zhihu.com/p/205310326

首先,按照上一篇博客的设置创建好项目(参考链接:https://blog.csdn.net/qq_36229876/article/details/108054405)

只不过今天要多留个FCLK_CLK0_0端口,因为荔枝糖HEX的PL侧是没有外挂晶振,所以需要通过PS侧给PL侧生成时钟。这样的设计,我认为的优缺点如下: 优点

  1. PS侧为PL侧生成的时钟频率(<=250Mhz)任意,自由度比较高(见下图)
  2. 支持四路任意频率(见下图)

输入图片说明

缺点

  1. 开发时候不能仅开发PL侧,必须要配置ZYNQ的IP核(打开PS侧),为PL侧提供时钟

于是,我们配置好ZYNQ的IP核,此处只需要给PL侧引出一路时钟就行。右键FCLK_CLK0,点击 make external ,然后再 auto 连线

然后为BD create wrapper 最后将我们之前写好的run_led.v加入到source里面。

输入图片说明

源码如下

run_led.v

module run_led(
input RSTn_i,
output reg [1:0]LED_o
);
wire CLK_i;

reg [31:0]Counter;

sys_clk_wrapper system_clk1(
    .FCLK_CLK0_0(CLK_i)
);

//脉冲计数器
always @(posedge CLK_i or negedge RSTn_i)
    begin
        if(!RSTn_i)
            begin
                Counter <= 0;
            end
        else if(Counter == 32'd99_999_999)
            begin
                Counter <= 0;
            end
        else
            begin
                Counter <= Counter + 1;
            end
    end
//LED灯控制(0:亮 1:灭)
always @(posedge CLK_i or negedge RSTn_i)
    begin
        if(!RSTn_i)
            begin
                LED_o <= 2'b10;//
            end
        else if(Counter == 32'd49_999_999)//第一秒
            begin
                LED_o <= 2'b10;
            end
        else if(Counter == 32'd99_999_999)//第2秒复位
            begin
                LED_o <= 2'b01;
            end
    end
endmodule

XDC

set_property PACKAGE_PIN W5 [get_ports RSTn_i]
set_property PACKAGE_PIN AB1 [get_ports {LED_o[1]}]
set_property PACKAGE_PIN AB4 [get_ports {LED_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports RSTn_i]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[0]}]

然后综合一下,直接就可视化的生成xdc约束文件了(自己手动太麻烦了)

输入图片说明

输入图片说明

等右上角出现 Ready 字样 说明综合完毕,此时也要观察下底部的log框,康康有没有waring或者error.综合完成后,打开综合设计

输入图片说明

然后点击 Schematic ,再点击 4 I/O Ports (教程写到这里我才发现,其实CLK端口没必要引出,因为走的PS端的FCLK_CLK_0,不过无所谓啦.

输入图片说明

输入图片说明

之后就是根据荔枝派Hex的原理图分配下管脚(这里吹吹画原理图的前辈,设计得不错。后面哪个{}花括号里面的数字,就是使用这个网络标号的FPGA端口 在原理图上所在的页码数。)

输入图片说明

设置管脚约束如下,记得把电平换成LVCOMS33

输入图片说明

输入图片说明

然后点击右上角的保存,保存xdc文件

输入图片说明

输入图片说明

最后我们看到管脚约束文件已经被添加进来了

输入图片说明

最后生成比特流文件,把.bits文件通过JTAG烧录到板子里面

输入图片说明

输入图片说明

至此,在荔枝派Hex完成了流水灯

发布于 2020-08-29

[Vivado 2020.1]ZYNQ7020折腾之路(四)之荔枝糖Hex固化程序到TF卡

https://zhuanlan.zhihu.com/p/210301920

前言 在前面的章节中,我们编写的程序都是存在片上RAM中的。也就意味着,当开发板掉电后,程序就被抹除了。 在本章节中,将会介绍3种程序固化思路,以及实践荔枝糖Hex能够方便使用的两种思路。 本章所用工程搭建教程:https://blog.csdn.net/qq_36229876/article/details/108237478

程序固化

一般对面FPGA,我们采用的是将程序固化到SPI FLASH种,然后FPGA上电后自动运行SPI FLASH种的程序。(比如我之前用的cyclone iv) 不过 对于ZYNQ来说,我们有了更加多样的程序固化方式:

  1. 将程序固化在SPI FLASH中
  2. 将程序固化在 NAND FLASH中
  3. 将程序固化在TF卡中

对于荔枝糖HEX来说,我们使用2和3两种方式进行程序固化。 首先,我们先从比较简单的将程序固化在TF卡中进行说明。

生成需要固化的.bin文件(PS:由于需要使能不同的管脚,所以即便PL端逻辑相同,但是固化在NAND FLASH中或者TF卡中的.bit文件是不同的,具体见下文)

首先创建一个FSBL文件,通过右侧对这个FSBL工程的介绍,我们提取到大概信息。这个ZYNQ FSBL工程主要是将PL侧的.bits文件和PS侧的.elf文件打包下载到NAND/SPI/NOR FLASH中。当然如果我们使用TF卡的话,就不存在下载的说法了,就直接把.bin文件拖入sd卡根目录就行啦。

输入图片说明

然后我们注意到这里有一行报错

This application requires xilffs library in the Board Support Package. You can go back to the previous pages to select a different platform and domain or create a new one with suitable hardware and software.

输入图片说明

如何解决这个报错呢? 这个报错的大概意思是 BSP(Board Support Packet,板级支持包) 里面少了个xilffs library。我们只用 在BSP里面添加上这个包就行了。具体操作见博客:https://blog.csdn.net/qq_36229876/article/details/108238233

然后把需要固化的工程生成.bin文件,点击 Create Boot Image

输入图片说明

然后准备好三个文件,分别是 ps端.elf,pl端.bit,还有FSBL.elf

输入图片说明

点击 Create Image ,完成生成

输入图片说明

引导模式选择

将生成的BOOT.bin复制进TF卡

输入图片说明

把TF卡插入板子上,程序应该是不会运行的。 因为我们注意到,原理图上,default的boot mode是走NAND FLASH

输入图片说明

要想走TF卡,得把SDIO_SDDET脚拉低

输入图片说明

再次观察原理图,我们发现其实设计了全自动电路

输入图片说明

我们把上述的几个原理图连起来分析后,我们可以发现一个事情,说就是当TF卡插入时,会自动进入从TF卡引导程序。当TF卡拔出时,则进入用NAND FLASH引导程序。下面测试的结果也验证了这个原理。(不得不说,设计得挺不错的) 插上TF卡时

输入图片说明

拔出TF卡时

输入图片说明

固化到NAND FLASH

打开VIDADO 之前的ZYNQ IP Core,为了把程序固化到NAND FLASH中,我们需要把相关引脚给ENABLE了

输入图片说明

然后重新综合工程,得到.bits FOR NAND FLASH。然后按照上文章节 生成需要固化的.bin文件 进行BOOT.bin文件的生成。 然后

输入图片说明

然后

输入图片说明

还有一个容易出错的地方是,软件自动导入的FSBL文件路径不对,应该设置成工程下面的FSBL文件的fsbl.elf文件(如果DEBUG目录下没有这个文件的话,就Build下FSBL工程)

输入图片说明

出现如下错误:

Problem in running uboot Flash programming initialization failed. ERROR: Flash Operation Failed

然后查翻了下,需要将FSBL项目下的main.c里面的 BootModeRegister = JTAG_MODE

输入图片说明

结果还是不行,一直报那个错误,等明天再试试吧。先去睡觉了QAQ。昨晚和女朋友4点钟才去睡觉,今早八点多就起来了,顶不住了QAQ

将程序固化在TF卡中

发布于 2020-09-01

万里之行始于足下!

5631341 yuandj 1624973227 袁德俊 拥有者
回复 袁德俊 拥有者

千里之行

袁德俊 任务状态待办的 修改为进行中
袁德俊 任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
5631341 yuandj 1624973227
1
https://gitee.com/RV4Kids/RVWeekly.git
git@gitee.com:RV4Kids/RVWeekly.git
RV4Kids
RVWeekly
RVWeekly

搜索帮助