前篇博文我们试验了AXI4-Lite协议读写BRAM,这里我们试验一下完整的AXI4协议。流程跟AXI4-Lite是一样的。省略的部分请参考:编写AXI4-Lite协议读写BRAM并仿真验证

一. 建立工程

二. 创建块设计

原理图同AXI4-Lite,不同点在于可以直接拖入三个IP直接连线,AXI BRAM Controller协议选择AXI4。

搭建完成后,需要进行封装。

三. 编写testbench

axiBram_tb.sv,代码如下:

/** @Author: Xu XiaoKang* @Email: xuxiaokang_up@qq.com* @Date: 2020-08-03 14:40:33* @LastEditors: xu XiaoKang* @LastEditTime: 2020-08-04 16:40:00* @Filename:* @Description: AXI4 Master*/module axi4Bram_tb ();timeunit 1ns;
timeprecision 1ps;logic [14:0] M_AXI_awaddr;
logic [7 :0] M_AXI_awlen;
logic [2 :0] M_AXI_awsize;
logic [1 :0] M_AXI_awburst;
logic        M_AXI_awlock;
logic [3 :0] M_AXI_awcache;
logic [2 :0] M_AXI_awprot;
logic [3 :0] M_AXI_awqos;
logic        M_AXI_awvalid;
logic        M_AXI_awready;logic [31:0] M_AXI_wdata;
logic [3 :0] M_AXI_wstrb;
logic        M_AXI_wlast;
logic        M_AXI_wvalid;
logic        M_AXI_wready;logic [1:0] M_AXI_bresp;
logic       M_AXI_bvalid;
logic       M_AXI_bready;logic [14:0] M_AXI_araddr;
logic [7 :0] M_AXI_arlen;
logic [2 :0] M_AXI_arsize;
logic [1 :0] M_AXI_arburst;
logic        M_AXI_arlock;
logic [3 :0] M_AXI_arcache;
logic [2 :0] M_AXI_arprot;
logic [3 :0] M_AXI_arqos;
logic        M_AXI_arvalid;
logic        M_AXI_arready;logic [31:0] M_AXI_rdata;
logic [1 :0] M_AXI_rresp;
logic        M_AXI_rlast;
logic        M_AXI_rvalid;
logic        M_AXI_rready;logic clk;
logic rstn;// 生成时钟
localparam CLKT = 2;
initial beginclk = 0;forever #(CLKT / 2) clk = ~clk;
end// 初始化一些不变的信号
initial beginM_AXI_awlock  = 1'b0; // Normal accessM_AXI_awcache = 4'b0000; // 指示内存类型M_AXI_awprot  = 3'b000; // 非特权且安全的数据访问M_AXI_awqos   = 4'b0000;M_AXI_arlock  = 1'b0; // Normal accessM_AXI_arcache = 4'b0000; // 指示内存类型M_AXI_arprot  = 3'b000; // 非特权且安全的数据访问M_AXI_arqos   = 4'b0000;
endinitial beginrstn = 0;#(CLKT * 5)rstn = 1;// 写交易M_AXI_awaddr  = 15'b000_0000_0000_0000; // 写入基地址M_AXI_awlen   = 8'd10; // 实际传输数据量 = awlem + 1M_AXI_awsize  = 3'd2;  // 每份数据占2^2=4字节, 默认是数据总线宽度M_AXI_awburst = 2'b01; // INCR, 增地址模式M_AXI_awvalid = 1'b1;wait(M_AXI_awready == 1'b1) #(CLKT * 1) M_AXI_awvalid = 1'b0;#(CLKT * 10.5)M_AXI_wdata = 32'd12;M_AXI_wstrb = 4'b1111;M_AXI_wlast = 1'b0;repeat(M_AXI_awlen) beginM_AXI_wvalid = 1'b1;wait(M_AXI_wready == 1'b1)#(CLKT * 1)M_AXI_wdata = M_AXI_wdata + 1'b1;endM_AXI_wlast = 1'b1;wait(M_AXI_wready == 1'b1)#(CLKT * 1)M_AXI_wvalid = 1'b0;M_AXI_wlast = 1'b0;M_AXI_bready = 1'b1;wait(M_AXI_bvalid == 1'b1) #(CLKT * 1) M_AXI_bready = 1'b0;// 读交易M_AXI_araddr  = M_AXI_awaddr;M_AXI_arlen   = M_AXI_awlen;M_AXI_arsize  = M_AXI_awsize;M_AXI_arburst = M_AXI_awburst;M_AXI_arvalid = 1'b1;wait(M_AXI_arready == 1'b1) #(CLKT * 1) M_AXI_arvalid = 1'b0;M_AXI_rready = 1'b1;wait(M_AXI_rlast == 1'b1) #(CLKT * 1) M_AXI_rready = 1'b0;#(CLKT * 5) $stop;
endbram_wrapper  bram_wrapper_inst_0 (.*);endmodule

四. 运行仿真

使用vivado 2018.3 和 modelsim 10.6e SE-64 联合仿真。

可见,采用增地址模式,连续写入11个数据,从机能正确返回写响应bresp 和 bvalid,对同一地址的读取,读到的数据同之前写入的数据相同,故AXI4读写BRAM没有问题。

完整工程文件我放在了百度云上:

链接:https://pan.baidu.com/s/1umudYDadQzcY9pGlvKrofg
提取码:mpvv

五. 总结

AXI4相较AXI4-Lite支持连续写和连续读,当需要交互的数据量大时,可采用AXI4。另外,如果存储器件支持同时读写,用AXI4进行同时读写也没问题,读写通道是相互独立的。

编写AXI4协议读写BRAM并仿真验证相关推荐

  1. UPP协议转AXI4协议的burst读写FPGA实现

    UPP协议转AXI4协议的burst读写FPGA实现 名字是按标准协议命名的,细节都在图里,有兴趣的朋友自己看下,或者私信我,欢迎批评指正! Burst 读和写 写数据 读数据

  2. AXI4协议详解(二)

    写在前面:上一篇文章我们介绍了AXI4协议各通道的信号构成与握手机制,之后我们将在解析读写过程的同时,手把手教你实现一个从机的读写过程.由于今天的篇幅所限,本篇文章将实现一个从机的写过程,作为协议解析 ...

  3. AXI4-Lite总线读写BRAM

    博主参考和学习的博客 AXI协议基础知识 .这篇博客比较详细地介绍了AXI总线,并且罗列了所有的通道和端口,写代码的时候可以方便地进行查表. AXI总线,AXI_BRAM读写仿真测试 . 这篇文章为代 ...

  4. Xilinx AXI4 协议

    一.AXI4协议介绍 AXI4 相对复杂,但 SOC 开发者必须掌握.AXI 协议的具体内容可参考 Xilinx UG761 AXI Reference Guide. 在这里我们简单了解一下. AXI ...

  5. AXI3和AXI4协议详细说明

    本文基于ARM官方文档<AMBA AXI and ACE Protocol Specification> 因为AXI3和AXI4协议大部分相同,小部分不同,在官方文档中也是一起介绍的,所以 ...

  6. 网页版的svn怎样同步代码_学会使用Hdlbits网页版Verilog代码仿真验证平台

    大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过 "https://hdlbits.01xz.net/wiki/Main_Page&q ...

  7. 面向航空航天工业领域的基于模型的仿真验证工具SkyEye

    我们一直致力于提供给航空航天制造商一套全数字的优化方案--面向航空航天工业领域的基于模型的仿真验证工具SkyEye.我们的仿真验证技术可用于开发高复杂度和高保真度的模型,对发动机,飞机的飞控进行预测性 ...

  8. 陷波器的离散化及仿真验证

    一.陷波器在连续域的传递函数 1.最基本的陷波器传函                              (1) 其中,wo​是所谓"中心频率",也就是你想要"陷掉 ...

  9. 学会使用Hdlbits网页版Verilog代码仿真验证平台

    大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过 "https://hdlbits.01xz.net/wiki/Main_Page&q ...

最新文章

  1. Visual C++ 2012/2013的内存溢出检測工具
  2. 使用 bat 文件管理计算机服务
  3. JVM(一)史上最佳入门指南
  4. pb自定义控件 事件_Android WebView与下拉刷新控件滑动冲突的解决方法
  5. 迟思堂工作室编程规范:单片机C语言
  6. ubuntu使用git时,终端不显示git分支。
  7. mysql x key 组合_技本功丨浅谈MySQL的七种锁
  8. SpringBoot学习(二)——Spring的Java配置方式
  9. mingw编译CMake后的OpenCV文件时出现:mingw32-make : 无法将“mingw32-make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  10. eclipse、xbuilder、电脑、键盘、黑峡谷常用快捷键、纽曼蓝牙耳机
  11. 算法:(1)确定字符互异
  12. java选取最大数字_用Java程序找最大的数字(4.1)
  13. html音频禁止自动播放,HTML iframe允许音频文件的自动播放无法正常使用
  14. AdMob(app内嵌广告)使用入门
  15. [iOS] Windows 使用IPSW文件升级iOS 13 beta
  16. 牛客竞赛C/C++语言基础22198 选村长
  17. 企业微信和个人微信区别到底有哪些
  18. 网站app被劫持怎么办?HTTPDNS阿里云域名防劫持, DNSPod 移动解析服务 D+
  19. dubbo面试知识总结
  20. 用Vs调试STM32记事

热门文章

  1. CVPR 2016 SINT:《Siamese Instance Search for Tracking》论文笔记
  2. Luogu P5652 基础博弈练习题 (博弈论、图论)
  3. BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)
  4. 修改linux下全局数据库名,linux/unix下修改oracle数据库实例名的方法
  5. php成绩查询系统的学习心得_PHP学习心得与体会
  6. 笔记本电脑怎么清理灰尘_家里边边角角灰尘多,不好清理怎么办?一个“塑料瓶”解决烦恼!...
  7. .8-Vue源码之AST(4)
  8. MAC设置——企业邮箱标准版
  9. 如何让FPGA中的SPI与其他模块互动起来
  10. 4. 垃圾回收- 4.3垃圾收集器