admin 发表于 2021-11-26 22:02:42

基于Zynq的裸机系统设计小练习

# 基于ACZ702设计一个综合的应用系统

## 目标

通过该系统掌握各种常用外设的使用方法,并构建出一套实用的软件应用库。

## 硬件平台

1. 1、ACZ702 Zynq开发板
1. 2、EDA扩展板-V3

## 基本功能

1. 1、使用PS的SPI通过EMIO导出后驱动数码管
   2、使用PL的SPI驱动ADC
   3、使用PIO读取拨码开关的值
   4、将采集的数据存储到SD卡,使用文件系统
   5、使用按键控制数码管上显示的内容,按键的检测使用中断
   6、使用自定义IP核实现DDS功能
   7、使用数码管显示时间
   8、支持电压表功能
   9、支持连续采集功能
   10、使用串口接收指令
   11、使用串口发送数据到电脑

admin 发表于 2021-11-26 22:16:36

外设功能定义

**我是二楼**

❤️

## 外设功能定义

既然已经知道了需求,下一步就是在Vivado中去创建工程,创建PL+PS的块设计文件(Block Design)了。添加完Zynq Processing System之后,看着绿绿的Zynq页面,我就开始疑问,我需要添加哪些外设,第一个疑问,我要添加的外设功能,根据一楼的任务计划,可以明确是需要添加:

| 功能   | 外设控制器 | 位置 | 备注                                                                                                   |
| -------- | ---------- | ---- | ------------------------------------------------------------------------------------------------------ |
| 数码管   | SPI      | PS   | 配合定时器实现定时刷新                                                                                 |
| ADC      | SPI      | PL   | 可以选择切换使用高速连续控制器(Verilog驱动)和SPI通用控制器                                           |
| 拨码开关 | IO         | PL   | 都行,节约EMIO吧                                                                                       |
| 按键   | IO         | PS   | 用到中断,使用EMIO方便一些                                                                           |
| SD卡   | SDIO       | PS   | 这个控制器比较复杂,用PS自带的要方便省事很多,PL实现代价比较大                                       |
| DAC      | 自定义IP   | PL   | DDS 需要使用PL逻辑实现                                                                                 |
| 调试串口 | UART       | PS   | PS侧串口实现调试信息打印                                                                               |
| 数据串口 | UART       | PL   | PL侧串口比较灵活,一般不会与调试串口的硬件绑定,可以随意 ,远端可以是电脑,也可以是各种MCU或应用处理器 |

## 外设编号确定

当确定了各个功能使用PS或PL中的哪个控制器后,下一步就是确定硬件映射,例如对于PS侧的串口,PS侧总共有2个串口,这两个串口又能够分别映射到多组MIO,这个时候,选择哪个串口,以及选择哪组MIO,就需要根据硬件板卡来确定了,因为对于一个确定的硬件板卡,各个功能所对应的IO就都已经是限定好了。需要按照硬件电路的设计去对应选择控制器和对应的MIO。

我们目前提供的Zynq全功能教学平台型号为ACZ702,在该开发板上,UART1使用MIO48和MIO49这两个IO,通过CP2104型USB转串口芯片,实现调试串口的功能,所以PS侧的串口只能使用UART1,对应IO为MIO48和MIO49,具体的对应关系我是从“Zynq SoC 嵌入式设计和开发教程的硬件介绍部分查到的。

以下为本案例中各个外设控制器的进一步使用情况。

| 功能   | 外设控制器 | 位置 | 控制器编号 | 管脚   | 备注                                                                                                   |
| -------- | ---------- | ---- | ---------- | -------- | ------------------------------------------------------------------------------------------------------ |
| 数码管   | SPI      | PS   | SPI0       | EMIO   | 配合定时器实现定时刷新                                                                                 |
| ADC      | SPI      | PL   |            |          | 可以选择切换使用高速连续控制器(Verilog驱动)和SPI通用控制器                                           |
| 拨码开关 | IO         | PL   |            |          | 都行,节约EMIO吧                                                                                       |
| 按键   | IO         | PS   |            | EMIO   | 用到中断,使用EMIO方便一些                                                                           |
| SD卡   | SDIO       | PS   | SD0      | MIO40-45 | 这个控制器比较复杂,用PS自带的要方便省事很多,PL实现代价比较大                                       |
| DAC      | 自定义IP   | PL   |            |          | DDS 需要使用PL逻辑实现                                                                                 |
| 调试串口 | UART       | PS   | UART1      | MIO48-49 | PS侧串口实现调试信息打印                                                                               |
| 数据串口 | UART       | PL   |            |          | PL侧串口比较灵活,一般不会与调试串口的硬件绑定,可以随意 ,远端可以是电脑,也可以是各种MCU或应用处理器 |

admin 发表于 2021-12-1 13:14:47



set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property IOSTANDARD LVCMOS33 }]
set_property PACKAGE_PIN J16
set_property PACKAGE_PIN K16
set_property PACKAGE_PIN M19
set_property PACKAGE_PIN M20
set_property PACKAGE_PIN L19
set_property PACKAGE_PIN M18 }]
set_property PACKAGE_PIN D20
set_property PACKAGE_PIN E19
set_property PACKAGE_PIN F17
set_property PACKAGE_PIN E17 }]
set_property PACKAGE_PIN D18 }]
set_property PACKAGE_PIN H15 }]
set_property PACKAGE_PIN F16 }]
set_property PACKAGE_PIN J14 }]
set_property PACKAGE_PIN G14 }]
set_property PACKAGE_PIN L15 }]
set_property PACKAGE_PIN K14 }]
set_property PACKAGE_PIN J19 }]
set_property PACKAGE_PIN J20 }]
set_property PACKAGE_PIN H16 }]
set_property PACKAGE_PIN H20 }]


管脚分配如上所述,另外由于部分IO没有使用,例如通过EMIO导出的PS的SPI0,其中SS1和SS2,以及MISO都没有使用,所以需要设置这些信号不检查管脚约束,使用下面的语句:

set_property SEVERITY {Warning}
set_property SEVERITY {Warning}
set_property SEVERITY {Warning}


admin 发表于 2021-12-2 23:32:38


工程构建完了,跑了个hello word,剩下的就是写各个驱动了。
页: [1]
查看完整版本: 基于Zynq的裸机系统设计小练习