基于AXI4的读控制器代码的撰写-以aurora8b/10b的IP应用为例

基于AXI4总线协议的读控制器Verilog代码的撰写。

以aurora8b/10b的应用为例。如下图所示为8B/10B的ipcore。
在这里插入图片描述
这里我们创建AXI4总线外设,从ddr内存中读取数据,并传送给aurora8b/10b,然后通过光纤穿送出去。
此处可以看到需要设计三个信号,s_axi_tx_tdata,s_axi_tx_tready,s_axi_tx_valid,包括输入时钟和复位信号。
此处,我们通过vivado自带的创建AXI4外设的功能,创建一个AXI4 peripheral模板,如下图所示。
在这里插入图片描述
具体设置如下:
在这里插入图片描述
这里可以从第一张图中看出来,aurora8b/10b中的端口名字为,USER_DATA_S_AXI_TX。其中的S表示从设备,故此处选择为主设备模式。
此时会弹出来一个编辑界面。并会创建一个文件夹。界面如下所示。
在这里插入图片描述
并打开两个.V文件,并修改代码。
需增加的代码波形如下所示。
在这里插入图片描述
波形代码为:
{signal: [
{name: ‘M_AXI_ACLK(I)’, wave: ‘p…|…’},
{name: ‘M_AXI_ARVALID(O)’,wave: ‘01.0…’},
{name: ‘M_AXI_ARREADY(I)’,wave: ‘0.1…0…’},
{name: ‘M_AXI_ARADDR(O)’,wave: ‘x.3x…’,data:[‘addr1’]},
{name: ‘M_AXI_RVALID(I)’, wave: ‘0.10…10…10.’},
{name: ‘M_AXI_RREADY(O)’,wave: ‘01.0.1.0…1.0’},
{name: ‘M_AXI_RLAST(I)’,wave: ‘0…10.’},
{name: ‘M_AXI_RDATA(I)’,wave: ‘x.3x…4x…5x.’,data:[‘data1’,‘data2’,‘data3’]},
{},
{name: ‘axi_s_clk(i)’, wave: ‘p…|…’},
{name: ‘axi_s_tvalid(o)’,wave: ‘01…0…’},
{name: ‘axi_s_tready(i)’,wave: ‘01…0.’},
{name: ‘rd_cnt’,wave: ‘x34…5x…’,data:[‘rd_cnt=0’,‘rdcnt+=1’,‘rdcnt=255’]},
{name: ‘axi_m_data’,wave: ‘x3…x…’,data:[‘data’]},
],
head:{
text:‘AXI_M_READ’,
tick:0
},
foot:{
text:‘figure 1’,
tock:0
},
config:{skin:‘red’}
}

打开两个文件后,按照上述波形修改代码。具体代码可在我的主页中下载。写控制器的代码定义步骤也是类似。
顺便贴一张AXI4总线协议的读写时序图;
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值