Micro Blaze 的 最后补充 与 回顾
Micro Blaze 最小系统
以 MicroBlaze 为核心、LocalMemory(片上存储)为内存,加上传输信息使用的 UART串口就构成了嵌入式最小系统。当程序比较简单时,Local Memory 可以作为程序的运行空间以及存储空间,空间大小可以根据需要设置最小 8KB 到最大 128KB;当程序比较复杂的时候,我们也可以使用片上搭载的外部存储器(如 DDR3)作为程序的运行空间以及存储空间。AXI Interconnect IP 核用于将一个(或多个)AXI 存储器映射的主器件与一个(或多个)存储器映射互联。在这里我们解释一下这个术语——互联(Interconnect):互联实际上是一个开关,它管理并指挥所连接的 AXI 接口之间的通信。
另外一个想法
其实我们使用的外部 LED 按键都是 我们自己认为是这个东西 它的本质都属于 GPIO 设备
我们通过管脚绑定 让 这个 GPIO 变成独属于 设备的 控制器
详情我们可以看 《正点原子 达芬奇 Micro Blaze 的 第四节 》先看结构框图
这个是整个的 Block Design
接下来 见解 最深的是 第八章
自定义 IP 核-呼吸灯实验
我们来看 系统框图
我们注意到的其实是这个 Breath LED 的 自定义 IP核
我们以这个 AXI 接口为核心 添加了端口 out
其实对我们整个设计来说 我们并不需要知道这是怎么完成的
我们 要把 整个设备当成黑盒器件使用
补充了一个 output 在最后有一个 led 的 引脚引出
先说一下 黑盒的用法 里面 分为 3部分 第一部分是 AXI的主函数 我们内部添加了 一个output
第二部分是 AXI 的内容 我们在里面添加了 LED的例化 就是相当于 把寄存器 绑定到 LED 的输入输出
第三部分是 LED的实现内容
其实我们主要关注 主函数的实现 发现就是一个 AXI的接口 还有一个 output LED
我们不理解的话 可以看管脚约束 将这个管脚接在了 PIN R2 上
我们再看 引出的 UART 也会有 管脚绑定 这就是 这两个的相同点
这里面更重要的 一点是 我们需要知道 自定义的IP核 打包之后 会生成一个 .c .h文件供我们使用
我们先介绍一个非常重要的基本概念
IP的接口就是函数的输入参数
生成的.c文件 就相当于 把硬件抽象 成 一个库函数
通过库函数 来设置 输入参数
所以生成的逻辑 就是 根据你的硬件IP 的接口来的
ok 我们在做设计的时候 当合成一个IP之后 进入 C语言的层次之后 其实我们并不需要 知道 这个模块究竟是如何连接的 我们只需要知道这个模块的引脚是什么 功能是什么即可
对于这里的设计 我们需要在意的是 IP的 工作 输入输出 是什么 输入是 S_AXI 而 输出是 LED (LED 我们知道是寄存器达标的值)
那么 功能是 把 数写进 寄存器
LED的改变只是 因为寄存器变化而带来的附加效果
其实相当于把 数据存进到 寄存器
所以可想而知 .c 文件大概率也是这些功能
因为是系统来完成的 我们所能做的就是 观察 得出结论
这句话 就相当于 把数据放进基地址+偏移量的位置
这句话 就相当于 输出的意思
over
接下来 我们来学习第九章
AXI4 接口之 DDR 读写实验
本次设计 不在单单的使用 内部逻辑缓存 而是外挂 DDR
我们来看一下 整个结构框图
我们使用的 是 自己创建的 DDR_TEST 这个 DDR 的 目的是 在 4K 的 存储空间 写入 1024个数据 写入1到1024 每个数据 占用 32Bit
4K = 4096 x 8 bit = 1024 x 32
我们在 Micro Blaze 定义了 cache 所指向的地址 就是内存中的 我们需要使用的地址
然后需要注意的是 这里的地址 必须 和 我们在 IP INTEGRATOR 下的 Address Editor
MIG 内的地址 一致 毕竟我们都是指向的同一个东西嘛
但是 我们 自己定义的IP DDR3_ Test 并不是 写基地址 而是把 偏移量什么的 都需要考虑进去 毕竟 DDR3 _Test 作为一个设施 是直接访问 DDR3 的内存 空间
我们将变量 C M AXI TARGET SLAVE BASE ADDR 的值修改为 0x88000_0000(DDR3的基地址为 0x80000000),它位于 DDR3 存储器的地址空间,是 DDR3_TEST IP 核进行读写操作的起始地址。
懂你意思
接下来我们来看 第十三章 AXI DMA 环路测试实验
下面是这个实验的系统框图