用vivadio的block memory ip的示例工程,了解axi4。
blk_mem_gen_0_exdes.vhd这个是实际的顶层文件,包含了数据checker(axi_checker.vhd)、激励(bmg_stim_gen.vhd)、RAM的实体port(blk_mem_gen_0_wrapper.vhd)
1 axi写操作
1)aw开头的,是写地址通道相关的
需要注意的是awsize[2:0] 和awlen[7:0]的区别
awsize[2:0]是突发大小,字节选通中要更新的字节通道
awlen[7:0]是突发长度,与地址相关连的数据传输次数
举例 awlen[7:0]=0x09,这一次写入10个数
awsize[2:0]=0x2,表示位宽是4字节,一个突发是4字节
awburst[1:0]=0x1 表示突发的传输类型是incr,表示burst中的后续数据的存储地址会在初始地址的基础上进行递增,递增幅度与传输宽度相同,常用于ram等通过地址映射的存储器进行的数据读写。
2)w开头的,是写数据通道相关的
wrtrb[3:0]=0xf,在突发位宽与总线位宽不同时,使用该信号指示写入数据中的有效字节,当二者位宽相同时,该信号全部拉高,此时0xf是全高,说明一个突发数据的4字节等于总线的4字节,数据的4个字节全写入。
awvalid和awready同为高,awready为高在前,表示开始写入地址,因为此时awlen[7:0]=0xd,也就是要写入14个地址。
之后有wvalid和wready同为高,wready为高在前,wvalid与wdata是对齐的(14个数据),wvalid的最后一拍是和wlast对齐,写入的最后一个数。
3)b开头的,是写入响应通道相关的
awid与bid是一致的,证明是同一次写入
bvalid写响应信号,带着的货是bresp写响应状态,取货方准备好后发起bready(在这个仿真里bready都是1 )。
bresp[1:0]=0x0表示okay
2 axi读操作
1)ar开头的,是读地址通道相关的
有货的人把货(araddr)准备好了,发起arvalid信号;取货方,准备好后发起arready, 当arvalid arready同时为高时,交易成功。
2)r开头的,是读地址通道相关的
有货的人把货(rdata)准备好了,发起rvalid信号;取货方,准备好后发起rready,当rvalid rready同时为高时,交易成功。这个通道还附赠一个增值服务,拿到货后直接赠送一个rresp(读响应状态),不单独开一个项目。
rresp[1:0]=0x0表示okay
3 其他axi种类
vhdl看着看着就看懂一些了,毕竟和verilog思路是相通的
看到的资料:
axi4-lite是简化版的axi4,只支持单次写入数据。与axi4不同的是,axi4-lite需要同时发送命令(地址)和数据,而axi4是先处理读写命令(地址),在处理读写数据。
axi-stream取消了地址通道,是一个单纯数据传输接口。