多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

Xilinx Zynq系列是带有ARM Cortex-A系列CPU核的FPGA,前几年流落到二手市场上的“矿板”就以Zynq 7010为核心,可以说是最廉价的Zynq实验平台了。淘个这样的板子,再另外找个XilinxJTAG就可以玩FPGA和ARM Linux. 因为玩的人多,网上有资料,还有别人做过的扩展板可以参考。本坛大佬们早就玩过了。我三年前就买了一块,但一直是闲置状态,直到现在才想来搞搞。

这块EBAZ4025板子接上12V电源就可以工作了,有RJ45网口,板子上有焊盘可以自己焊上TF卡座、UART接口、JTAG口,就相当于一个完整的ARM Linux板子(板载DDR3 SDRAM 256MB,NAND Flash 128MB),还有若干FPGA I/O引出来到双列排针座,方便自己分配用途。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

EBAZ4025通电以后上面的Linux就启动了,通过UART连接可以看到uboot和Linux输出的信息。我是要把它作为FPGA开发来用的,所以先直接焊上JTAG排针连接调试器,电脑软件可以识别到JTAG 扫描链上有两个设备,一个是FPGA,一个是ARM CPU。

Zynq的内部分为两个系统,一个叫PS,就是ARM CPU以及外设,包括DDR内存控制器DMA等等这些ARM运行依赖的部件;另一个系统叫PL,就相当于传统的FPGA. 这两部分之间有很多种方式可以通信,就可以比结合FPGA和ARM的各自优点来处理复杂的任务了。

Zynq 7000系列的IO引脚也分为PS和PL各自管理的的,PS部分引脚有固定的用途,和开发FPGA时写引脚约束不同。根据矿板的电路图了解到,两个LED是连接到PL部分的,而UART直接接的是PS的MIO

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

学习Zynq的开发可以参考网上的教程。这玩意门槛稍微高一点,先得下载Vivado安装,为了开发ARM的程序还要安装SDK,都是很庞大的软件。如果熟悉了的话Vivado操作起来也很快,但头几次么……

先创建一个工程,选择器件型号,这和其它FPGA开发思路是一样的。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

按照教程,然后是Create Block Design

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

添加IP——ZYNQ7 Processing System. 这种图形化的block design方式我最初学FPGA的时候就用,直观容易理解。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

加上这个IP之后框图上就出现了一个模块,代表PS部分。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

在图上双击这个ZYNQ Processing System模块,就打开配置窗口,进行时钟、IO、内存等设置了。这些需要根据矿板上的资源和连接关系来定。

首先这里有个PS部分的结构图,可以了解有那些片上外设可以供CPU用的。第一个实验为了让程序能打印输出,需要用UART。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

看看时钟配置,默认的输入时钟33.333MHz 和矿板一致,就不用调整了。CPU和DDR的时钟频率用默认的不会有问题。PS部分给PL部分提供的时钟是实验需要的,默认输出一个50MHz。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

DDR的配置,需要根据实际板子上的芯片调整一下,128M x16-bit. 我不确定SDK编写的程序是要在DDR内存中运行还是PS的片上RAM中运行,所以DDR还是要配置的。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

MIO的配置,是为了要给UART分配引脚。根据电路图,UART是连接在A16和F15这两个脚的,查Xilinx手册得知是PS_MIO24和PS_MIO25,就在MIO Configuration中配置使用UART1(因为UART0没有MIO 24,25的映射)。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

配置好之后Run Block Automation,自动生成必要的接口。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

教程上说配置好之后要连一根线,把FCLK_CLK0和M_AXI_GP0_ACLK连起来。前者是Zynq PS输出的时钟(内部PLL从晶振给的时钟生成,可以给PL用),后者我理解是AXI总线的时钟。这里并不使用总线,我觉得不连也没关系。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

接下来,按照教程说的是要Create HDL Wrapper,注意对话框中选择允许用户修改,不然自己编辑的会被覆盖掉。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

做这一步的目的是把PS外面再包上一层,这样就方便加入自己编写的逻辑了。下面我要编写一点逻辑来点LED,就直接加到 system_wrapper.v 里面去。

注意Create HDL Wrapper之后,系统的层次结构变化了,顶层名称从design_1变成了design_1_wrapper。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

由于矿板的PL是没有带晶振的(有空焊盘没装),要看FPGA跑起来的效果需要外接时钟信号到排针上面。实际在已经创建的PS模块上,FCLK_CLK0就是一个时钟信号,现在我要把它给PL用,还需要创建一个port把它引出来,不然顶层看不到。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

在图上创建输出port, 命名叫PS_CLK0, 连接到时钟信号上。保存之后,design_1.v文件(自动生成的)并没有体现新的输出端口。于是我尝试一下“Generate Block Design”操作,看看是否更新。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

结果这样是能重新产生design_1.v的:

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

然后我就在顶层的design_1_wrapper.v里面加自己的东西了:先加上两个输出口给矿板上的红绿LED。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

再写一个计数器,利用PS引出的时钟计数,让LED能闪起来。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

这样第一个实验工程的逻辑就设计完了,可以进行FPGA综合、实现和生成二进制码的流程了。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

这里还缺少一件事情:矿板上的 LED6 (W13, W14引脚)是连接在FPGA IO上的,不是PS MIO,因此是像普通FPGA那样分配引脚的方式。而DDR、MIO则是固定引脚,不需要自己选。假如LED是接在MIO上,那么我们就要用软件去选择GPIO访问来点亮了,不属于FPGA逻辑部分。

在综合之后,可以查看design,然后手工分配LED使用的引脚。也可以直接写一个约束文件(.xdc)把引脚约束用Tcl命令写上去。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

在最后Generate bitstream 生成bit文件之前看一下报告,确认引脚的分配是生效了的。

最后得到了.bit文件,就可以连接好JTAG之后,打开Hardware Manager, 将生成的design_1_wrapper.bit下载到FPGA中了。这个操作和Xilinx Spartan/Artix系列是相似的。

多少“矿板”吃灰中:Zynq学习笔记——“矿板”小试FPGA开发流程(zynq 矿板)

若此时看到了LED闪烁,说明PL部分的逻辑是工作的了。

此外,下载bit文件之后,从UART终端看到的Linux打印信息还在活动,说明PL部分的重配置没有影响PS的运行。关于PL和PS的关系我的了解还不够多。

如果单纯把Zynq当成FPGA来用,不使用PS部分,也是可以的。注意,这样也就不能用PS提供的时钟了,需要从PL的引脚输入时钟信号。开发工具用Vivado和ISE都可以,我另外进行过尝试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年4月28日 上午9:38
下一篇 2023年4月28日 上午9:54

相关推荐

  • 劳动合同管理规范

    劳动合同管理规范 随着社会经济的不断发展,劳动合同已经成为了许多企业和员工之间的必要合同。有效的劳动合同管理对于保障员工权益、维护企业声誉和促进经济发展都具有重要意义。因此,制定一…

    科研百科 2025年1月5日
    1
  • 农科院小学 数学老师

    农科院小学的数学老师是学校中最辛勤的工作者之一。她不仅在课堂上教授数学知识,而且在日常生活中鼓励学生们勇于探索和发现。她以严谨的态度和耐心的心灵,帮助学生掌握数学技巧,培养他们的思…

    科研百科 2024年11月12日
    3
  • solargis光伏软件

    solargis光伏软件介绍 随着现代社会的不断发展,能源问题已经成为人们关注的重点之一。而光伏能源作为一种新型能源,已经被广泛应用于各个领域。其中, solargis 光伏软件是…

    科研百科 2024年11月29日
    3
  • 小哲社工库查询软件使用方法

    小哲社工库查询软件使用方法 社工库是互联网上的一个公开的数据库,包含了大量用户的个人信息,如姓名,地址,电话,电子邮件等。这些信息可能会被用于诈骗,盗窃,恶意攻击等非法活动。因此,…

    科研百科 2024年11月14日
    1
  • 科研项目负责人的职责

    科研项目负责人的职责 科研项目负责人是项目成功的关键人物,负责确定项目的目标、制定计划、协调资源、管理进度、评估结果并确保项目的成功完成。以下是科研项目负责人应该承担的职责: 1….

    科研百科 2024年10月30日
    0
  • 大家想知道识别植物花草的软件哪个准哪个好?来看看这3个软件(识别植物花草的软件哪个最准)

    不知道有没有小伙伴和我一样,好奇心比较旺盛,遇到问题都喜欢打破砂锅问到底。就连平时在路上遇到一些好看的花花草草时,我都想知道它是什么。但是花草这些就比较特殊,想了解它的身份,光靠描…

    科研百科 2023年3月14日
    125
  • 科研项目进度与安排

    科研项目进度与安排 随着科技的不断进步,科研项目的进展也越来越迅速。为了确保项目能够按时完成,并且达到预期的成果,项目进度与安排是非常重要的。本文将介绍科研项目进度与安排的重要性以…

    科研百科 2025年3月6日
    0
  • 软件项目实施进度计划

    软件项目实施进度计划 随着软件行业的快速发展,软件项目的实施变得越来越重要。一个好的软件项目进度计划可以确保项目按计划进行,并最大程度地减少项目风险。本文将介绍软件项目实施进度计划…

    科研百科 2025年1月12日
    0
  • 开展科研项目计划

    开展科研项目计划是科研工作中至关重要的一步,它有助于明确研究目标、制定研究方法、安排研究资源和控制研究进度。在开展科研项目计划时,需要充分考虑各种因素,以确保研究能够有序开展、达到…

    科研百科 2025年2月25日
    0
  • 研发协同建议

    研发协同建议 在软件开发和工程过程中,研发协同是非常重要的一环。通过协同,团队成员可以更好地协作,共同完成项目目标。以下是一些研发协同的建议: 1. 确定明确的目标和期望:在开始研…

    科研百科 2024年12月8日
    0