1 使用EMIO

前言

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

  • GPIO 引脚号分配

    • PS 端 0~77
    • PL 端 78~
  • 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)

      • !
    • 输入 pushbutton / DIP switch: (刚244- p88)

    • 给出了映射到的PL的IO引脚和电平标准

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

创建BD

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

注意事项
DDR Config

注意修改为图示

GPIO 数量配置

如图示,使用三个GPIO EMIO

验证BD

生成顶层文件

过程省略

verilog 复制代码
//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

创建约束文件

xdc 复制代码
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干的活了

相关推荐
szxinmai主板定制专家8 小时前
国产RK3568+FPGA以 ‌“实时控制+高精度采集+灵活扩展”‌ 为核心的解决方案
大数据·运维·网络·人工智能·fpga开发·机器人
FPGA_ADDA9 小时前
基于FPGA 和DSP 的高性能6U VPX 采集处理板
fpga开发·dsp·6u vpx·8通道采集
FakeOccupational12 小时前
fpga系列 HDL:跨时钟域同步 脉冲展宽同步 Pulse Synchronization
fpga开发
丶七年先生12 小时前
牛客 verilog入门 VIP
fpga开发
hahaha601615 小时前
ARINC818协议(六)
网络·fpga开发
深圳信迈科技DSP+ARM+FPGA15 小时前
基于ARM+FPGA+DSP的储能协调控制器解决方案,支持国产化
arm开发·fpga开发·信号处理
承接电子控制相关项目19 小时前
单片机与FPGA的核心差异、优缺点、编程差异、典型应用场景、选型等对比分析
单片机·嵌入式硬件·fpga开发
XINVRY-FPGA21 小时前
XCZU19EG-2FFVC1760I Xilinx赛灵思FPGA Zynq UltraScale+MPSoC
c++·嵌入式硬件·阿里云·fpga开发·云计算·硬件工程·fpga
kanhao1001 天前
为什么FPGA中一般不使用浮点数进行计算?
fpga开发
9527华安1 天前
国产紫光同创FPGA实现SDI视频编解码+图像缩放,基于HSSTHP高速接口,提供2套工程源码和技术支持
fpga开发·视频编解码·图像缩放·紫光同创·sdi·高速接口·hssthp