版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46621272/article/details/126969154
AXI EPC IP 使用详细说明
T1-T15 以 SJA1000 芯片的时序为例子,选的参数。波形图片也是从 SJA1000手册中截取的。
//EPC 接 SJA1000 例子
//Address Width 8
//Data Bus Width 8
//Enable Data Width Matching 1
//Enable ADDR/DATA Multiplexing 1
//Enable SYNC Mode 0
module fpga_axi_epc_ad8_root //这是顶层代码管脚的 EPC 相关部分
(
//..
inout [7:0] ad,
output ads,
output cs_n,
output wr_n,
output rd_n,
);
genvar n;
logic [7:0] epc_data_i; // 8 位
logic [7:0] epc_data_o;
logic [7:0] epc_data_t;
logic [7:0] epc_addr;
for(n=0;n<8;n++)
begin:for_iobuf_xx
assign ad[n] = epc_data_t[n] == 1 ? 1'bz:epc_data_o[n];
assign epc_data_i[n] = ad[n];
end
cpu_block_design ux //Block Design EPC 接口部分
(
.epc_addr (epc_addr), //output [0:7]
.epc_ads (ads), //output
.epc_be (), //output [0:0]
.epc_burst (), //output
.epc_cs_n (cs_n), //output [0:0]
.epc_data_i (epc_data_i), //input [0:7]
.epc_data_o (epc_data_o), //output [0:7]
.epc_data_t (epc_data_t), //output [0:7]
.epc_rd_n (rd_n), //output
.epc_rdy (1),
.epc_rnw (), //output
.epc_wr_n (wr_n), //output
.epc_clk (1),
.epc_rst (1),
);
endmodule
//EPC 接 SRAM 6264 例子
//Address Width 16
//Data Bus Width 8
//Enable Data Width Matching 1
//Enable ADDR/DATA Multiplexing 0
//Enable SYNC Mode 0
module fpga_axi_epc_d8_a16_root //这是顶层代码管脚的 EPC 相关部分
(
//..
inout [7:0] d,
output [15:0] a,
output cs_n,
output wr_n,
output rd_n,
);
genvar n;
logic [7:0] epc_data_i; // 8 位
logic [7:0] epc_data_o;
logic [7:0] epc_data_t;
logic [7:0] epc_addr;
for(n=0;n<8;n++)
begin:for_iobuf_xx
assign d[n] = epc_data_t[n] == 1 ? 1'bz:epc_data_o[n];
assign epc_data_i[n] = d[n];
end
cpu_block_design ux //Block Design EPC 接口部分
(
.epc_addr (a), //output [0:15]
.epc_ads (), //output
.epc_be (), //output [0:0]
.epc_burst (), //output
.epc_cs_n (cs_n), //output [0:0]
.epc_data_i (epc_data_i), //input [0:7]
.epc_data_o (epc_data_o), //output [0:7]
.epc_data_t (epc_data_t), //output [0:7]
.epc_rd_n (rd_n), //output
.epc_rdy (1),
.epc_rnw (), //output
.epc_wr_n (wr_n), //output
.epc_clk (1),
.epc_rst (1),
);
endmodule
//EPC 接 SRAM 2片 6264 例子
//Address Width 16
//Data Bus Width 16
//Enable Data Width Matching 1
//Enable ADDR/DATA Multiplexing 1
//Enable SYNC Mode 0
module fpga_axi_epc_ad16_root //这是顶层代码管脚的 EPC 相关部分
(
//..
output [15:0] ad,
output ads,
output cs_n,
output wr0_n,
output wr1_n,
output rd_n,
);
genvar n;
logic [15:0] epc_data_i; // 16 位
logic [15:0] epc_data_o;
logic [15:0] epc_data_t;
logic [15:0] epc_addr;
logic [1:0] epc_be;
logic epc_wr_n;
for(n=0;n<16;n++)
begin:for_iobuf_xx
assign ad[n] = epc_data_t[n] == 1 ? 1'bz:epc_data_o[n];
assign epc_data_i[n] = ad[n];
end
assign wr0_n = (~epc_be[0])|epc_wr_n;
assign wr1_n = (~epc_be[1])|epc_wr_n;
cpu_block_design ux //Block Design EPC 接口部分
(
.epc_addr (), //output [0:15]
.epc_ads (ads), //output
.epc_be (epc_be), //output [0:1]
.epc_burst (), //output
.epc_cs_n (cs_n), //output [0:0]
.epc_data_i (epc_data_i), //input [0:15]
.epc_data_o (epc_data_o), //output [0:15]
.epc_data_t (epc_data_t), //output [0:15]
.epc_rd_n (rd_n), //output
.epc_rdy (1),
.epc_rnw (), //output
.epc_wr_n (epc_wr_n), //output
.epc_clk (1),
.epc_rst (1),
);
endmodule