ZYNQ防火墙开发5-PL-LED
PS和PL通信机制

Zynq 的表现不仅仅依赖于它的两个组成部分 PS 和 PL 的特性,还在 于能把两者协同起来形成完整、集成的系统的能力。这其中起关键作用的,是一组高度定制的 AXI 互联和接口用来在两个部分之间形成桥梁。

APU 主要是由两个 ARM 处理核组成的,每个都 关联了一些可计算的单元:一个 NEONTM 媒体处理引擎(Media Processing Engine, MPE)和浮点单元 (Floating Point Unit,FPU);一个内存管理单元 (Memory Management Unit,MMU);和一个一级 cache 存储器(分为指令和数据两个部分)。APU 里还有一个二级cache 存储器,再往下还有片上存储器 (On Chip Memory, OCM)。最后,由一个一致性控制单元 (Snoop Control Unit,SCU)在 ARM 核和二级 cache 及 OCM 存储器之间形成了桥连接,这个单元还部分负责与 PL 对接,图中没 有标出这个接口。

1)AXI 互联和接口
不同类型的 PS-PL AXI 接口的作用:
- 通用 AXI(General Purpose AXI):一条 32 位数据总线,适合 PL 和 PS 之 间的中低速通信。接口是透传的不带缓冲。有四个通用接口:两个 PS 做 主机,另两个 PL 做主机。
- 加速器一致性端口(Accelerator Coherency Port): 在 PL 和 APU 内的 SCU 之间的单个异步连接,总线宽度为 64 位。这个端口用来实现 APU cache 和 PL 的单元之间的一致性。PL 是做主机的。
- 高性能端口(High Performance Ports): 四个高性能 AXI 接口,带有 FIFO 缓冲来提供 “ 批量 ” 读写操作,并支持 PL 和 PS 中的存储器单元的高速率通 信。数据宽度是 32 或 64 位,在所有四个接口中 PL 都是做主机的。
2)其他 PL-PS 信号
狗定时器、重启信号、中断和 DMA 接口信号。
3)EMIO 接口
从PS 出来有几种连接可以经由 PL 到外部接口上,这被称作扩展的 MIO (Extended MIO),即 EMIO。 EMIO 涉及到两个域之间的信号传输,是由一组简单的导线连接实现的,因此, EMIO 并不支持所有的 MIO 接口,而支持的那些中,也有些的能力受到了限制 [33]。 这些连接被安排成两个 32 位的组。 很多情况下,经由 EMIO 的接口是直接连接到所需的 PL 的外部引脚上的,这个连接是由一个约束(描述)文件中的条目所指定的。在这个模式下,EMIO 可以实现额外的 64 个输入线和 64 个带有输出始能的输出线。而IP方式是在PL部分实现 GPIO功能,PS部分通过M_AXI_GP接口来控制该GPIO IP模块;另外EMIO模块虽然使用PS部分GPIO但也使用了PL部分的管脚资源。图 2.10 描绘了这两种使用模式。

第一个Pl-led工程
1、具体步骤
\1) 具体步骤 新建一个VIVADO 工程,打开软件 选中Create Project, 如下图所示

2)点击NEXT ,在出现的第二个对话框“Project name”中输入工程名;在“Project location”中选择保存路径;勾选“Create project subdirectory”,最后点击“Next” 备注,所有的路径均不能出现中文名称

3)点击 RTL PROJECT 选项,点击NEXT

4)第四步Add Sources 选项直接留空,NEXT
5)第五步Add Constraints 选项直接留空,NEXT
6)选择芯片型号 我们板子上用的芯片是XC7Z010 ,并在列表栏中选择对应的封装型号,完整型号是XC7Z010CLG400-1 如下所示,选中后点NEXT

7)确认所选信息 点击“Finish”,完成vivado的工程创建

2 增加VERILOG 文件
1)在主界面点击左侧 Add Sources ,点击 复选框的Add or create design sources 选项 并点击NEXT

2)在出现的Add Sources 中 选择创建新文件 Create FILE 如下图所示,并在弹出的窗口中 选择类别为Verilog ,在FILE name中填写文件的名称,这里用LED 代替,点击OK 并点击FINISH

3)在跳出的窗口中可以填写模块的输入输出信号,由于这部分工作在代码中可以完成,所以这里直接点OK 完成VERILOG 文件的创建

3.编写VERILOG的代码
1)双击打开刚才创建的LED.V文件 并在里面写入LED的代码
1 | |
编写好代码后 对代码进行编译

1.接下来 RTL 分析,并完成IO口的设置 (有两种方式,一种是用图形界面的方式,一种是通过写约束文件来进行设置 ,两种方式结果相同最终都生成相同的约束文件),
2.下图蓝色方框中 1)先在Package pin 中修改IO接口, 板子上CLK接到芯片的N18脚, LED 接到芯片的H18脚 2)在蓝色窗口的右侧I/O std 填入 IO接口和管脚电气属性,这里是3.3V 选择LVCOMS3V3
3.选择保存,第一次保存时会要求填入约束文件的名称,管脚定义的信息会被保存到约束文件中

设置时序约束 点击synthesis 下的Constraints Wizard(可以不做,对逻辑比较复杂的工程必须添加这一步)

输入主时钟的频率,板子上焊接的是50M晶振,这里写50M,然后选择SKIP TO FINISH 完成

点击开始逻辑综合 implementation 下的Run implementation

综合之后 点击 Generate Bitstream 生成Bit 文件

成功后会出现下图对话框,点OK 确认就好

将下载器的JTAG口和板子连接好,给板子通上电源后,点击 PROGRAM AND DEBUG 中的OPEN TARGET 下的Auto Connect 来连接板子

如果连接正常会在右侧 硬件栏中显示设备,如下图所示

接下来下载bit文件,右键设备 然后选择 Program Device

默认会出现生成的BIT文件,如果没有的话需要手动添加路径 ,点击PROGRAM 下载

下载之后,板子就按照我们的代码开始跑了 H18 的LED 灯开始以1S的时间间隔开始闪烁

以上就是一个工程的完成实现过程
参考: