AXI总线专题-AXI转SPI(总体框架)
目录
简介:
本案例分析
结构分析
详情设计
简介:
在设计中,大多数芯片的配置接口都是SPI接口,如ADC,DAC,VGA等,所以在工业控制领域,设计一款AXI转SPI的接口很有必要,考虑到通用性。本设计中的AXI-SPI适用于大部分SPI配置芯片。
本案例分析
设计一款通用型的SPI配置接口,在实际IP的测试中,我们以LMH6401为例,6401是ti的一款VGA芯片,LMH6401是德州仪器(TI)推出的一款4.5GHz超宽带数字可变增益放大器(DVGA),支持直流至4.5GHz频段,增益范围-6dB至26dB,适用于高速信号处理和高频系统设计。
结构分析
专栏前面几篇文章也说了,AXI的一些基本特性。这里不在赘述。
详情设计
总体接口设计
分为AXI接口和SPI接口。
AXI接口又分为五个部分。AXI读地址,AXI读数据,AXI写地址,AXI写数据,AXI写回应。
全局信号
Aclk
Areset
AXI写地址
Input [C_AXI_ADDR_WIDTH-1:0] s_axil_awaddr,
Input s_axil_awvalid, 写地址有效信号
Output s_axil_awready, 地址准备信号
AXI写数据
Input [C_AXI_DATA_WIDTH-1:0] s_axil_wdata,
Input s_axil_wvalid,
Output s_axil_wready,
Input [(C_AXI_DATA_WIDTH/8)-1:0] s_axil_wstrb,每一位对应一个字节,用于指示字节是否有效
AXI写回复
Output [1:0] axil_bresp, 表述事务完成状态,00代表ok,01代表访问成功,10代表从机错误,11,代表解码错误
Output axil _bvalid, 写响应有效信号
Input axil_bready, 写响应准备信号。
AXI读地址
Input [C_ADDR_WIDTH] s_axil_araddr;
Input s_axil_arvalid,
Output s_axil_arready,
AXI读数据
Output [C_ADDR_WIDTH-1:0] s_axil_rdata
Output [1:0] s_axil_rresp,
Output s_axil_rvalid,
Input s_axil_rready,
//SPI
Output sck,
Output sen,
Output sdi,
Output sdi_t,
Input sdo
接口内容就这么多。
generate for (i=0;i<WR_ADDR_NUM;i=i+1) begin: int_w_resp
assign w_resp[2*i+:2] = w_resp_int[i];
这个代码的意思就是把一个二位数组转为一维。本案例中设置两个地址。每个都地址两位。
generate for (i=0;i<RD_ADDR_NUM;i=i+1) begin: int_r_resp_data
assign r_resp[2*i+:2] = r_resp_int[i];
assign r_data[32*i+:32] = r_data_int[i];
一次性有可能读多个地址。
软复位
Always @(posedge s _axil_clk)begin
If (s_axil_rst)begin
If(w)