软件版本:vitis2020.2(vivado2020.2) 操作系统:WIN10 64bit 硬件平台:适用XILINX A7/K7/Z7/ZU/KU系列FPGA(米联客(milianke)MZU07A-EG硬件开发平台) 登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑! 2.1概述 使用XILINX 的软件工具VIVADO以及XILINX的7代以上的FPGA或者SOC掌握AXI-4总线结束,并且可以灵活使用AXI-4总线技术完成数据的交换,可以让我们在构建强大的FPGA内部总线数据互联通信方面取得高效、高速、标准化的优势。 关于AXI4总线协议的部分介绍请阅读"01AXI4总线axi-lite-slave"。 本文实验目的: 1:掌握基于VIVADO工具产生AXI协议模板 2:掌握通过VIVADO工具产生AXI-lite-master代码 3:理解AXI-lite-master中自定义寄存器的地址分配 4:掌握通过VIVADO封装AXI-lite-master图形化IP 5:通过仿真验证AXI-lite-master IP的工作是否正常。 2.2创建axi4-lite-master总线接口IP新建fpga工程,过程省略 新建完成工程后,单击菜单栏Tools->Create and Package New IP,开始创建一个AXI4-Lite接口总线IP 选择使用vivado自带的AXI总线模板创建一个AXI4-Lite接口IP 设置IP的名字为maxi_lite 模板支持3中协议,分别是AXI4-Full AXI4-Lite AXI4-Stream 总线包括Master和Slave两种模式,这里选择Slave模式 这里选择Verify Peripheral IP using AXI4 VIP 可以对AXI4-Lite快速验证 单击Finish 后展开VIVADO自动产生的demo,单击Block Design的工程,可以看到如下2个IP。其中maxi_lite_0就是我们自定义的IP,另外一个slave_0是用来验证maxi_lite_0正确性。 采用默认地址分配即可 继续站看代码看看里面有什么东西 路径uisrc/03_ip/ maxi_lite_1.0/hdl路径下的maxi_lite_v1_0_M00_AXI.v就是我们的源码。另外一个maxi_lite_v1_0.v是软件产生了一个接口文件,如果我们自己定义IP可有可无。 2.3程序分析axi总线信号的关键无非是地址和数据,而写地址的有效取决于AXI_AWVALID和AXI_AWREADY,写数据的有效取决于S_AXI_WVALID和S_AXI_WREADY。同理,读地址的有效取决于AXI_ARVALID和AXI_ARREADY,读数据的有效取决于S_AXI_RVALID和S_AXI_RREADY。所以以下代码的阅读分析注意也是围绕以上4个信号的有效时序。 以下程序我们把关键信号的代码拆分阅读 1:产生初始化信号 always @(posedge M_AXI_ACLK) begin // Initiates AXI transaction delay if (M_AXI_ARESETN == 0 ) begin init_txn_ff <= 1'b0; init_txn_ff2 <= 1'b0; end else begin init_txn_ff <= INIT_AXI_TXN; init_txn_ff2 <= init_txn_ff; end end |
2:axi-lite-master的axi_awvalid当start_single_write有效,开始一次写传输,设置axi_awvalid有效。 always @(posedge M_AXI_ACLK) begin //Only VALID signals must be deasserted during reset per AXI spec //Consider inverting then registering active-low reset for higher fmax if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin axi_awvalid <= 1'b0; end //Signal a new address/data command is available by user logic else begin if (start_single_write) begin axi_awvalid <= 1'b1; end //Address accepted by interconnect/slave (issue of M_AXI_AWREADY by slave) else if (M_AXI_AWREADY && axi_awvalid) begin axi_awvalid <= 1'b0; end end end |
3:axi-lite-slave的axi_awaddr always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin axi_awaddr <= 0; end // Signals a new write address/ write data is // available by user logic else if (M_AXI_AWREADY && axi_awvalid) begin axi_awaddr <= axi_awaddr + 32'h00000004; end end |
4:axi-lite-master的axi_wvalid当M_AXI_WREADY && axi_wvalid同时有效的时候,数据才是有效的,对于axi-lite_master接口,M_AXI_WREADY && axi_wvalid同时有效的时间窗口是一个时钟周期。 always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin axi_wvalid <= 1'b0; end //Signal a new address/data command is available by user logic else if (start_single_write) begin axi_wvalid <= 1'b1; end //Data accepted by interconnect/slave (issue of M_AXI_WREADY by slave) else if (M_AXI_WREADY && axi_wvalid) begin axi_wvalid <= 1'b0; end end |
5:axi-lite-master的axi_wdata产生写测试用的测试数据 always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1 ) begin axi_wdata <= C_M_START_DATA_VALUE; end // Signals a new write address/ write data is // available by user logic else if (M_AXI_WREADY && axi_wvalid) begin axi_wdata <= C_M_START_DATA_VALUE + write_index; end end |
6:写次数记录write_index计数器这个demo中以start_single_wirte信号作为统计的,如果我们完全自定axi-lite_master代码可以自行优化,可以写出更好的代码。我们这里是用vivado模板产生的代码主要线教会大家如何使用现有的手段和软件工具学习axi4总线。 always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin write_index <= 0; end // Signals a new write address/ write data is // available by user logic else if (start_single_write) begin write_index <= write_index + 1; end end |
7:axi-lite-master的axi_bready当收到写通道的axi-lite-slave发回的M_AXI_BVALDI应答信号,设置axi_bready为1,BRESP返回AXI写操作是否有错误。 always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin axi_bready <= 1'b0; end // accept/acknowledge bresp with axi_bready by the master // when M_AXI_BVALID is asserted by slave else if (M_AXI_BVALID && ~axi_bready) begin axi_bready <= 1'b1; end // deassert after one clock cycle else if (axi_bready) begin axi_bready <= 1'b0; end // retain the previous value else axi_bready <= axi_bready; end //Flag write errors assign write_resp_error = (axi_bready & M_AXI_BVALID & M_AXI_BRESP[1]); |
8:axi-lite-slave的axi_arvalid always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin axi_arvalid <= 1'b0; end //Signal a new read address command is available by user logic else if (start_single_read) begin axi_arvalid <= 1'b1; end //RAddress accepted by interconnect/slave (issue of M_AXI_ARREADY by slave) else if (M_AXI_ARREADY && axi_arvalid) begin axi_arvalid <= 1'b0; end // retain the previous value end |
9:axi-lite-slave的axi_araddr always @(posedge M_AXI_ACLK) begin if (M_AXI_ARESETN == 0 || init_txn_pulse == 1'b1) begin axi_araddr <= 0; end // Signals a new write address/ write data is // available by user logic else if (M_AXI_ARREADY && axi_arvalid) begin axi_araddr <= axi_araddr + 32'h00000004;
-
米联客FMC-SFP模块支持4路SFP光纤接口,最大支持10Gbps速率。可以安装到具有HPC的FMC接口开发板上使用。控
14760
-
FMC-3G SDI子卡测试1.1概述使用FMC-3GSDI子卡来实现 FPGA 通过 GTH 高速收发器从同轴电缆接收 3G-SDI 信号
15390
-
-
双十一欢乐购!米联客天猫商城和京东商城狂欢15日!2022.10.28-2022.11.11店铺推出满减优惠券!领券下单享
12830
-
1产品概述FEP-CARD-DAQ9248是一款14bits双通道65MSPS ADC采集模块,该方案采用了ADI的AD9248芯片,扩展接口
55620
-
1产品概述FEP-DAQ976X是一款14bits双通道125MSPS DAC数模转换模块,该方案采用了ADI的AD9767芯片,扩展接口
34910
-
本文在 AXI_DMA_LOOP 环路测试架构的基础上,在 DATA FIFO 端加入 FPGA 代码,对 FIFO 写,实现将 PL 端数
86223
-
在前文中我们学习了AXI总线协议,而且通过VIVADO自定义了AXI-LITE总线协议的IP CORE,并且实现了寄存器的读
49521
-
FDMA是米联客的基于AXI4总线协议定制的一个DMA控制器。有了这个IP我们可以统一实现用FPGA代码直接读写PL的D
79273
-
在前文的实验中我们详细介绍了FDMA的使用方法,以及使用了AXI-BRAM演示了FDMA的使用,现在我们已经掌握了FD
89218
-
1.1 FPGA技术背景笔者也是在偶然的机缘下接触到FPGA的,当初只有感性的认识就是FPGA速
1018520
-
淘宝购买链接:https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-18659455309
1288915
-
在前面的课程种,我们已经提供了FDMA和XDMA配合使用,应用于PCIE传图的方案。但是前面
14318015
-
8B/10B编码是1983年由IBM公司的Al Widmer和PeterFranaszek所提出的数据传输编码标准,
676410
-
淘宝购买连接:https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-18659455309
89038
-
1概述在米联客老版本的MIA701开发板(2017版本)中,米联开源了1套原创的UDP IP协议栈。
115388
-
1、电源改动版本使用电压输入电压范围201712275V4.7-5.2V201909185V2.0-16V新版本采用
58258
-
前面我们完成了一个PCIE中断采集图像的方案,但是很多应用中我们需要采集分析ADC的数
93768
-
本章讲解使用PL端以太网口实现UDP通信。开发板中实现千兆网 UDP 传输的基本逻辑框架如
126948
-
在前文的实验中我们详细介绍了FDMA的使用方法,以及使用了AXI-BRAM演示了FDMA的使用,
89218
-
米联客FMC-SFP模块支持4路SFP光纤接口,最大支持10Gbps速率。可以安装到具有HPC的FMC
14760
-
FMC-3G SDI子卡测试1.1概述使用FMC-3GSDI子卡来实现 FPGA 通过 GTH 高速收发器从同轴
15390
-
双十一欢乐购!米联客天猫商城和京东商城狂欢15日!2022.10.28-2022.11.11店铺推出满
12830
-
1产品概述FEP-CARD-DAQ9248是一款14bits双通道65MSPS ADC采集模块,该方案采用了ADI的
55610
-
1产品概述FEP-DAQ976X是一款14bits双通道125MSPS DAC数模转换模块,该方案采用了ADI的
34910
-
本文在 AXI_DMA_LOOP 环路测试架构的基础上,在 DATA FIFO 端加入 FPGA 代码,对 FIFO
86213
-
在前文中我们学习了AXI总线协议,而且通过VIVADO自定义了AXI-LITE总线协议的IP CORE,
49521
-
FDMA是米联客的基于AXI4总线协议定制的一个DMA控制器。有了这个IP我们可以统一实现用F
79273
-
在前文的实验中我们详细介绍了FDMA的使用方法,以及使用了AXI-BRAM演示了FDMA的使用,
89218
-
基于FDMA可以完成很多数据读写存储类的应用,本文将展示通过FDMA读写AXI-BRAM
本文实
49761
|
|