基于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、使用串口发送数据到电脑
外设功能定义
**我是二楼**❤️
## 外设功能定义
既然已经知道了需求,下一步就是在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或应用处理器 |
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}
工程构建完了,跑了个hello word,剩下的就是写各个驱动了。
页:
[1]