当前位置: 首页 > news >正文

Zynq开发实践(SDK之第一个纯PS工程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        学编程的时候,大家一般都比较重视第一个项目的创建和执行。第一个fpga程序一般是led闪烁,第一个c程序一般就是hello world程序。今天就介绍下,zynq下面的hello world应该怎么编写。和其他soc程序不一样,zynq编写c代码之前,需要先创建一个block design,这就是最大的不同。整个流程稍微多了一点,不过熟能生巧就好。

1、创建zynq工程

        第一步还是创建zynq工程。这一步和之前fpga没有什么区别,唯一需要注意的地方就是对zynq芯片的选择。我们习惯于直接用020clg400-1搜索,搜到的最后一个结果就是我们需要的芯片。

2、创建block design,添加cpu

        fpga开发是添加verilog代码和约束文件。而zynq的软件,则是需要先添加block design,这是一个顶层设计的框架,这个框架里面有cpu、有总线、有复位,还有可能有各种各样的外设。当然目前为止,作为入门,我们一开始不弄那么复杂。添加block design之后,直接添加cpu即可。

3、去除不必要的ps连接线

        因为没有ps之外的其他外设,所以可以去除下面三部分内容,

        1)FCLK_RESET0_N;

        2)M_AXI_GP0 interface;

        3)FCLK_CLK0。

        去除之后,就是这样的形式,即只有ddr和54个fixed io,这些接口是不需要添加端口约束的。

4、添加打印串口,配置ddr参数

        既然是hello world程序,那么串口肯定是少不了的。这里我们选择了uart0串口,作为输出的接口。但是uart0本身可以放在很多其它的位置,所以我们首先需要通过电路图,来确认最终的位置。

        这里,我们把uart0放在了pin14、15引脚上面,即MIO14、MIO15。

        除了uart之外,ddr也是少不了的。因此哪怕用zynq做纯mcu开发,ddr也是很大的优势。一般来说,这里配置的是ddr3控制器。通常只要选择好ddr芯片型号即可,最多设置一下数据位。我们这里选用的是最后一个选项,即MT41J256M16 RE-125,数据宽度是16。大家可以根据自己的开发板,灵活做出选择。

5、保存block design,开始生成文件

        block design保存好之后,最好利用validate 按钮确认下、保存下。接下来生成的文件有两个,一个是右击,选择“Generate Output Products”生成文件。结束之后,继续右击,选择“Create HDL Wrapper”生成文件。两个都ok之后,代表block designer就创建结束了。

6、导出硬件环境,打开sdk软件

        这里导出硬件环境比较简单,直接单击“File”-》“Export”-》"Export Hardware"即可,不用包含bitstream文件,因为没涉及到pl开发。完毕之后,继续单击“File”-》“Launch SDK”,即可打开sdk软件。

7、创建hello world软件

        打开sdk之后,一般已经有一个design_1_wrapper_hw_platform_0工程了。我们只需要继续创建hello world工程即可。创建的过程中,系统会帮我们自动匹配一个bsp工程。而且工程创建以后,sdk会自动编译好,帮助生成elf文件。如果我们需要用jtag运行程序,只需要单击这个elf,右击选择“”Run as”-》“Launch on hardware(System Debug)”即可,这样程序就可以跑起来,用mobaxterm看到串口打印了。

        当然在此之前,需要连接好两根type c线,一根是jtag,一根是usb转串口。

8、可能会出现的问题

        假设ddr没有初始化好的话,可能会出现write memory 0x100000 error这样的错误。出现错误之后,有两种解决办法,一种是继续去寻找ddr配置失败的原因。还有一种就是修改link file,删掉原来的ps7_ddr_0,把现在的ps7_ram_1修改成ps7_ddr_0,这样程序也是可以跑起来的。

        大家不知道的是,zynq内部也有一段ram空间,同样可以跑代码、执行程序,不一定非得运行在ddr上面。改了之后,不需要初始化ddr,重新run一下jtag,自然就可以跑起来了。

9、jtag做了哪些工作

        我们发现程序启动的时候,本身是运行在ddr上面的,那么ddr是谁初始化的? 答案就是jtag。jtag不仅可以初始化ddr,还可以初始化其他外设,甚至可以帮助debug程序。但是如果程序需要发布给客户的话,就不能依赖jtag了,这个时候就需要准备fsbl程序了。当然,这就是后面的话题了。


文章转载自:

http://zS2tzswu.zckhn.cn
http://2lO7QK8G.zckhn.cn
http://P43tXg1Z.zckhn.cn
http://luh2sUDp.zckhn.cn
http://ZC98ni4W.zckhn.cn
http://jBY7cDe4.zckhn.cn
http://uY5m7VIC.zckhn.cn
http://T9X3YFAV.zckhn.cn
http://Urs3r05O.zckhn.cn
http://0rRohkUp.zckhn.cn
http://cTiM2dAd.zckhn.cn
http://D0jcBERu.zckhn.cn
http://dmykCyYX.zckhn.cn
http://IHzXJZeY.zckhn.cn
http://IzjU404O.zckhn.cn
http://T08oMnBD.zckhn.cn
http://GjQurYtS.zckhn.cn
http://nvfH4Dyf.zckhn.cn
http://w8G3lZX5.zckhn.cn
http://eYkMDS2D.zckhn.cn
http://UCLoKCiN.zckhn.cn
http://FXA3FEzd.zckhn.cn
http://p5Rp2voc.zckhn.cn
http://8NFxPGaP.zckhn.cn
http://yIiq5H1T.zckhn.cn
http://lk1PF7mj.zckhn.cn
http://mkpJGvm1.zckhn.cn
http://gHfT0fH1.zckhn.cn
http://87GqpCV0.zckhn.cn
http://CkoFBOQG.zckhn.cn
http://www.dtcms.com/a/387201.html

相关文章:

  • 【Spring生态】Spring Cloud
  • HarmonyOS应用拉起系列(三):如何直接拉起腾讯/百度/高德地图进行导航
  • Redis的主从库与切片集群机制
  • 打工人日报#20250916
  • WASM逆向
  • 如何计算最大公约数和最小公倍数
  • 我们设计时间戳的更新时间的时候通常将字段类型设置为int或者bigint 这样能避免2038的问题吗
  • 超越“防被告”:2025跨境电商IPR战略赋能与品牌升值之道
  • Scrapy进阶:POST请求模拟登录实战与管道的使用
  • Zabbix 7.0 配置钉钉告警
  • 知识拓展-智能体和数字人
  • 飞牛NAS部署影视站MooncakeTV
  • yolov8 和OPENCV 自带的目标检测模型 对比
  • 课前练习题-20250916-复习题
  • 基于Transformer-卷积神经网络和度量元学习的高压断路器小样本机械故障诊断
  • 基于 Rust 的 IoT 平台基础功能设计(一)
  • vue+typescript+node的前端项目
  • catkin工程和CMakelist.txt的基本使用
  • 使用 MyCat 实现 MySQL 主从读写分离
  • Visual Studio 函数头显示引用个数
  • 【毕业设计选题】大数据技术专业毕业设计选题指南指南:python(2026 届)
  • 组播实验指导
  • Easylogger与RTT结合使用 Easylogger在FreeRTOS下实现异步输出
  • 【openFeign详细介绍】
  • 抖音私信评论互动消息通知监听自动获取,通过qq机器人转发到qq来通知
  • 19.删除链表的倒数第N个节点(双指针妙用)
  • MySQL笔记5
  • 从《Attention Is All You Need》深入理解Transformer
  • 你的第一个Transformer模型:从零实现并训练一个迷你ChatBot
  • JVM工具全景指南