【问题标题】:How to connect the inout data ports to multiple IOs如何将输入数据端口连接到多个 IO
【发布时间】:2021-11-05 14:06:09
【问题描述】:

我正在使用 ArtyA7 开发板开发 SPI Master,我想知道是否可以将 inout 数据端口连接到多个 IO,这些 IO 将连接到多个 spi 从机?我试过这样做:

set_property -dict {PACKAGE_PIN L16 IOSTANDARD LVCMOS33} [get_ports spi_clk]
set_property -dict {PACKAGE_PIN L13 IOSTANDARD LVCMOS33} [get_ports {spi_cs[0]}]

set_property -dict {PACKAGE_PIN k17 IOSTANDARD LVCMOS33} [get_ports {spi[0]}]
set_property -dict {PACKAGE_PIN k18 IOSTANDARD LVCMOS33} [get_ports {spi[1]}]
#JA
set_property -dict {PACKAGE_PIN G13 IOSTANDARD LVCMOS33} [get_ports {spi_cs[1]}]
set_property -dict {PACKAGE_PIN B11 IOSTANDARD LVCMOS33} [get_ports {spi[0]}]
set_property -dict {PACKAGE_PIN A11 IOSTANDARD LVCMOS33} [get_ports {spi[1]}]
set_property -dict {PACKAGE_PIN D12 IOSTANDARD LVCMOS33} [get_ports spi_clk]

其中 spi[i] 是一个输入端口。但是当我打开实现的设计时,我看到 vivado 只实现了最后一个约束。我的流程出了什么问题?

【问题讨论】:

    标签: fpga vivado


    【解决方案1】:

    据我所知,set_property 将覆盖现有值,因此第二次调用它时,会将引脚的 PACKAGE_PINIOSTANDARD 属性更改为新值。

    通常对于 SPI 总线,您应该与所有设备共享公共引脚(clk、miso、mosi),所以当您可以连接时,我认为没有理由在 fpga 的多个引脚上提供这些引脚它们直接一起在板上,同时保持芯片选择引脚分开:

    (来源:https://en.wikipedia.org/wiki/Serial_Peripheral_Interface

    另外,我会将两个数据引脚直接定义为inputoutput,而不是将两者都定义为inout,因为它们都只用于一个方向。

    如果出于某种原因(想到电路板设计,但您使用的开发板没有此要求)您需要在多个引脚上重复信号,我会添加一个小型 RTL 模块来执行此操作:

    module duplicate_pin(input pin_value, output output_1, output output_2);
        assign output_1 = pin_value;
        assign output_2 = pin_value;
    endmodule
    

    然后您可以根据需要将该模块的两个输出分配到不同的引脚。

    这仅适用于mosi 引脚,因为您一次只需要读取一个miso 输入,根据当前活动的从设备进行选择。

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 2022-08-21
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多