• FDMA 3.1 米联客的Axi-DDR3控制器及其配套的Dbuf


    超过Brust Length的处理方法:

            自定义的FDMA Brust Length,能够接收比实际Axi  Brust Lengtht更多的数据,这是通过这个模块实现的:

            即通过设置的Axi总线最大brust len后,通过对比其位宽过一位的数据是否为高,来判断需求的brust长度是否是否超过了max brust len,如果超过了则进行截断。。

            FDMA的一次读写操作的分界线是一次FDMA Brust Length的完成,其中可以涵盖多个Axi  Brust Length。

    1. //fdma write data burst len counter----------------------------------
    2. reg wburst_len_req = 1'b0;
    3. reg [15:0] fdma_wleft_cnt =16'd0;
    4. // wburst_len_req信号是自动管理每次axi需要burst的长度
    5. always @(posedge M_AXI_ACLK)
    6. wburst_len_req <= fdma_wstart|axi_wlast;
    7. // fdma_wleft_cnt用于记录一次FDMA剩余需要传输的数据数量
    8. always @(posedge M_AXI_ACLK)
    9. if( fdma_wstart )begin
    10. wfdma_cnt <= 1'd0;
    11. fdma_wleft_cnt <= I_fdma_wsize;
    12. end
    13. else if(w_next)begin
    14. wfdma_cnt <= wfdma_cnt + 1'b1;
    15. fdma_wleft_cnt <= (I_fdma_wsize - 1'b1) - wfdma_cnt;
    16. end
    17. //当最后一个数据的时候,产生fdma_wend信号代表本次fdma传输结束
    18. assign fdma_wend = w_next && (fdma_wleft_cnt == 1 );
    19. //一次axi最大传输的长度是256因此当大于256,自动拆分多次传输
    20. always @(posedge M_AXI_ACLK)begin
    21. if(M_AXI_ARESETN == 1'b0)begin
    22. wburst_len <= 1;
    23. end
    24. else if(wburst_len_req)begin
    25. if(fdma_wleft_cnt[15:MAX_BURST_LEN_SIZE] >0) //当你希望FDMA提供的Brust长度超过了所配置的Axi brust长度时,brust长度设置为所配置Axi的最大brust长度
    26. wburst_len <= M_AXI_MAX_BURST_LEN;
    27. else
    28. wburst_len <= fdma_wleft_cnt[MAX_BURST_LEN_SIZE-1:0]; //否则按照你配置的来
    29. end
    30. else wburst_len <= wburst_len;
    31. end

    完整代码:

    1. `timescale 1ns / 1ns
    2. /*******************************MILIANKE*******************************
    3. *Company : MiLianKe Electronic Technology Co., Ltd.
    4. *WebSite:https://www.milianke.com
    5. *TechWeb:https://www.uisrc.com
    6. *tmall-shop:https://milianke.tmall.com
    7. *jd-shop:https://milianke.jd.com
    8. *taobao-shop1: https://milianke.taobao.com
    9. *Create Date: 2023/03/23
    10. *Module Name:
    11. *File Name:
    12. *Description:
    13. *The reference demo provided by Milianke is only used for learning.
    14. *We cannot ensure that the demo itself is free of bugs, so users
    15. *should be responsible for the technical problems and consequences
    16. *caused by the use of their own products.
    17. *Copyright: Copyright (c) MiLianKe
    18. *All rights reserved.
    19. *Revision: 3.1
    20. *Signal description
    21. *1) I_ input
    22. *2) O_ output
    23. *3) IO_ input output
    24. *4) S_ system internal signal
    25. *5) _n activ low
    26. *6) _dg debug signal
    27. *7) _r delay or register
    28. *8) _s state mechine
    29. *********************************************************************/
    30. /*********uiFDMA(AXI-FAST DMA Controller)基于AXI总线的自定义内存控制器***********
    31. --版本号3.1
    32. --1.代码简洁,占用极少逻辑资源,代码结构清晰,逻辑设计严谨,读写对称
    33. --2.fdma控制信号,简化了AXI总线的控制,根据I_fdma_wsize和I_fdma_rsize可以自动完成AXI总线的控制,完成数据的搬运
    34. *********************************************************************/
    35. module uiFDMA#
    36. (
    37. parameter integer M_AXI_ID_WIDTH = 3 , //ID,demo中没用到
    38. parameter integer M_AXI_ID = 0 , //ID,demo中没用到
    39. parameter integer M_AXI_ADDR_WIDTH = 32 ,//内存地址位宽
    40. parameter integer M_AXI_DATA_WIDTH = 128 ,//AXI总线的数据位宽
    41. parameter integer M_AXI_MAX_BURST_LEN = 64 //AXI总线的burst 大小,对于AXI4,支持任意长度,对于AXI3以下最大16
    42. )
    43. (
    44. input wire [M_AXI_ADDR_WIDTH-1 : 0] I_fdma_waddr ,//FDMA写通道地址
    45. input I_fdma_wareq ,//FDMA写通道请求
    46. input wire [15 : 0] I_fdma_wsize ,//FDMA写通道一次FDMA的传输大小
    47. output O_fdma_wbusy ,//FDMA处于BUSY状态,AXI总线正在写操作
    48. input wire [M_AXI_DATA_WIDTH-1 :0] I_fdma_wdata ,//FDMA写数据
    49. output wire O_fdma_wvalid ,//FDMA 写有效
    50. input wire I_fdma_wready ,//FDMA写准备好,用户可以写数据
    51. input wire [M_AXI_ADDR_WIDTH-1 : 0] I_fdma_raddr ,// FDMA读通道地址
    52. input I_fdma_rareq ,// FDMA读通道请求
    53. input wire [15 : 0] I_fdma_rsize ,// FDMA读通道一次FDMA的传输大小
    54. output O_fdma_rbusy ,// FDMA处于BUSY状态,AXI总线正在读操作
    55. output wire [M_AXI_DATA_WIDTH-1 :0] O_fdma_rdata ,// FDMA读数据
    56. output wire O_fdma_rvalid ,// FDMA 读有效
    57. input wire I_fdma_rready ,// FDMA读准备好,用户可以读数据
    58. //以下为AXI总线信号
    59. input wire M_AXI_ACLK ,
    60. input wire M_AXI_ARESETN ,
    61. output wire [M_AXI_ID_WIDTH-1 : 0] M_AXI_AWID ,
    62. output wire [M_AXI_ADDR_WIDTH-1 : 0] M_AXI_AWADDR ,
    63. output wire [7 : 0] M_AXI_AWLEN ,
    64. output wire [2 : 0] M_AXI_AWSIZE ,
    65. output wire [1 : 0] M_AXI_AWBURST ,
    66. output wire M_AXI_AWLOCK ,
    67. output wire [3 : 0] M_AXI_AWCACHE ,
    68. output wire [2 : 0] M_AXI_AWPROT ,
    69. output wire [3 : 0] M_AXI_AWQOS ,
    70. output wire M_AXI_AWVALID ,
    71. input wire M_AXI_AWREADY ,
    72. output wire [M_AXI_ID_WIDTH-1 : 0] M_AXI_WID ,
    73. output wire [M_AXI_DATA_WIDTH-1 : 0] M_AXI_WDATA ,
    74. output wire [M_AXI_DATA_WIDTH/8-1 : 0] M_AXI_WSTRB ,
    75. output wire M_AXI_WLAST ,
    76. output wire M_AXI_WVALID ,
    77. input wire M_AXI_WREADY ,
    78. input wire [M_AXI_ID_WIDTH-1 : 0] M_AXI_BID ,
    79. input wire [1 : 0] M_AXI_BRESP ,
    80. input wire M_AXI_BVALID ,
    81. output wire M_AXI_BREADY ,
    82. output wire [M_AXI_ID_WIDTH-1 : 0] M_AXI_ARID ,
    83. output wire [M_AXI_ADDR_WIDTH-1 : 0] M_AXI_ARADDR ,
    84. output wire [7 : 0] M_AXI_ARLEN ,
    85. output wire [2 : 0] M_AXI_ARSIZE ,
    86. output wire [1 : 0] M_AXI_ARBURST ,
    87. output wire M_AXI_ARLOCK ,
    88. output wire [3 : 0] M_AXI_ARCACHE ,
    89. output wire [2 : 0] M_AXI_ARPROT ,
    90. output wire [3 : 0] M_AXI_ARQOS ,
    91. output wire M_AXI_ARVALID ,
    92. input wire M_AXI_ARREADY ,
    93. input wire [M_AXI_ID_WIDTH-1 : 0] M_AXI_RID ,
    94. input wire [M_AXI_DATA_WIDTH-1 : 0] M_AXI_RDATA ,
    95. input wire [1 : 0] M_AXI_RRESP ,
    96. input wire M_AXI_RLAST ,
    97. input wire M_AXI_RVALID ,
    98. output wire M_AXI_RREADY
    99. );
    100. //计算数据位宽
    101. function integer clogb2 (input integer bit_depth);
    102. begin
    103. for(clogb2=0; bit_depth>0; clogb2=clogb2+1)
    104. bit_depth = bit_depth >> 1;
    105. end
    106. endfunction
    107. localparam AXI_BYTES = M_AXI_DATA_WIDTH/8;
    108. localparam [3:0] MAX_BURST_LEN_SIZE = clogb2(M_AXI_MAX_BURST_LEN -1);
    109. //fdma axi write----------------------------------------------
    110. reg [M_AXI_ADDR_WIDTH-1 : 0] axi_awaddr =0; //AXI4 写地址
    111. reg axi_awvalid = 1'b0; //AXI4 写地有效
    112. wire [M_AXI_DATA_WIDTH-1 : 0] axi_wdata ; //AXI4 写数据
    113. wire axi_wlast ; //AXI4 写LAST信号
    114. reg axi_wvalid = 1'b0; //AXI4 写数据有效
    115. wire w_next= (M_AXI_WVALID & M_AXI_WREADY);//当valid ready信号都有效,代表AXI4数据传输有效
    116. reg [8 :0] wburst_len = 1 ; //写传输的axi burst长度,代码会自动计算每次axi传输的burst 长度
    117. reg [8 :0] wburst_cnt = 0 ; //每次axi bust的计数器
    118. reg [15:0] wfdma_cnt = 0 ; //fdma的写数据计数器
    119. reg axi_wstart_locked =0; //axi 传输进行中,lock住,用于时序控制
    120. wire [15:0] axi_wburst_size = wburst_len * AXI_BYTES; //axi 传输的地址长度计算
    121. assign M_AXI_AWID = M_AXI_ID; //写地址ID,用来标志一组写信号, M_AXI_ID是通过参数接口定义
    122. assign M_AXI_AWADDR = axi_awaddr;
    123. assign M_AXI_AWLEN = wburst_len - 1;//AXI4 burst的长度
    124. assign M_AXI_AWSIZE = clogb2(AXI_BYTES-1);
    125. assign M_AXI_AWBURST = 2'b01;//AXI4的busr类型INCR模式,地址递增
    126. assign M_AXI_AWLOCK = 1'b0;
    127. assign M_AXI_AWCACHE = 4'b0010;//不使用cache,不使用buffer
    128. assign M_AXI_AWPROT = 3'h0;
    129. assign M_AXI_AWQOS = 4'h0;
    130. assign M_AXI_AWVALID = axi_awvalid;
    131. assign M_AXI_WDATA = axi_wdata;
    132. assign M_AXI_WSTRB = {(AXI_BYTES){1'b1}};//设置所有的WSTRB为1代表传输的所有数据有效
    133. assign M_AXI_WLAST = axi_wlast;
    134. assign M_AXI_WVALID = axi_wvalid & I_fdma_wready;//写数据有效,这里必须设置I_fdma_wready有效
    135. assign M_AXI_BREADY = 1'b1;
    136. //----------------------------------------------------------------------------
    137. //AXI4 FULL Write
    138. assign axi_wdata = I_fdma_wdata;
    139. assign O_fdma_wvalid = w_next;
    140. reg fdma_wstart_locked = 1'b0;
    141. wire fdma_wend;
    142. wire fdma_wstart;
    143. assign O_fdma_wbusy = fdma_wstart_locked ;
    144. //在整个写过程中fdma_wstart_locked将保持有效,直到本次FDMA写结束
    145. always @(posedge M_AXI_ACLK)
    146. if(M_AXI_ARESETN == 1'b0 || fdma_wend == 1'b1 )
    147. fdma_wstart_locked <= 1'b0;
    148. else if(fdma_wstart)
    149. fdma_wstart_locked <= 1'b1;
    150. //产生fdma_wstart信号,整个信号保持1个 M_AXI_ACLK时钟周期
    151. assign fdma_wstart = (fdma_wstart_locked == 1'b0 && I_fdma_wareq == 1'b1);
    152. //AXI4 write burst lenth busrt addr ------------------------------
    153. //当fdma_wstart信号有效,代表一次新的FDMA传输,首先把地址本次fdma的burst地址寄存到axi_awaddr作为第一次axi burst的地址。如果fdma的数据长度大于256,那么当axi_wlast有效的时候,自动计算下次axi的burst地址
    154. always @(posedge M_AXI_ACLK)
    155. if(fdma_wstart)
    156. axi_awaddr <= I_fdma_waddr;
    157. else if(axi_wlast == 1'b1)
    158. axi_awaddr <= axi_awaddr + axi_wburst_size ;
    159. //AXI4 write cycle -----------------------------------------------
    160. //axi_wstart_locked_r1, axi_wstart_locked_r2信号是用于时序同步
    161. reg axi_wstart_locked_r1 = 1'b0, axi_wstart_locked_r2 = 1'b0;
    162. always @(posedge M_AXI_ACLK)begin
    163. axi_wstart_locked_r1 <= axi_wstart_locked;
    164. axi_wstart_locked_r2 <= axi_wstart_locked_r1;
    165. end
    166. // axi_wstart_locked的作用代表一次axi写burst操作正在进行中。
    167. always @(posedge M_AXI_ACLK)
    168. if((fdma_wstart_locked == 1'b1) && axi_wstart_locked == 1'b0)
    169. axi_wstart_locked <= 1'b1;
    170. else if(axi_wlast == 1'b1 || fdma_wstart == 1'b1)
    171. axi_wstart_locked <= 1'b0;
    172. //AXI4 addr valid and write addr-----------------------------------
    173. always @(posedge M_AXI_ACLK)
    174. if((axi_wstart_locked_r1 == 1'b1) && axi_wstart_locked_r2 == 1'b0)
    175. axi_awvalid <= 1'b1;
    176. else if((axi_wstart_locked == 1'b1 && M_AXI_AWREADY == 1'b1)|| axi_wstart_locked == 1'b0)
    177. axi_awvalid <= 1'b0;
    178. //AXI4 write data---------------------------------------------------
    179. always @(posedge M_AXI_ACLK)
    180. if((axi_wstart_locked_r1 == 1'b1) && axi_wstart_locked_r2 == 1'b0)
    181. axi_wvalid <= 1'b1;
    182. else if(axi_wlast == 1'b1 || axi_wstart_locked == 1'b0)
    183. axi_wvalid <= 1'b0;//
    184. //AXI4 write data burst len counter----------------------------------
    185. always @(posedge M_AXI_ACLK)
    186. if(axi_wstart_locked == 1'b0)
    187. wburst_cnt <= 'd0;
    188. else if(w_next)
    189. wburst_cnt <= wburst_cnt + 1'b1;
    190. assign axi_wlast = (w_next == 1'b1) && (wburst_cnt == M_AXI_AWLEN);
    191. //fdma write data burst len counter----------------------------------
    192. reg wburst_len_req = 1'b0;
    193. reg [15:0] fdma_wleft_cnt =16'd0;
    194. // wburst_len_req信号是自动管理每次axi需要burst的长度
    195. always @(posedge M_AXI_ACLK)
    196. wburst_len_req <= fdma_wstart|axi_wlast;
    197. // fdma_wleft_cnt用于记录一次FDMA剩余需要传输的数据数量
    198. always @(posedge M_AXI_ACLK)
    199. if( fdma_wstart )begin
    200. wfdma_cnt <= 1'd0;
    201. fdma_wleft_cnt <= I_fdma_wsize;
    202. end
    203. else if(w_next)begin
    204. wfdma_cnt <= wfdma_cnt + 1'b1;
    205. fdma_wleft_cnt <= (I_fdma_wsize - 1'b1) - wfdma_cnt;
    206. end
    207. //当最后一个数据的时候,产生fdma_wend信号代表本次fdma传输结束
    208. assign fdma_wend = w_next && (fdma_wleft_cnt == 1 );
    209. //一次axi最大传输的长度是256因此当大于256,自动拆分多次传输
    210. always @(posedge M_AXI_ACLK)begin
    211. if(M_AXI_ARESETN == 1'b0)begin
    212. wburst_len <= 1;
    213. end
    214. else if(wburst_len_req)begin
    215. if(fdma_wleft_cnt[15:MAX_BURST_LEN_SIZE] >0) //当你希望FDMA提供的Brust长度超过了所配置的Axi brust长度时,brust长度设置为所配置Axi的最大brust长度
    216. wburst_len <= M_AXI_MAX_BURST_LEN;
    217. else
    218. wburst_len <= fdma_wleft_cnt[MAX_BURST_LEN_SIZE-1:0]; //否则按照你配置的来
    219. end
    220. else wburst_len <= wburst_len;
    221. end
    222. //fdma axi read----------------------------------------------
    223. reg [M_AXI_ADDR_WIDTH-1 : 0] axi_araddr =0 ; //AXI4 读地址
    224. reg axi_arvalid =1'b0; //AXI4读地有效
    225. wire axi_rlast ; //AXI4 读LAST信号
    226. reg axi_rready = 1'b0;//AXI4读准备好
    227. wire r_next = (M_AXI_RVALID && M_AXI_RREADY);// 当valid ready信号都有效,代表AXI4数据传输有效
    228. reg [8 :0] rburst_len = 1 ; //读传输的axi burst长度,代码会自动计算每次axi传输的burst 长度
    229. reg [8 :0] rburst_cnt = 0 ; //每次axi bust的计数器
    230. reg [15:0] rfdma_cnt = 0 ; //fdma的读数据计数器
    231. reg axi_rstart_locked =0; //axi 传输进行中,lock住,用于时序控制
    232. wire [15:0] axi_rburst_size = rburst_len * AXI_BYTES; //axi 传输的地址长度计算
    233. assign M_AXI_ARID = M_AXI_ID; //读地址ID,用来标志一组写信号, M_AXI_ID是通过参数接口定义
    234. assign M_AXI_ARADDR = axi_araddr;
    235. assign M_AXI_ARLEN = rburst_len - 1; //AXI4 burst的长度
    236. assign M_AXI_ARSIZE = clogb2((AXI_BYTES)-1);
    237. assign M_AXI_ARBURST = 2'b01; //AXI4的busr类型INCR模式,地址递增
    238. assign M_AXI_ARLOCK = 1'b0; //不使用cache,不使用buffer
    239. assign M_AXI_ARCACHE = 4'b0010;
    240. assign M_AXI_ARPROT = 3'h0;
    241. assign M_AXI_ARQOS = 4'h0;
    242. assign M_AXI_ARVALID = axi_arvalid;
    243. assign M_AXI_RREADY = axi_rready&&I_fdma_rready; //读数据准备好,这里必须设置I_fdma_rready有效
    244. assign O_fdma_rdata = M_AXI_RDATA;
    245. assign O_fdma_rvalid = r_next;
    246. //AXI4 FULL Read-----------------------------------------
    247. reg fdma_rstart_locked = 1'b0;
    248. wire fdma_rend;
    249. wire fdma_rstart;
    250. assign O_fdma_rbusy = fdma_rstart_locked ;
    251. //在整个读过程中fdma_rstart_locked将保持有效,直到本次FDMA写结束
    252. always @(posedge M_AXI_ACLK)
    253. if(M_AXI_ARESETN == 1'b0 || fdma_rend == 1'b1)
    254. fdma_rstart_locked <= 1'b0;
    255. else if(fdma_rstart)
    256. fdma_rstart_locked <= 1'b1;
    257. //产生fdma_rstart信号,整个信号保持1个 M_AXI_ACLK时钟周期
    258. assign fdma_rstart = (fdma_rstart_locked == 1'b0 && I_fdma_rareq == 1'b1);
    259. //AXI4 read burst lenth busrt addr ------------------------------
    260. //当fdma_rstart信号有效,代表一次新的FDMA传输,首先把地址本次fdma的burst地址寄存到axi_araddr作为第一次axi burst的地址。如果fdma的数据长度大于256,那么当axi_rlast有效的时候,自动计算下次axi的burst地址
    261. always @(posedge M_AXI_ACLK)
    262. if(fdma_rstart == 1'b1)
    263. axi_araddr <= I_fdma_raddr;
    264. else if(axi_rlast == 1'b1)
    265. axi_araddr <= axi_araddr + axi_rburst_size ;
    266. //AXI4 r_cycle_flag-------------------------------------
    267. //axi_rstart_locked_r1, axi_rstart_locked_r2信号是用于时序同步
    268. reg axi_rstart_locked_r1 = 1'b0, axi_rstart_locked_r2 = 1'b0;
    269. always @(posedge M_AXI_ACLK)begin
    270. axi_rstart_locked_r1 <= axi_rstart_locked;
    271. axi_rstart_locked_r2 <= axi_rstart_locked_r1;
    272. end
    273. // axi_rstart_locked的作用代表一次axi读burst操作正在进行中。
    274. always @(posedge M_AXI_ACLK)
    275. if((fdma_rstart_locked == 1'b1) && axi_rstart_locked == 1'b0)
    276. axi_rstart_locked <= 1'b1;
    277. else if(axi_rlast == 1'b1 || fdma_rstart == 1'b1)
    278. axi_rstart_locked <= 1'b0;
    279. //AXI4 addr valid and read addr-----------------------------------
    280. always @(posedge M_AXI_ACLK)
    281. if((axi_rstart_locked_r1 == 1'b1) && axi_rstart_locked_r2 == 1'b0)
    282. axi_arvalid <= 1'b1;
    283. else if((axi_rstart_locked == 1'b1 && M_AXI_ARREADY == 1'b1)|| axi_rstart_locked == 1'b0)
    284. axi_arvalid <= 1'b0;
    285. //AXI4 read data---------------------------------------------------
    286. always @(posedge M_AXI_ACLK)
    287. if((axi_rstart_locked_r1 == 1'b1) && axi_rstart_locked_r2 == 1'b0)
    288. axi_rready <= 1'b1;
    289. else if(axi_rlast == 1'b1 || axi_rstart_locked == 1'b0)
    290. axi_rready <= 1'b0;//
    291. //AXI4 read data burst len counter----------------------------------
    292. always @(posedge M_AXI_ACLK)
    293. if(axi_rstart_locked == 1'b0)
    294. rburst_cnt <= 'd0;
    295. else if(r_next)
    296. rburst_cnt <= rburst_cnt + 1'b1;
    297. assign axi_rlast = (r_next == 1'b1) && (rburst_cnt == M_AXI_ARLEN);
    298. //fdma read data burst len counter----------------------------------
    299. reg rburst_len_req = 1'b0;
    300. reg [15:0] fdma_rleft_cnt =16'd0;
    301. // rburst_len_req信号是自动管理每次axi需要burst的长度
    302. always @(posedge M_AXI_ACLK)
    303. rburst_len_req <= fdma_rstart | axi_rlast;
    304. // fdma_rleft_cnt用于记录一次FDMA剩余需要传输的数据数量
    305. always @(posedge M_AXI_ACLK)
    306. if(fdma_rstart )begin
    307. rfdma_cnt <= 1'd0;
    308. fdma_rleft_cnt <= I_fdma_rsize;
    309. end
    310. else if(r_next)begin
    311. rfdma_cnt <= rfdma_cnt + 1'b1;
    312. fdma_rleft_cnt <= (I_fdma_rsize - 1'b1) - rfdma_cnt;
    313. end
    314. //当最后一个数据的时候,产生fdma_rend信号代表本次fdma传输结束
    315. assign fdma_rend = r_next && (fdma_rleft_cnt == 1 );
    316. //axi auto burst len caculate-----------------------------------------
    317. //一次axi最大传输的长度是256因此当大于256,自动拆分多次传输
    318. always @(posedge M_AXI_ACLK)begin
    319. if(M_AXI_ARESETN == 1'b0)begin
    320. rburst_len <= 1;
    321. end
    322. else if(rburst_len_req)begin
    323. if(fdma_rleft_cnt[15:MAX_BURST_LEN_SIZE] >0)
    324. rburst_len <= M_AXI_MAX_BURST_LEN;
    325. else
    326. rburst_len <= fdma_rleft_cnt[MAX_BURST_LEN_SIZE-1:0];
    327. end
    328. else rburst_len <= rburst_len;
    329. end
    330. //dbg_wave dbg_wave_inst
    331. //(
    332. // .trig_out_0(),
    333. // .data_in_0({rburst_len[7:0],rburst_cnt[8:0],fdma_rleft_cnt[15:0],I_fdma_rareq,fdma_rstart,fdma_rstart_locked,axi_rstart_locked,axi_rlast,rburst_len_req,M_AXI_ARVALID,M_AXI_ARREADY,M_AXI_RVALID,M_AXI_RREADY,M_AXI_RLAST,wburst_len[7:0],wburst_cnt[8:0],fdma_wleft_cnt[15:0],I_fdma_wareq,fdma_wstart,fdma_wstart_locked,axi_wstart_locked,axi_wlast,wburst_len_req,M_AXI_AWVALID,M_AXI_AWREADY,M_AXI_WVALID,M_AXI_WREADY,M_AXI_WLAST,M_AXI_ARESETN}),
    334. // .ref_clk_0(M_AXI_ACLK)
    335. //);
    336. endmodule

  • 相关阅读:
    深度学习 --- stanford cs231学习笔记五(训练神经网络的几个重要组成部分之二,数据的预处理)
    C和指针 第13章 高级指针话题 13.5 字符串常量
    服务器防火墙的应用技术有哪些
    简约工作计划微立体PPT模板
    Himall商城Xml帮助类 XML序列化 OSS策略
    金仓数据库KingbaseES客户端应用参考手册--19. vacuumlo
    springboot和springcloud的区别是什么?
    C++ lower_bound() upper_bound() 函数用法详解(深入了解,一文学会)
    SigmaStudio定时器实验1
    43、vue导出pdf文件,并解决滚动条外内容无法获取的问题
  • 原文地址:https://blog.csdn.net/NoNoUnknow/article/details/134305733