【Verilog基础】【总线协议】AXI、AHB、APB总线对比

它们三个总线的特性对比可以从以下几个方面考量:

  • APB、AHB、AXI速度依次提高
  • APB最大总线宽度32、AHB最大总线宽度256、AXI最大总线宽度1024;但三者的地址宽度都为32
  • AXI传输速度快:5个通道相互独立;且支持outstanding乱序传输;AHB只有3个通道。
  • AXI还支持读写并行操作,其他的AHB和APB都不可以。
  • AXI和AHB还支持流水操作,APB不可以。APB传输固定两个时钟周期(IDLE、SETUP、ENABLE)
  • AXI和AHB还支持多主/从设备,且有仲裁机制;而APB只有单主/从设备,无仲裁机制。

常考面试题:APB、AXI、AHB介绍

APB主要用在低速且低功率的外围,可针对外围设备作功率消耗及复杂接口的最佳化。APB在AHB和低带宽的外围设备之间提供了通信的桥梁,所以APB是AHB或ASB的二级拓展总线。

AHB主要是针对高效率、高频宽及快速系统模块所设计的总线,它可以连接如微处理器、芯片上或芯片外的内存模块和DMA等高效率模块。

AXI:高速度、高带宽,管道化互联,单向通道,只需要首地址,读写并行,支持乱序,支持非对齐操作,有效支持初始延迟较高的外设,连线非常多。

常考面试题:AXI比AHB速度更快的原因

  • 1、AXI和A
  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的AXIAPB接口的Verilog实现示例: ``` module axi_to_apb( input clk, input reset, input [31:0] axi_addr, input [31:0] axi_rdata, input axi_rvalid, input axi_rready, input [31:0] axi_wdata, input axi_wvalid, input axi_wready, output [31:0] apb_addr, output [31:0] apb_data, output apb_pwrite, output apb_psel, output apb_penable, output apb_pready ); // AXI to APB conversion logic reg [31:0] apb_addr_reg; reg [31:0] apb_data_reg; reg apb_pwrite_reg; reg apb_psel_reg; reg apb_penable_reg; reg apb_pready_reg; always @(posedge clk) begin if (reset) begin apb_addr_reg <= 32'b0; apb_data_reg <= 32'b0; apb_pwrite_reg <= 1'b0; apb_psel_reg <= 1'b0; apb_penable_reg <= 1'b0; apb_pready_reg <= 1'b0; end else begin if (axi_wvalid && axi_wready) begin apb_addr_reg <= axi_addr; apb_data_reg <= axi_wdata; apb_pwrite_reg <= 1'b1; apb_psel_reg <= 1'b1; apb_penable_reg <= 1'b1; end else if (axi_rvalid && axi_rready) begin apb_pwrite_reg <= 1'b0; apb_psel_reg <= 1'b1; apb_penable_reg <= 1'b1; end else begin apb_pwrite_reg <= 1'b0; apb_psel_reg <= 1'b0; apb_penable_reg <= 1'b0; end if (apb_pwrite_reg) begin apb_addr <= apb_addr_reg; apb_data <= apb_data_reg; end else begin apb_addr <= axi_addr; apb_data <= axi_rdata; end apb_pwrite <= apb_pwrite_reg; apb_psel <= apb_psel_reg; apb_penable <= apb_penable_reg; apb_pready_reg <= apb_pready; end end assign apb_pready = axi_wready && axi_rready; endmodule ``` 这个模块包括一个时钟和复位输入,以及AXIAPB接口的输入和输出。在模块中,我们使用一个always块来实现AXIAPB的转换逻辑。在每个时钟上升沿时,我们根据AXI接口的输入状态设置APB接口的输出状态。我们还使用一个assign语句计算APB接口的pready信号,该信号表示APB外设是否已经准备好接收数据。 请注意,这只是一个简单的示例,实际的AXIAPB接口可能需要更复杂的逻辑来处理不同的数据类型和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值