• 实验:添加AXI IP到设计


    (从writer发布到cnblog,有时候之前发过的,更新会没有效果,方法是在网页上点编辑,进入网页版的编辑界面可以看到新版本,然后在网页上再发布一次。)

    需要实现的系统是这样的:

    1.PL一侧的ASI GPIO只有一位的宽度,用于连接到BTNU按键(在我的zc702上,我选择连接到SW13)。

    说明:PS和PL里面都有GPIO的模块,添加和配置的方法以及在程序里调用的方法,都是不太相同的。

    2.PS部分的GPIO有1位的接口,通过EMIO连接到PL的引脚。并且先接到板上的BTNR按键(zc702上的SW5按键)

    说明:上一个开关是在PL部分的管脚进入到PL部分的AXI GPIO模块,在通过PL部分的AXI互联模块,和PS部分的GP AXI主端口进入到PS单元中,再通过中央互联,在控制PS部分的GPIO。

    这个开关是从PL部分的管脚直接连接到PS部分的EMIO接口,然后直接控制了PS部分的GPIO接口

    3.PS上的另一位GPIO连接到一个LED灯。

    4.将一个AXI PL定时器中断,连接到PS的中断控制器。当用户按下前面所述任何一个按钮后,启动定时器。定时器的输出控制LED灯?

    说明:注意如何配置的PS接收中断的输出?和中断被触发了后,程序如何控制的LED灯?中断是沿触发的,还是电平触发的?

    这张图很有助于理解:

    image

    操作过程:

    下面具体从头开始做一次,争取把定时器,所有的都搞清楚。教材上的软件版本是旧的,还没到vivado。所以很多操作的地方要自己摸索一下。

    1.添加EMIO,作为一个开关的输入。

    看似一个简单的操作,但由于书上不是vivado的软件,所以我摸索了好一会。首先在diagram中添加了zynq7的IP之后双击它,打开配置对话框,然后选择MIO configuration一栏。

    在右边拖到最下面,可以看到GPIO下面有一项EMIO。在这里打勾并且选择用的位宽,OK。但要注意之前需要对这个模块进行一下auto,不然会发现虽然添加了EMIO,但是在原理图上并没有表现出来,这其中的原因是什么我还不知道。

    image

    之后ZYNQ7的外观会变成:

    image

    可以看到GPIO_0对应的是刚才添加的EMIO,但并没有体现出EMIO的字眼,但如果试验将之前EMIO的位宽选择不同的时候,这个GPIO_0的对应宽度也发生变化,所以毫无疑问EMIO对应的是这个口。然后将这个口展开,看到_I、_O、_T,是不是指这个口可以是输入输出或者三态,我在一次实验中要用这个口作为输入,因此将_I的那个管脚make external,然后在之后程序开发部分确实发现写程序时不用对这个口进行方向的设置,默认就是输入。如果不将GPIO_0展开的话,直接右键单击它make external,会在GPIO的根目录连出去一个端口,是不是也意味着程序开发阶段就需要配置一下这个口的方向?(注意下面这两张图的区别)

    image image

    2.试图通过AXI GPIO来添加一个输出口和一个输入口。

    添加AXI GPIO的IP,然后run connection automation---S_AXI。

    会自动添加AXI interconnect和Reset的模块,这都正常的。

    但现在涉及到一个问题,我需要AXI GPIO有一位的输入和一位的输出,我可以选择enable两个GPIO channel,每个Channel只用一位,一个channel选择all input,一个选择all output,但是这样浪费了不同的位,同时以后是不是也在系统设计上欠缺了灵活性,我现在把它设成了这样:

    image ,将输入和输出分别引出,用了一个channel的两位。

    但我无法将位0设为输入、位1设为输出,我只能将_I和_O分别两位引出,这在我之后的程序设计中会遇到麻烦吗?we will see。

    3.添加timer。

    在添加IP中添加了AXI timer,然后自动一下,自动完之后只是连接了IP左半边的管脚,右半边并没有动:

    image

    所以这很蛋疼,我目前并不了解这个IP,我也觉得花半天去读它的doc没有什么价值,所以我先把它的interrupt管脚连接到PS的一个中断输入,走一步看一步。

    先这样配置PS的中断输入:

    image

    然后将AXI timer的interrupt输出连接到IRQ_F2P管脚:

    image

    然后validation successful,至少说明连接得比较靠谱。

    接下来:

    连接PIN

    看懂书上贴的程序

    去尝试读懂那些初始化,看工具包的文档,这个是避不过去的,不如这里吃点苦,加速之后的进程。至少看懂这些底层操作的一半把,恶补并整理一些C语言的语法。

  • 相关阅读:
    清华同方 峰锐 K469 不开机维修
    开发一个简单实用的 本地音乐播放器
    DELL XPS l502x 触控板修修 主板进水
    Unreal Engine:变量同步
    UE4:网络同步
    UE4:专属服务器实例
    Java(11)_字节缓冲流&字符流
    Java(12)_IO流&Properties集合
    2022年4月16日12点06分
    HY57V641620ETH和HY57V641620FTP7的区别
  • 原文地址:https://www.cnblogs.com/uvw654/p/3694919.html
Copyright © 2020-2023  润新知