博客
上篇仅仅简要的介绍了时钟的用法,并未详细的说明,主要是因为很多时钟用法是针对特定的应用需求,无法一一介绍。本篇将重提上篇的CMT时钟模块,聊一聊它的用法。可以这么说,每个靠谱的FPGA应用里都应该用到CMT模块。
Zynq-7000AP SOC器件有效利用了片上CPU来帮忙配置。在没有外部JTAG的情况下,处理系统(PS)与可编程逻辑(PL)都必须依靠PS来完成芯片的初始化配置。ZYNQ的两种启动模式:从BootROM主动启动,从JTAG被动启动。
Zynq中的UART支持轮询和中断驱动两种模式。本文给出两个使用轮询模式的例子,在24篇程序框架的基础上进行改动(贴出主要改动代码,改动很小的地方,如函数接口变化导致函数声明也要改,相信你可以根据我的代码和设计目的自己完成),最后再讨论一下轮询模式的特点。
Spartan6系列FPGA常见的配置模式有5种,由模式输入管脚M1、M0决定。该5种模式可分为3大类,1. JTAG模式(可归为从模式);2. 主模式;3. 从模式。
上一篇咱们介绍了7系列FPGA的整体时钟架构,知道了FPGA是由很多个时钟区域组成,时钟区域之间可以通过Clock Backbone 和CMT Backbone来统一工作。本篇咱们就说一下时钟区域的内部结构。
上文对Zynq中的UART控制器做了简单介绍。从本文开始将以实例的方式详细讲述UART的各种使用方法。本文是UART最基础的使用方法,每秒发送一个“hello world”,实现的功能与printf或xil_printf相同。但后面介绍UART更复杂特性的文章,都是在本文设计的基础上进行改动。
<strong>SDK程序设计</strong>
Vivado中配置Zynq时启用开发板提供的UART接口。SDK中user_uart.h文件代码如下:
<pre>
#ifndef SRC_USER_UART_H_
#define SRC_USER_UART_H_
本文简单介绍Zynq中的UART控制器,重点放在编程所需了解的知识。很多功能使用库函数可以快速配置,因此没必要仔细了解每个寄存器是干什么的这种问题,应把精力放在UART的特性、工作原理和可实现功能方面。
外部触发信号到来后,执行若干步骤,步骤由计数器控制。(这里的计数器可计数为0-127)。故触发信号高电平使能计数器使能信号(用组合逻辑实现)。仅计数器记到127后,或者复位信号到来,计数器使能归0.使能一旦归零,计数器恢复0。
从本文档开始将介绍PS和PL之间通过AXI总线互联。三种AXI总线协议为① AXI_LITE:性能较低的地址映射传输,一次只能传输4字节;② AXI_STREAM:高速流数据传输,无地址映射,不能直接与PS连接;③ AXI(又称AXI_FULL):性能较高的地址映射传输。
axi_timer模块即为PS可以访问的PL计数器,通过计数值以及接入axi_timer的计数时钟周期,可以在PS内取得比较精确的计时。axi_timer有2种使用方式,一种是作为计数器使用,另一种是作为定时器使用。
上篇中我们简单了解了XADC和其基本使用方法,本文我们将学习XADC的报警功能和中断的使用方法。程序中我们设置温度和VCCPAUX的上、下报警阈值。当超出这个范围时,便进入中断进行报警提示。
本文将介绍如何在PS中调用Zynq内部的XADC模块进行片内温度和电源电压测量。先了解XADC的相关知识,再通过实例体会XADC的用法,学习XADC API函数的使用。
axi_timer模块即为PS可以访问的PL计数器,通过计数值以及接入axi_timer的计数时钟周期,可以在PS内取得比较精确的计时。axi_timer有2种使用方式,一种是作为计数器使用,另一种是作为定时器使用