适用于xilinx FPGA的 FTDI FT245 同步异步 FIFO 桥接源码-FPGA开源项目社区-FPGA CPLD-ChipDebug

适用于xilinx FPGA的 FTDI FT245 同步异步 FIFO 桥接源码

FTDI FT245 同步/异步 FIFO 桥

该组件提供了从 FTDI 异步或同步 FIFO 接口(例如在 FT245 或 FT2232 上找到)到 AXI4 主设备和 GPIO 接口的桥接。

FT2232 等设备必须使用 FTDI 的 FT_PROG EEPROM 编程工具切换到 FIFO 模式。
支持它的 FTDI 设备的异步和同步模式之间的选择是在运行时通过 ftdi_set_bitmode API 完成的。

该组件支持读取和写入到字节级别的粒度。

支持的 FTDI 设备
FTDI 设备 频道数 异步 FIFO 支持 同步 FIFO 支持
FT245B 1 真的 错误的
FT245R 1 真的 错误的
FT240X 1 真的 错误的
FT2232D 2 真的 错误的
FT232H 1 真的 真的
FT2232H 2 真的 真的

有关详细信息,请参阅FTDI 的TN_167 FIFO 基础知识

测试

在仿真下验证并在 FPGA 上验证。
在使用 FTDI FT2232HL(异步模式)的 miniSpartan6+ 板上使用,并使用带有 FTDI FT2232HL(同步模式)的 Xilinx Artix 7 板。

配置
  • 顶部:ftdi_bridge
  • 时钟:clk_i – 必须从 FTDI 设备获取模式 = SYNC
  • 复位:rst_i – 异步,高电平有效
  • 参数 MODE -“SYNC”或“ASYNC”FT245 模式
  • 参数 CLK_DIV – 时钟分频器(最小值为 2)(仅对 MODE=”ASYNC” 有效)
  • 参数 GP_OUTPUTS – GPIO 输出数量 (1 – 8)
  • 参数 GP_INPUTS – GPIO 输入的数量 (1 – 8)
  • 参数 AXI_ID – 要使用的 AXI ID
尺寸/速度

对于异步模式;

  • ~220 次失败 / 320 LUT (Spartan 6)
  • 在 Xilinx Spartan 6 LX9 上约 200MHz(速度 -3)

对于同步模式;

  • ~275 次失败 / 598 个 LUT (Spartan 6)
  • 在 Xilinx Spartan 6 LX9 上约 165MHz(速度 -3)
实例化示例

此示例适用于 Xilinx FPGA;

wire [7:0] ftdi_data_in_w;
wire [7:0] ftdi_data_out_w;

ftdi_bridge
#(
	.MODE("SYNC")
)
u_bridge
(
     .clk_i(ftdi_clk_i)
    ,.rst_i(rst)

    ,.mem_awvalid_o(...)
    ,.mem_awaddr_o(...)
    ,.mem_awid_o(...)
    ,.mem_awlen_o(...)
    ,.mem_awburst_o(...)
    ,.mem_wvalid_o(...)
    ,.mem_wdata_o(...)
    ,.mem_wstrb_o(...)
    ,.mem_wlast_o(...)
    ,.mem_bready_o(...)
    ,.mem_arvalid_o(...)
    ,.mem_araddr_o(...)
    ,.mem_arid_o(...)
    ,.mem_arlen_o(...)
    ,.mem_arburst_o(...)
    ,.mem_rready_o(...)    
    ,.mem_awready_i(...)
    ,.mem_wready_i(...)
    ,.mem_bvalid_i(...)
    ,.mem_bresp_i(...)
    ,.mem_bid_i(...)
    ,.mem_arready_i(...)
    ,.mem_rvalid_i(...)
    ,.mem_rdata_i(...)
    ,.mem_rresp_i(...)
    ,.mem_rid_i(...)
    ,.mem_rlast_i(...)

    ,.ftdi_rxf_i(ftdi_rxf_i)
    ,.ftdi_txe_i(ftdi_txe_i)
    ,.ftdi_data_in_i(ftdi_data_in_w)
    ,.ftdi_siwua_o(ftdi_siwua_o)
    ,.ftdi_wrn_o(ftdi_wrn_o)
    ,.ftdi_rdn_o(ftdi_rdn_o)
    ,.ftdi_oen_o(ftdi_oen_o)
    ,.ftdi_data_out_o(ftdi_data_out_w)

);

assign ftdi_data_in_w = ftdi_data_io;
assign ftdi_data_io   = ftdi_oen_o ? ftdi_data_out_w : 8'hZZ;

下载地址:

 

请登录后发表评论

    没有回复内容