1 使用EMIO

news/2025/1/18 6:32:24/

前言

  • 在ZCU106手册中写到,用户可用的USER IO大部分在PL端,包括LED, PUSHBUTTOPN, DIP switch; 因此我们只能使用PL端的资源,也就是EMIO

    • ![[Pasted image 20250110221428.png]]
  • GPIO 引脚号分配

    • PS 端 0~77
    • PL 端 78~
    • ![[Pasted image 20250111145218.png]]
  • PS 端GPIO相关寄存器(X : BANK 编号0-5)

    • DATA_X_RO
      • 此寄存器使能软件观察 PIN 脚,当 GPIO 被配置成输出的时候,这个寄存器的值会反应输出的 PIN 脚情况。
    • DATA_X
      • 此寄存器控制输出到 GPIO 的值,读这个寄存器的值可以读到最后一次写入该寄存器的值。
    • MASK_DATA_X_LSW
      • 位操作寄存器,写入 GPIO 低 16bit 其他没有改变的位置保存原先的状态
    • MASK_DATA_X_MSW:
      • 位操作寄存器,写入 GPIO 高 16bit 其他没有改变的位置保存原先的状态
    • DIRM_X:
      • 此寄存器控制输出的开关,当 DIRM_X == 0为输入模式,1为输出模式
    • OEN_X:
      • 输出使能,当 OEN_X == 0 的时候输出关闭,PIN 脚处于三态, 只有在输出模式的时候进行使能
    • 如 果 要 读 IO 状 态 就 得 读 DATA_RO 的 值 , 如 果 是 对 某 一 位 进 行 操 作 就 是 写MASK_DATA_LSW/MASK_DATA_MSW
  • PL 端 EMIO

    • EMIO 是接到 FPGA 的 IO 上的,所以输入输出和 OEN寄存器无关。
    • 当 DIRM 寄存器中的位设置为 0(使其成为输入)时,可以从 DATA_0_R0 寄存器读取它们。
    • 输出不具有三态功能,并且不受 OEN 寄存器的影响。 使用 DATA,MASK_DATA_LSW 和 MASK_DATA_MSW寄存器对输出值进行编程。DIRM 必须设置为 1(使其成为输出)。
    • 输 出 不 能 设 置 成 三 态 , 当 DIRM 设 置 为 1 的 时 候 为 输 出 , 写 入 DATA 寄 存 器 或 者MASK_DATA_LSW/MASK_DATA_MSW 寄存器

实验

查询手册

  • PL端有两类资源供PS端可使用,分别输出和输入
    • 输出 LED:(ug1244- p88)

      • ![[Pasted image 20250110222601.png]]
    • 输入 pushbutton / DIP switch: (刚244- p88)

      • 在这里插入图片描述
    • 给出了映射到的PL的IO引脚和电平标准

      • 踩坑: 在手册收LED的电平标准为LVCOMS12,但是在实现的时候会报错,可以将LED的电平标准都设为LVCMOS18

创建BD

这里我关闭了一切外接端口

注意事项

在这里插入图片描述

DDR Config

注意修改为图示
![[Pasted image 20250110223203.png]]

GPIO 数量配置

如图示,使用三个GPIO EMIO
![[Pasted image 20250110223337.png]]

验证BD

![[Pasted image 20250110223522.png]]

生成顶层文件

过程省略

//Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.
//--------------------------------------------------------------------------------
//Tool Version: Vivado v.2020.2 (win64) Build 3064766 Wed Nov 18 09:12:45 MST 2020
//Date        : Fri Jan 10 21:01:26 2025
//Host        : XSZ-20240623MQG running 64-bit major release  (build 9200)
//Command     : generate_target led_emio_wrapper.bd
//Design      : led_emio_wrapper
//Purpose     : IP block netlist
//--------------------------------------------------------------------------------
`timescale 1 ps / 1 ps
module led_emio_wrapper(EMIO_tri_io);inout [2:0]EMIO_tri_io;wire [0:0]EMIO_tri_i_0;wire [1:1]EMIO_tri_i_1;wire [2:2]EMIO_tri_i_2;wire [0:0]EMIO_tri_io_0;wire [1:1]EMIO_tri_io_1;wire [2:2]EMIO_tri_io_2;wire [0:0]EMIO_tri_o_0;wire [1:1]EMIO_tri_o_1;wire [2:2]EMIO_tri_o_2;wire [0:0]EMIO_tri_t_0;wire [1:1]EMIO_tri_t_1;wire [2:2]EMIO_tri_t_2;IOBUF EMIO_tri_iobuf_0(.I(EMIO_tri_o_0),.IO(EMIO_tri_io[0]),.O(EMIO_tri_i_0),.T(EMIO_tri_t_0));IOBUF EMIO_tri_iobuf_1(.I(EMIO_tri_o_1),.IO(EMIO_tri_io[1]),.O(EMIO_tri_i_1),.T(EMIO_tri_t_1));IOBUF EMIO_tri_iobuf_2(.I(EMIO_tri_o_2),.IO(EMIO_tri_io[2]),.O(EMIO_tri_i_2),.T(EMIO_tri_t_2));led_emio led_emio_i(.EMIO_tri_i({EMIO_tri_i_2,EMIO_tri_i_1,EMIO_tri_i_0}),.EMIO_tri_o({EMIO_tri_o_2,EMIO_tri_o_1,EMIO_tri_o_0}),.EMIO_tri_t({EMIO_tri_t_2,EMIO_tri_t_1,EMIO_tri_t_0}));
endmodule

创建约束文件

set_property PACKAGE_PIN AL11 [get_ports {EMIO_tri_io[0]}]set_property PACKAGE_PIN AL10 [get_ports {EMIO_tri_io[1]}]set_property PACKAGE_PIN A17 [get_ports {EMIO_tri_io[2]}]set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_tri_io[*]}]# bit compress
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]

生产bit流并导出配置文件

。。。。。后面就是SDK干的活了


http://www.ppmy.cn/news/1564079.html

相关文章

AIGC时代 | 探索AI Agent的奥秘:四种设计模式引领未来智能趋势

文章目录 1. 反思案例: 2. 工具使用案例: 3. 规划案例: 4. 多Agent协作案例: 总结作者简介:延伸阅读内容简介:目录 导读:AI Agent是指能够在特定环境中自主执行任务的人工智能系统,不…

R语言的并发编程

R语言的并发编程 引言 在现代计算中,如何有效地利用计算资源进行数据处理和分析已成为一个重要的研究方向。尤其在大数据时代,数据量的急剧增加让单线程处理方式显得力不从心。为了解决这一问题,各种编程语言都开展了并发编程的研究和应用。…

Node.js path.join

path.join 是 Node.js 中的 path 模块提供的一个方法,用于连接多个路径片段并规范化路径。与 path.resolve不同,path.join 只是将给定的路径片段合并为一个单一的路径,并且不会自动转换为绝对路径,它只会拼接并返回一个规范化的路…

从0开始学习搭网站第二天

前言:今天比较惭愧,中午打铲吃了一把,看着也到钻二了,干脆顺手把这个赛季的大师上了,于是乎一直到网上才开始工作,同样,今天的学习内容大多来自mdn社区mdn 目录 怎么把文件上传到web服务器采用S…

基于Vue和Vuex实现俄罗斯方块小游戏

用 Vue、Vuex 做俄罗斯方块 本项目灵感来源于 React 版的俄罗斯方块,由于对其实现原理较感兴趣,而且相比于 React 更喜欢 Vue, 于是把 React 版的重构为了 Vue 版的,大致思路是把组件当成一个个函数,保证一个输入(props)能得到一个确定的输出(view),然后对不同方法也是做同样处…

西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】

AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…

dockerhub上一些镜像

K8s下网络排障工具 https://hub.docker.com/r/nicolaka/netshoot ex kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash # 主机的net ns下运行 kubectl run tmp-shell --rm -i --tty --overrides{"spec": {"hostNetwork": tru…

git 命令如何在本地新建分支,并push到远程仓库的新分支上

在 Git 中,新建本地分支并将其推送到远程仓库的新分支上,可以按照以下步骤进行: 确保工作目录是干净的: 在开始之前,最好确保你的工作目录中没有未提交的更改。你可以通过运行 git status 来检查。 新建本地分支&…