通过状态机来对axi_lite总线进行操作

本文详细解析了如何使用状态机控制AXI_Lite总线的读写操作,包括状态跳转条件和输出控制,适用于进一步掌握AXI_Lite总线的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感谢网友沉默的改良者,原文链接:https://www.cnblogs.com/chensimin1990/p/8526921.html

通过状态机来对axi_lite总写进行读写操作,分析得很好。

为进一步掌握AXI_Lite,在原文基础上进行功能仿真,因此这里先贴出原文,下一篇给出仿真工程及波形。

通过状态机来对axi_lite总线进行操作

状态跳转:

1.初始状态

将axi_lite读写两个信道分开进行控制,在初始状态,就根据读,写信号来判断应该跳转到那一个状态。

2.写状态

在写状态中不需要跳转条件,即写状态只需要消耗一个时钟周期,然后自动跳转到下一个状态。

3.写有效状态

当接收到slave端的awready 和 wready 即地址写准备和数据写准备信号后,跳转到write_ready状态。

4.write_ready状态

在write_ready状态中,等到slave端bvalid信号的到来,然后跳转到write_bready状态。

5.write_bready状态

WRITE_BREADY 状态不需要状态跳转条件,只需要消耗一个时钟周期,同时在这个状态中,也没有相关信号需要输出。

6.write_end状态

write_end状态也不需要状态跳转条件,写完数据之后,直接回到初始状态。

7.read_start状态

类比write_start状态

8.read_valid状态

类比write_valid信号,只是读数据的过程中不需要接收数据准备信号,在read_valid状态中,当接收到slave端的读地址准备信号后,跳转到read_ready状态。

9.read_ready

当slave端传回来读数据有效信号后,状态机跳转进read_finish状态。

10.read_finish状态

类比write_finish状态

11.read_end状态

类比write_end状态

总结axi_lite读写时序:

写:首先准备好访问地址,和需要写入的数据同时给出地址有效,数据有效,bready信号,

当接收到slave端的地址ready和数据ready信号后,表示可以进行下一写操作了,同时,还需要等待slave端的bvalid信号到来,表示一次写完成了,即slave端的一个写反馈过程

读:首先准备好访问地址,和地址有效信号先拉高,当接收到slave端的地址ready信号后,表示可以进行下一次读操作了,同时,当slave端传过来valid信号的同时,才可以接受axi_lite上读取的数据。

状态机输出控制:

1.在完成一次完整的状态后,必须对相关信号进行清除

 2.初始状态不需要数据信号,write_start信号输出结果如下:

3.write_valid状态输出结果:

4.write_ready状态输出结果:

5.write_bready状态无需输出信号,write_end状态数据结果:

6.read_start状态输出结果:

7.read_valid状态输出结果:

8.read_ready状态中不需要输出,read_finish输出结果:

9.read_end状态中输出结果:

 

 

 

 

 

 

### Vivado 中 AXI_LITE 的使用教程 #### 创建和配置 AXI Lite Slave IP 核 为了创建一个 AXI Lite Slave IP,在 Vivado 中可以按照以下方式操作: 通过集成开发环境(IDE),启动新项目或打开现有项目后,转至 IP Catalog 并搜索 `AXI Lite` 或特定类型的 IP 如 `axi_uartlite`。选择合适的 IP 后点击添加。对于 UART 类型的 IP,可以在 MicroBlaze 系统中加入此组件,并将其连接到 AXI-Lite 总线上[^2]。 完成 IP 添加后,双击所选 IP 进入其参数设置界面。这里可以根据需求调整各项属性,比如设定通信协议中的波特率、数据宽度以及是否启用奇偶校验等功能。 #### 自定义 AXI Lite 接口模块生成过程 如果打算构建自定义的 AXI Lite 接口,则需遵循一定流程来确保兼容性和功能性。这通常涉及以下几个方面的工作: - **定义接口信号**:明确哪些信号属于地址通道、写数据通道还是响应通道; - **实现必要的状态机逻辑**:用于处理来自主控端的各种请求; - **编写相应的 Verilog/VHDL 代码**:具体描述硬件行为,特别是针对取路径上的准备就绪(`arready`)标志位管理和地址寄存器(`araddr`)更新机制等方面的内容[^5]。 下面给出了一段简化版的 VHDL/Verilog 实现片段,展示了如何在一个简单的 AXI Lite 响应过程中管理这些关键变量: ```verilog // 处理命令阶段 always @(posedge S_AXI_ACLK) begin if (S_AXI_ARESETN == 1'b0) begin axi_arready <= 1'b0; axi_araddr <= 32'b0; end else begin if (!axi_arready && S_AXI_ARVALID) begin // 当接收到有效的地址时标记已接受并将地址保存下来 axi_arready <= 1'b1; axi_araddr <= S_AXI_ARADDR; end else begin axi_arready <= 1'b0; end end end ``` 这段代码实现了当检测到来自主控制器的有效地址时,立即将内部准备好 (`arready`) 设置为高电平,并记录下目标内存位置以便后续访问。 #### 将 AXI Lite Master IP 应用于实际场景 除了作为从属设备外,还可以利用 AXI Lite 协议设计自己的主控制单元——即 AXI Lite 主设备(IP)[^4]。这类主设备能够发起对其他资源的数据传输指令,非常适合用来执行较为简单但频繁的任务交互,如轮询传感器状态或是向多个外围器件发送配置信息等。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值