可进qq群进行相关Verilog知识交流:1073030956
前言
Zynq平台通常有多个Headers和接口,它们用来连接外部设备或者直接连接Zynq PL引脚。许多现成的外部设备都可以连接到Pmod和Arduino接口上。其他的外部设备可以通过转换器(Adapter)或者面包板(Breadboard)连接到这些端口。需要注意的是当我们要使用一个外部设备的时候,我们必须先在overlay中构建一个控制器,并提供相应的软件驱动,然后我们才能使用这个设备。
接下来,我们按照如下目录逐一介绍:
- Arduino
- Grove
- Pmod
- RPi
Arduino
Arduino子包包含了所有用来控制连接到Arduino端口的外部设备的驱动装置。一个Arduino连接器可以把Arduino compatible shields连接到PL引脚上。不过要记得在一个overlay里必须有相应的控制器来执行对应的驱动,这之后shield才能被使用。Arduino引脚也可以用作通用引脚来连接传统的硬件设施。
如果有的话,一个Arduino PYNQ MicroBlaze可以控制Arduino接口。这个MicroBlaze就和Pmod的MicroBlaze一样,只是有更多的AXI控制器。
正如在图标里所示,Arduino PYNQ MicroBlaze有一个PYNQ MicroBlaze子系统,一个配置开关,以及以下AXI控制器:
-
AXI I2C
-
Frequency: 100KHz
-
Address mode: 7 bit
-
-
2x AXI SPI
-
Master mode
-
Transaction Width: 8
-
SCK Frequency: 6.25 MHz
-
FIFO Depth: 16
-
注意:一个SPI控制器是连接到专门的SPI引脚Arduino接口上的。
-
3x AXI GPIO
- 16 Input/Output pins total
-
6x AXI Timer
-
32 bits
-
1 Generate Output
-
1 PWM Output
-
-
1x AXI UART
- 9600 Baud
-
1x AXI XADC
- 1V peak-to-peak *
警告:模拟输入能通过内部的Xilinx XADC获得支持。这将支持1V peak-to-peak的输入。注意Arduino接口支持0-5V模拟输入,但没有外部电路的Zynq是不支持的。
-
AXI Interrupt controller(AXI中断控制器)
管控MicroBlaze子系统上的外部设备的中断操作。
-
Interrupt GPIO(中断GPIO)
有一个额外的AXI GPIO被用来标记发送到PS的中断请求。
-
Configurable Switch(配置开关)
允许从特定设备发送信号至外部接口。
实例:
在Base Overlay里,有一个Arduino PYNQ MicroBlaze实例。在overlay被下载后,这个实例可按如下方式调用。
from pynq.overlays.base import BaseOverlay
from pynq.lib.arduino import Arduino_LCD18
lcd = Arduino_LCD18(base.ARDUINO)
lcd.clear()
在pynq.lib.arduino包里可以找到更多有关Arduino的信息。
Grove
Grove外部设备可以通过使用PYNQ Grove Adapter来连接到Pmod引脚上或者通过PYNQ Shield连接到Arduino引脚上。
连接Grove外部设备的第一个办法就是用Pmod PYNQ MicroBlaze。Grove设备可以依靠PYNQ Grove Adapter连接到Pmod端口。
上面这个板上,G1和G2是映射到Pmod引脚[0,4]和[1,5],也即连接到拥有下拉电阻(pull-down resistor)的引脚上。G1、G2端口支持SPI协议,GPIO,计时Grove设备,但是不支持IIC外部设备。G3、G4则映射到引脚[2,6]和[3,7],也即连接到上拉电阻(pull-up resistor)的引脚,并支持IIC协议和GPIO外部设备。
在PYNQ Shield上有四个IIC Grove 连接器(IIC又可标记为I2C),8个垂直的Grove连接器(G1-G7、UART)和4个水平Grove连接器(A1-A4)。SCL和SDA引脚是连接在Arduino header上的SCL和SDA引脚。
下面的表格标记了映射交互协议。
实例:
在Base Overlay里,有两个可用实例:PMODA和PMODB。在一个overlay下载后,可如下创建Grove外设实例:
from pynq.overlays.base import BaseOverlay
from pynq.lib.pmod import Grove_Buzzer
from pynq.lib.pmod import PMOD_GROVE_G1
base = BaseOverlay("base.bit")
grove_buzzer = Grove_Buzzer(base.PMODB,PMOD_GROVE_G1)
grove_buzzer.play_melody()
我们可以在pynq.lib.pmod找到更多例子。板上下面的地址里可以找到更多有关PYNQ Grove Adapter的例子
<Jupyter Dashboard>/base/pmod/
Arduino接口的使用方法如下:
from pynq.overlays.base import BaseOverlay
from pynq.lib.arduino import Grove_LEDbar
from pynq.lib.arduino import ARDUINO_GROVE_G4
base = BaseOverlay("base.bit")
ledbar = Grove_LEDbar(base.ARDUINO,ARDUINO_GROVE_G4)
ledbar.reset()
Pmod
Pmod包是一个使用Pmod端的外部设备的驱动集合。一个Pmod端口是一个12引脚接口,很多来自Digilent和其他第三方合作生产商的Pmod设备都可使用。传统的Pmod外接设备包括了各式传感器(光、温度)、交互设备(网口、WIFI、蓝牙)以及输入输出设备(按钮、开关、LED)。
每一个Pmod连接器是由2排6引脚共计12引脚构成的。每一排由3.3V(VCC),接地(GND)以及4个数据引脚构成。如果使用两排的话那就是8个数据引脚。
Pmod使用双排引脚时(2x4引脚或者2x6引脚),应该从左边开始插入(以连上VCC和GND)
而只使用一拍的Pmod设备可以使用任意一排,但还是要从左边开始插入。如果你要使用一个别人写好了的驱动或者overlay的话,你需要检查到底那一排是支持这个设备的,并不一定是两排都能成功。比如说,Pmod ALS目前就只支持上面一排的端口。
所有的引脚都在3.3V时正常工作。根据不同设备的不同上拉/下拉的I/O要求,Pmod数据引脚会有不同的IO标准。(例如IIC需要上拉,SPI需要下拉)
引脚0,1和4,5是连接到下拉电阻。这个可以支持SPI接口以及大部分外接设备。引脚2,3和6,7是连接到上拉电阻。这个可以支持IIC接口。
Pmod已经把这个上下拉的传统考虑进去了,所以在使用Pmod的时候无需额外担心。
正如上面所示,每一个Pmod PYNQ MicroBlaze有一个MicroBlaze子系统,配置开关,和如下AXI控制器:
-
AXI I2C
- SCL Frequency 100 KHz
- Address Mode: 7 bits
-
AXI SPI
-
Master mode
-
Transaction Width: 8
-
SCK Frequency: 6.25 MHz
-
FIFO Depth: 16
-
-
AXI GPIO
- 8 Input/Output pins
-
AXI Timer
-
32 bits
-
1 Generate Output
-
1 PWM Output
-
-
AXI Interrupt controller
- 管理外设的中断。
-
Interrupt GPIO
- 有一个额外的AXI GPIO被用来标记发送到PS的中断请求。
-
Configurable Switch
- 允许从特定设备发送信号至外部接口。
实例:
from pynq.overlays.base import BaseOverlay
from pynq.lib import Pmod_Timer
base = BaseOverlay("base.bit")
pt = Pmod_Timer(base.PMODA,0)
pt.stop()
RPi
Rpi子包是控制连接RPi(Raspberry Pi)接口外设的驱动集合。同样的,在使用具体设备之前,我们需要加载相应的overlay上的控制器。RPi引脚也可用作通用引脚来连接传统的硬件设备。
如上图所示,RPi PYNQ MicroBlaze有一个PYNQ MicroBlaze子系统,一个配置开关和如下AXI控制器:
-
2x AXI I2C
-
Frequency: 100KHz
-
Address mode: 7 bit
-
-
2x AXI SPI
- Master mode
- Transaction Width: 8
- SCK Frequency: 6.25 MHz
- FIFO Depth: 16
注意:一个SPI控制器是连接到专门的SPI引脚Arduino接口上的。
- 1x AXI GPIO
- 28 Input/Output pins total
- 2x AXI Timer
- 32 bits
- 1 Generate Output
- 1 PWM Output
- 1x AXI UART
- 115200 Baud
- AXI Interrupt controller
- 管理外设的中断。
- Interrupt GPIO
- 有一个额外的AXI GPIO被用来标记发送到PS的中断请求。
- Configurable Switch
- 允许从特定设备发送信号至外部接口。
在pynq.lib.rpi包里可以找到更多信息。