1 IP核端口介绍
这里不逐个赘述,说几个配置需要注意点
a) 下面这两个,一个是一个时钟写字节数,一个是突发写数据长度。
s_axi_awsize = get_wordlength(C_DATA_WIDTH/8)
举例,C_DATA_WIDTH = 256 ,256/8 = 32 get_wordlength(32) = 5 .2^5 = 32
s_axi_awlen = = (C_BURST_NBeats - 1)
举例,
C_BURST_LEN = 8192; 突发长度8192 (突发长度小了可以,再大,我设置过16384,不行。好像是16384最后计
算出来的结果,超出了s_axi_awlen 的位宽范围。虽然,没有报错,但是下板子不成功
C_DATA_WIDTH = 256; IP 核AXI 接口数据位宽
C_BURST_NBeats = C_BURST_LEN/(C_DATA_WIDTH/8); 8192/(256/8) = 8192/ 32 = 256
b) s_axi_arsize s_axi_arlen 和写一样,不在赘述
c) 部分端口控制
d)一次突发,到底能处理多少数据
C_BURST_NBeats_LOG2 = get_wordlength(C_BURST_NBeats);
举例, 还是前面的参数,C_BURST_NBeats = 256 .那 C_BURST_NBeats_LOG2 = 8.
代码中,写256个256bit的数据,产生一个wlast信号,代表一次突发结束。突发长度是8192,所以,一次突发处理的数据就是 256* 256 bit= 65536bit。256*256 是针对IP核来说 ,针对芯片来说,就是8192*8 = 65536。为什么是8192*8,理解的是,IP 最终操作是以字节方式控制的,不知道理解的对不对,后面换芯片了不知道这样理解还可以不。但是256*256这种算法是肯定正确的。
e) 拿到一个芯片以后,可以直接用IP核自带的example design 。配置好IP核上的参数,代码不用改,是可以正常使用的。这是一种快速检查芯片是否完好的方法。