AXI4的PL与PS联合设计

1、实验原理

在前面的学习中,解决了如何利用一个缓冲寄存器控制另外一个寄存器的输入输出配置。接下来就是如何将PL设计直接导入到PS中实现资源互换。PS是可以通过AXI4总线访问从机的缓存寄存器,从机是可以直接调用PL设计的。只需要从机的IP的编辑界面正常的调用对应的module即可。这次的学习花费了很多时间,出现了许多软件操作错误,这里一一总结,以免日后再犯。

2、实验操作

(1)打开IP设计界面

这里的操作还是打开Ip封装界面,创建一个自定义的AXI4的总线IP。除了第二个界面选择一下create a new AXI4 peripheral之外,其他一路next即可。最后一个选择第二个edit IP,可以自动打开编辑IP界面。没有选择的话在IP category里找到自定义IP的名字后右击也是有edit IP in package的选项的。由于没有过多的选项,就不放图片了。

(2)IP中verilog文件的添加

这里有个十分特别的问题,如果直接从IP编辑界面新建一个文件,没有默认目录。自定义目录如果不在前面设计的工程中源文件目录的话,在完成编辑打包后该文件会自动丢失,无法再试打包。换言之,如果从其他目录引入文件到IP,只能使用一次就会失效。而且失效的文件还会占用在IP工程文件中,导致无法重新添加。这里的设置也没有细查,简单的解决方法就是先在创建的总工程中新建文件,然后在IP编辑界面添加源文件,这样就可以实现多次调用。好像在设置中看到IP打包时可以不删除添加的文件的设置,也没有验证,这里就不展开了。注意在总工程中创建后要移出工程(不要删除存储),以免对后面的步骤造成干扰。

下面是添加的部分:

module stream_led(
input clk_user,
input rst_n_user,
input state_user,
output reg [2:0] led_user
);
reg [25:0] cnt;
always@(posedge clk_user or negedge rst_n_user)begin
if(!rst_n_user)begin
cnt<=1'b0;
end
else if(cnt==26'd50_000_000-1'b1)begin
cnt<=1'b0;
end
else if(state_user)begin
cnt<=cnt+1'b1;
end
end
always@(posedge clk_user or negedge rst_n_user)begin
if(!rst_n_user)begin
led_user<=3'b0;
end
else if(cnt==26'd50_000_000-1'b1)begin
case(led_user)
3'b000:led_user<=3'b001;
3'b001:led_user<=3'b010;
3'b010:led_user<=3'b100;
3'b100:led_user<=3'b001;
default:led_user<=3'b000;
endcase
end
end
endmodule

(3)连接模块

这个是verilog的基本操作了,这里我是在前面的设计的基础上连接的,所以使用的是slv_reg3来实现PS的输出作用到PL的。clk_user和rst_n_user都是PL的端口,可以直接连出。led_user也是PL的端口,直接连接到模块顶层即可。

    stream_led U1_user(
.clk_user(CLK_USER),
.rst_n_user(RST_N_USER),
.state_user(slv_reg3),
.led_user(LED_USER)
);

(4)打包IP

这个操作在IP编辑界面的create and package IP中可以执行。第二个界面选择package your current project即可,其他一路next。

(5)IP的再编辑

一般来说,PL端的代码需要仿真后确认无误才能用于IP中,所以一般不会出问题。主要是端口的连接,这里出了问题也查不到。(由于偷懒,IP的文件添加后不会综合,直接打包,这也导致了一些问题,比较大的IP功能设计是应该综合并查看报告)IP核的再次编辑也是在IP category中找到自定义IP,右击后就会有edit IP in package的选项。有时候第一次打包IP的端口列表由于某些问题没有刷新到添加IP的BD界面上,也可以使用这个操作。

(6)已经完成顶层文件生成的IP的刷新

刷新IP在IP category中,只需要打开IP states(一般重新打包IP后会有提示),选择有感叹号的IP,update即可实现IPcategory中的刷新工作。对于已经添加IP到BD中,完成了顶层调用,或者已经综合映射完成的设计来说,刷新BD文件中IP需要BD文件generate output products(这个操作也是BD右击列表的功能,和自动例化IP的位置一样)。

有时候为了防止忘记,一般新建自定义IP到BD设计时也会刷新一次,在例化BD文件时才能保持一致。如果忘记这个操作:一般情况下可以生成bit流文件,但是无法导出xsa文件。

ERROR: [Common 17-69] Command failed: The current design is not implemented.
ERROR: [Common 17-69] Command failed: ERROR: [Common 17-69] Command failed: The current design is not implemented.

报错信息如上所示。感觉就是IP在BD中和category中不一致导致的。这会导致需要重新做一次流程,时间消耗还是巨大的。

(7)配置端口

输入输出口的配置还是在Elaborated design中实现,根据开发板原理图就可以配置。注意这里所有的配置都是针对PL配置。PS端的端口是由ARM核的寄存器来配置的。所以这里如果使用了PS端的端口的话会报错。

(8)生成XSA文件

在生成bit流后即可输出硬件,然后就可以供vitis使用了。输出硬件就是file的export中的第一个。

(9)软件测试

前面的操作就不多介绍了,就是导入硬件到ARM开发平台即可。直接看代码吧。

#include "xil_io.h"
#include "sleep.h"
#include "stdio.h"
#include "xparameters.h"
#define IP_BASE XPAR_MYIP_V1_0_0_BASEADDR
#define REG0_OFFSET 0
#define REG1_OFFSET 4
#define REG2_OFFSET 8
#define REG3_OFFSET 12
int main(){
int BTN;
Xil_Out32(IP_BASE+REG2_OFFSET,0xffff);
while(1){
BTN=Xil_In32(IP_BASE+REG1_OFFSET); Xil_Out32(IP_BASE+REG0_OFFSET,BTN);
Xil_Out32(IP_BASE+REG3_OFFSET,1); }
}

注意,Xil_Out32(IP_BASE+REG3_OFFSET,1)这个语句就可以实现PS驱动PL的流水灯工作。前面的代码是来自前一次的学习。

3、实验结果

最后的板级验证是符合预期的。这里有一个额外的收获:调试时,打开调试按钮,PS部分的设计正常工作;关闭按钮,PS部分停止工作,但是PL部分还是会继续工作。这里体现了调试只是调试PS部分,PL部分是不受调试的影响的。PL的调试需要使用前面学习的ILA和VIO。

AXI4的PL与PS联合设计的更多相关文章

  1. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程

    PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程   作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...

  2. Zynq7000术语详解,不懂啥是PL,PS,APU,SCU?那就进来看看吧

    Zynq7000术语详解,不懂啥是PL,PS,APU,SCU?那就进来看看吧     相信大家刚看到Zynq手册的时候,对着那么一大堆缩略语肯定是一头雾水,特转来一篇文章,为大家解惑 摘要:本文介绍与 ...

  3. 78.PL和PS通过BRAM交互共享数据

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...

  4. 【ZYNQ-7000开发之九】使用VDMA在PL和PS之间传输视频流数据

    [ZYNQ-7000开发之九]使用VDMA在PL和PS之间传输视频流数据 原创 2016年01月14日 11:35:02 标签: VDMA / zynq / zedbaord / AXI 10384 ...

  5. PS网页设计教程XXX——在PS中创建一个漫画书主题网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  6. PS网页设计教程XXIV——从头设计一个漂亮的网站

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  7. PS网页设计教程XXV——使用Photoshop设计的老式组合布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  8. PS网页设计教程XXVI——如何在PS中创建一个专业的网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  9. PS网页设计教程XXVIII——如何在PS中创建一个干净的网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  10. PS网页设计教程XXIX——如何在PS中设计一个画廊布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

随机推荐

  1. 2024年,提升Windows开发和使用体验的实践经验 - RIME输入法

    前言 上一篇文章介绍了 Windows 下的包管理器,本文继续介绍输入法. 事实上 Windows 的输入法生态比 Linux/Mac 丰富很多,不过很多国产输入法存在窃取隐私.植入广告.乱安装流氓软 ...

  2. java 注解结合 spring aop 实现自动输出日志

    auto-log auto-log 是一款为 java 设计的自动日志监控框架. 创作目的 经常会写一些工具,有时候手动加一些日志很麻烦,引入 spring 又过于大材小用. 所以希望从从简到繁实现一 ...

  3. Java 23种设计模式的分类和使用场景

    听说过GoF吧? GoF是设计模式的经典名著Design Patterns: Elements of Reusable Object-Oriented Software(中译本名为<设计模式-- ...

  4. dp题单——区间dp

    一.基本概念 1.链式区间dp for(int len = 2; len <= n; len++){ //枚举区间长度 for(int i = 1; i + len - 1 <= n; i ...

  5. c2工具sliver的python客户端无法修改grpc超时时间的解决办法

    业务需要,调用了很多implants来执行对应系统上的命令, 但是无论怎么指定interactive.py中execute方法参数, 命令执行超时时间总是30. 后面通过扩展execute方法增加一个 ...

  6. 编译安装c2工具sliver以及python 客户端sdk

    背景: 项目需要安装sliver服务端和客户端还有sliver的python sdk: git clone https://github.com/BishopFox/sliver.git cd sli ...

  7. 面试官:你知道Comparable 和 Comparator 的区别吗?我:巴拉巴拉

    写在开头 面试官:"我们在Java的集合和数据结构中都离不开比较器,请你聊一聊Comparable 和 Comparator 这两种的区别吧" 内心活动:"上来就这么直接 ...

  8. Redis高级系列详解

    01-Redis系列之-Redis介绍安装配置 02-Redis系列之-架构和高级API的使用 03-Redis系列之-高级用法详解 04-Redis系列之-持久化(RDB,AOF) 05-Redis ...

  9. SpringBoot面试题的零碎整理

    面试题1:简述一下Springboot相对SSM做了哪些提升? 首先,SpringBoot是采用"约定大于配置"(Convention over Configuration)的理念 ...

  10. 【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)

    问题描述 使用Azure Storage Table的REST API,实现根据过滤条件删除满足条件的数据,调用方法为  Delete Entity (Azure Storage) 问题实现 第一步: ...