相比传统的SOC芯片,Xilinx公司ZYNQ的最大优势在于,除了内嵌的硬核ARM处理器自带的IO接口之外,能够利用FPGA自由地构建符合应用需求的IO外设和基于verilog/HDL的算法。这给嵌入式系统设计带来的巨大的灵活性。
ZYNQ分成所谓的ProcessingSystem(PS)和ProgrammableLogic(P两个部分。PS就是所谓的硬核,而PL是FPGA。
在本博文中,我们对PL构建IO外设有一个基本的了解,下一篇博文讨论动态部分配置逻辑。
ZYNQ架构
PS和外部接口之间的通信主要是通过复用的输入/输出实现的,它提供了可以做灵活配置的54个引脚,这表明外部设备和引脚之间的映射是可以按需定义。MIO类似于普通SOC芯片的IO引脚。
也可以通过扩展MIO来实现,EMIO并不是PS和外部连接之间的直接通路,而是通过共用了PL的I/O资源来实现。
MIO连接的IO外设包括
SPII2CCAN(xUART(xGPIO(32xSD(xUSB(xGigE(x
由于ZYNQ具有PL,可以开发更多基于PL逻辑的IP。看上去ZYNQ的IO外设类型并不多,其实要比传统SOC丰富的多。用户可以自行设计需要的IO控制器。
AXI接口
该协议是ARM公司提出的AMBA协议中的一部分,2003年在AMBA0第一次包含AXI的第一版,2010年的AMBA0包含的AXI它是一种面向高性能、高带宽、低延迟的片内总线。在ZYNQ中,AXI主要用于PS和PL之间的总线。
AXI4接口包括三种类型的接口:
AXI4用于高性能存储器映射方式的需要
AXI4-Lite用于轻量级存储器映射通信,比如访问控制和状态寄存器。
AXI4-Stream用于高速数据流数据。
下面以AXIGPIO核为例,它是基于AXI-lite的一个GPIO的软核。可以在vivado中导入和配置。。
AXI外设的IP
在vivado开发工具中,Xilinx提供了一些基于AXI的IO外设IP。它们包括:
AXI高速外设
AXI低速外设
可以在设计中直接调用这些IP。
实例1-LED
新建一个vivado项目project1
左边栏->IPItegrator->CreateBlockDesign
双击AXIGPIO块,配置GPIO的管脚。
点击自动连接
vivado会自动添加两个块,并且连线。
点击Tools->Validat设计就基本完成了。
实例2创建带AXIslave接口的IP—PS控制PL侧的LED
在这个实例中,我们讨论如何构建自己的IP。
参考CSDN一博文
Vivado创建带AXIslave接口的IP—PS控制PL侧的LED
分为两步:
构建LED_IP
引用LED_IP
构建
新建一个项目,然后选择Tools->CreateandPackageNEWIP
在这里,我们设计一个LED_IP,点击Next
在这里我们选择的下一步是编辑IP
下一步,按照上面提到的参考博文的提示,编辑LED_IP下的两个verilog文件的内容。
重新封装IP
选择Tools->CreatandPakageNewIP,单击Next->选择Packageyourcurrentproject,单击Next,路径选择原来IP所在的位置,OverWrite原来的文件->Finis见到下。
到此为止,LED_IP的IP就算设计完成了,可以在后续的设计中应用这个IP。如果要测试这个IP,需要新建一个项目。导入这个IP
结束语
简单地了解一些ZYNQ的各项功能,并没有详细地介绍细节。希望从总体上对于ZYNQ有一个了解。
本人学习ZYNQPL逻辑设计的主要目的是为了探讨在工业领域的可编程控制器中如何利用FPGA功能来构建确定性,高实时性计算。能否使用硬件设计语言verilog/HDL来实现PLC的梯形和IEC61499功能块。更进一步地,如何使用matlab/Simulink来设计高速数字处理算法和AI算法。使IEC61499能够应用于实验室和工业现场的数字化测量,硬件在环测试以及控制。只是初步地向前迈进了一步就发现。
这是一个相对困难的课题。涉及的内容太多了。至少需要搞清楚下面几个基本的问题。
使用已有的IP核来构建基于AXI接口的IO接口电路
设计自己的IP
设计动态部分配置的PL逻辑
将matlab的算法导入到一个可动态部分配置的块中。
在此基础上,要进一步研究
将PLC梯形转换成verilog语言利用FPGA构建一个硬件PLC运行时利用FPGA构建IEC61499硬件功能块
这些都是令人兴奋的课题,感觉失去这样一个有趣课题,是非常可惜的。有兴趣的读者,我们可以一起探讨。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点