axi_hub.v 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. `timescale 1 ns / 1 ps
  2. module axi_hub #
  3. (
  4. parameter integer CFG_DATA_WIDTH = 1024,
  5. parameter integer STS_DATA_WIDTH = 1024
  6. )
  7. (
  8. input wire aclk,
  9. input wire aresetn,
  10. input wire [11:0] s_axi_awid,
  11. input wire [31:0] s_axi_awaddr,
  12. input wire s_axi_awvalid,
  13. output wire s_axi_awready,
  14. input wire [3:0] s_axi_wstrb,
  15. input wire s_axi_wlast,
  16. input wire [31:0] s_axi_wdata,
  17. input wire s_axi_wvalid,
  18. output wire s_axi_wready,
  19. output wire [11:0] s_axi_bid,
  20. output wire s_axi_bvalid,
  21. input wire s_axi_bready,
  22. input wire [11:0] s_axi_arid,
  23. input wire [3:0] s_axi_arlen,
  24. input wire [31:0] s_axi_araddr,
  25. input wire s_axi_arvalid,
  26. output wire s_axi_arready,
  27. output wire [11:0] s_axi_rid,
  28. output wire s_axi_rlast,
  29. output wire [31:0] s_axi_rdata,
  30. output wire s_axi_rvalid,
  31. input wire s_axi_rready,
  32. output wire [CFG_DATA_WIDTH-1:0] cfg_data,
  33. input wire [STS_DATA_WIDTH-1:0] sts_data,
  34. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram CLK" *)
  35. output wire b00_bram_clk,
  36. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram RST" *)
  37. output wire b00_bram_rst,
  38. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram EN" *)
  39. output wire b00_bram_en,
  40. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram WE" *)
  41. output wire [3:0] b00_bram_we,
  42. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram ADDR" *)
  43. output wire [21:0] b00_bram_addr,
  44. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram DIN" *)
  45. output wire [31:0] b00_bram_wdata,
  46. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b00_bram DOUT" *)
  47. input wire [31:0] b00_bram_rdata,
  48. input wire [31:0] s00_axis_tdata,
  49. input wire s00_axis_tvalid,
  50. output wire s00_axis_tready,
  51. output wire [31:0] m00_axis_tdata,
  52. output wire m00_axis_tvalid,
  53. input wire m00_axis_tready,
  54. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram CLK" *)
  55. output wire b01_bram_clk,
  56. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram RST" *)
  57. output wire b01_bram_rst,
  58. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram EN" *)
  59. output wire b01_bram_en,
  60. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram WE" *)
  61. output wire [3:0] b01_bram_we,
  62. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram ADDR" *)
  63. output wire [21:0] b01_bram_addr,
  64. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram DIN" *)
  65. output wire [31:0] b01_bram_wdata,
  66. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b01_bram DOUT" *)
  67. input wire [31:0] b01_bram_rdata,
  68. input wire [31:0] s01_axis_tdata,
  69. input wire s01_axis_tvalid,
  70. output wire s01_axis_tready,
  71. output wire [31:0] m01_axis_tdata,
  72. output wire m01_axis_tvalid,
  73. input wire m01_axis_tready,
  74. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram CLK" *)
  75. output wire b02_bram_clk,
  76. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram RST" *)
  77. output wire b02_bram_rst,
  78. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram EN" *)
  79. output wire b02_bram_en,
  80. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram WE" *)
  81. output wire [3:0] b02_bram_we,
  82. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram ADDR" *)
  83. output wire [21:0] b02_bram_addr,
  84. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram DIN" *)
  85. output wire [31:0] b02_bram_wdata,
  86. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b02_bram DOUT" *)
  87. input wire [31:0] b02_bram_rdata,
  88. input wire [31:0] s02_axis_tdata,
  89. input wire s02_axis_tvalid,
  90. output wire s02_axis_tready,
  91. output wire [31:0] m02_axis_tdata,
  92. output wire m02_axis_tvalid,
  93. input wire m02_axis_tready,
  94. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram CLK" *)
  95. output wire b03_bram_clk,
  96. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram RST" *)
  97. output wire b03_bram_rst,
  98. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram EN" *)
  99. output wire b03_bram_en,
  100. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram WE" *)
  101. output wire [3:0] b03_bram_we,
  102. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram ADDR" *)
  103. output wire [21:0] b03_bram_addr,
  104. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram DIN" *)
  105. output wire [31:0] b03_bram_wdata,
  106. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b03_bram DOUT" *)
  107. input wire [31:0] b03_bram_rdata,
  108. input wire [31:0] s03_axis_tdata,
  109. input wire s03_axis_tvalid,
  110. output wire s03_axis_tready,
  111. output wire [31:0] m03_axis_tdata,
  112. output wire m03_axis_tvalid,
  113. input wire m03_axis_tready,
  114. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram CLK" *)
  115. output wire b04_bram_clk,
  116. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram RST" *)
  117. output wire b04_bram_rst,
  118. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram EN" *)
  119. output wire b04_bram_en,
  120. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram WE" *)
  121. output wire [3:0] b04_bram_we,
  122. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram ADDR" *)
  123. output wire [21:0] b04_bram_addr,
  124. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram DIN" *)
  125. output wire [31:0] b04_bram_wdata,
  126. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b04_bram DOUT" *)
  127. input wire [31:0] b04_bram_rdata,
  128. input wire [31:0] s04_axis_tdata,
  129. input wire s04_axis_tvalid,
  130. output wire s04_axis_tready,
  131. output wire [31:0] m04_axis_tdata,
  132. output wire m04_axis_tvalid,
  133. input wire m04_axis_tready,
  134. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram CLK" *)
  135. output wire b05_bram_clk,
  136. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram RST" *)
  137. output wire b05_bram_rst,
  138. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram EN" *)
  139. output wire b05_bram_en,
  140. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram WE" *)
  141. output wire [3:0] b05_bram_we,
  142. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram ADDR" *)
  143. output wire [21:0] b05_bram_addr,
  144. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram DIN" *)
  145. output wire [31:0] b05_bram_wdata,
  146. (* X_INTERFACE_INFO = "xilinx.com:interface:bram:1.0 b05_bram DOUT" *)
  147. input wire [31:0] b05_bram_rdata,
  148. input wire [31:0] s05_axis_tdata,
  149. input wire s05_axis_tvalid,
  150. output wire s05_axis_tready,
  151. output wire [31:0] m05_axis_tdata,
  152. output wire m05_axis_tvalid,
  153. input wire m05_axis_tready
  154. );
  155. localparam integer HUB_SIZE = 6;
  156. localparam integer MUX_SIZE = HUB_SIZE + 2;
  157. localparam integer CFG_SIZE = CFG_DATA_WIDTH / 32;
  158. localparam integer CFG_WIDTH = CFG_SIZE > 1 ? $clog2(CFG_SIZE) : 1;
  159. localparam integer STS_SIZE = STS_DATA_WIDTH / 32;
  160. localparam integer STS_WIDTH = STS_SIZE > 1 ? $clog2(STS_SIZE) : 1;
  161. reg [3:0] int_awcntr_reg = 4'd0;
  162. reg [3:0] int_arcntr_reg = 4'd0;
  163. wire int_awvalid_wire, int_awready_wire;
  164. wire int_wvalid_wire, int_wready_wire;
  165. wire int_bvalid_wire, int_bready_wire;
  166. wire int_arvalid_wire, int_arready_wire;
  167. wire int_rvalid_wire, int_rready_wire;
  168. wire [11:0] int_awid_wire;
  169. wire [31:0] int_awaddr_wire;
  170. wire [3:0] int_wstrb_wire;
  171. wire int_wlast_wire;
  172. wire [31:0] int_wdata_wire;
  173. wire [11:0] int_arid_wire;
  174. wire [3:0] int_arlen_wire;
  175. wire [31:0] int_araddr_wire;
  176. wire [11:0] int_rid_wire;
  177. wire int_rlast_wire;
  178. wire [31:0] int_rdata_wire [MUX_SIZE-1:0];
  179. wire [31:0] int_sdata_wire [HUB_SIZE-1:0];
  180. wire [31:0] int_mdata_wire [HUB_SIZE-1:0];
  181. wire [HUB_SIZE-1:0] int_svalid_wire, int_sready_wire;
  182. wire [HUB_SIZE-1:0] int_mvalid_wire, int_mready_wire;
  183. wire [31:0] int_bdata_wire [HUB_SIZE-1:0];
  184. wire [21:0] int_waddr_wire;
  185. wire [21:0] int_raddr_wire;
  186. wire [31:0] int_cfg_mux [CFG_SIZE-1:0];
  187. wire [31:0] int_sts_mux [STS_SIZE-1:0];
  188. wire [31:0] int_rdata_mux [MUX_SIZE-1:0];
  189. wire [MUX_SIZE-1:0] int_wsel_wire, int_rsel_wire;
  190. wire [HUB_SIZE-1:0] int_bsel_wire;
  191. wire [CFG_SIZE-1:0] int_ce_wire;
  192. wire int_we_wire, int_re_wire;
  193. genvar j, k;
  194. assign int_awready_wire = int_bready_wire & int_wvalid_wire & int_wlast_wire;
  195. assign int_wready_wire = int_bready_wire & int_awvalid_wire;
  196. assign int_bvalid_wire = int_awvalid_wire & int_wvalid_wire & int_wlast_wire;
  197. assign int_arready_wire = int_rready_wire & int_rlast_wire;
  198. assign int_rvalid_wire = int_arvalid_wire;
  199. assign int_rlast_wire = int_arcntr_reg == int_arlen_wire;
  200. assign int_we_wire = int_bready_wire & int_awvalid_wire & int_wvalid_wire;
  201. assign int_re_wire = int_rready_wire & int_arvalid_wire;
  202. assign int_waddr_wire = int_awaddr_wire[23:2] + int_awcntr_reg;
  203. assign int_raddr_wire = int_araddr_wire[23:2] + int_arcntr_reg;
  204. assign int_rdata_wire[0] = int_rdata_mux[int_araddr_wire[27:24]];
  205. assign int_rdata_mux[0] = int_cfg_mux[int_raddr_wire[CFG_WIDTH-1:0]];
  206. assign int_rdata_mux[1] = int_sts_mux[int_raddr_wire[STS_WIDTH-1:0]];
  207. generate
  208. for(j = 0; j < HUB_SIZE; j = j + 1)
  209. begin : MUXES
  210. assign int_rdata_mux[j+2] = int_svalid_wire[j] ? int_sdata_wire[j] : 32'd0;
  211. assign int_rdata_wire[j+2] = int_bsel_wire[j] ? int_bdata_wire[j] : 32'd0;
  212. assign int_mdata_wire[j] = int_wdata_wire;
  213. assign int_mvalid_wire[j] = int_wsel_wire[j+2];
  214. assign int_sready_wire[j] = int_rsel_wire[j+2];
  215. end
  216. endgenerate
  217. generate
  218. for(j = 0; j < MUX_SIZE; j = j + 1)
  219. begin : SELECTS
  220. assign int_wsel_wire[j] = int_we_wire & (int_awaddr_wire[27:24] == j);
  221. assign int_rsel_wire[j] = int_re_wire & (int_araddr_wire[27:24] == j);
  222. end
  223. endgenerate
  224. generate
  225. for(j = 0; j < CFG_SIZE; j = j + 1)
  226. begin : CFG_WORDS
  227. assign int_cfg_mux[j] = cfg_data[j*32+31:j*32];
  228. assign int_ce_wire[j] = int_wsel_wire[0] & (int_waddr_wire[CFG_WIDTH-1:0] == j);
  229. for(k = 0; k < 32; k = k + 1)
  230. begin : CFG_BITS
  231. FDRE #(
  232. .INIT(1'b0)
  233. ) FDRE_inst (
  234. .CE(int_ce_wire[j] & int_wstrb_wire[k/8]),
  235. .C(aclk),
  236. .R(~aresetn),
  237. .D(int_wdata_wire[k]),
  238. .Q(cfg_data[j*32 + k])
  239. );
  240. end
  241. end
  242. endgenerate
  243. generate
  244. for(j = 0; j < STS_SIZE; j = j + 1)
  245. begin : STS_WORDS
  246. assign int_sts_mux[j] = sts_data[j*32+31:j*32];
  247. end
  248. endgenerate
  249. always @(posedge aclk)
  250. begin
  251. if(~aresetn | (int_awvalid_wire & int_awready_wire))
  252. begin
  253. int_awcntr_reg <= 4'd0;
  254. end
  255. else if(~int_wlast_wire & int_we_wire)
  256. begin
  257. int_awcntr_reg <= int_awcntr_reg + 1'b1;
  258. end
  259. if(~aresetn | (int_arvalid_wire & int_arready_wire))
  260. begin
  261. int_arcntr_reg <= 4'd0;
  262. end
  263. else if(~int_rlast_wire & int_re_wire)
  264. begin
  265. int_arcntr_reg <= int_arcntr_reg + 1'b1;
  266. end
  267. end
  268. inout_buffer #(
  269. .DATA_WIDTH(44)
  270. ) buf_0 (
  271. .aclk(aclk), .aresetn(aresetn),
  272. .in_data({s_axi_awid, s_axi_awaddr}),
  273. .in_valid(s_axi_awvalid), .in_ready(s_axi_awready),
  274. .out_data({int_awid_wire, int_awaddr_wire}),
  275. .out_valid(int_awvalid_wire), .out_ready(int_awready_wire)
  276. );
  277. inout_buffer #(
  278. .DATA_WIDTH(37)
  279. ) buf_1 (
  280. .aclk(aclk), .aresetn(aresetn),
  281. .in_data({s_axi_wstrb, s_axi_wlast, s_axi_wdata}),
  282. .in_valid(s_axi_wvalid), .in_ready(s_axi_wready),
  283. .out_data({int_wstrb_wire, int_wlast_wire, int_wdata_wire}),
  284. .out_valid(int_wvalid_wire), .out_ready(int_wready_wire)
  285. );
  286. output_buffer #(
  287. .DATA_WIDTH(12)
  288. ) buf_2 (
  289. .aclk(aclk), .aresetn(aresetn),
  290. .in_data(int_awid_wire), .in_valid(int_bvalid_wire), .in_ready(int_bready_wire),
  291. .out_data(s_axi_bid), .out_valid(s_axi_bvalid), .out_ready(s_axi_bready)
  292. );
  293. inout_buffer #(
  294. .DATA_WIDTH(48)
  295. ) buf_3 (
  296. .aclk(aclk), .aresetn(aresetn),
  297. .in_data({s_axi_arid, s_axi_arlen, s_axi_araddr}),
  298. .in_valid(s_axi_arvalid), .in_ready(s_axi_arready),
  299. .out_data({int_arid_wire, int_arlen_wire, int_araddr_wire}),
  300. .out_valid(int_arvalid_wire), .out_ready(int_arready_wire)
  301. );
  302. output_buffer #(
  303. .DATA_WIDTH(HUB_SIZE + 45)
  304. ) buf_4 (
  305. .aclk(aclk), .aresetn(aresetn),
  306. .in_data({int_rsel_wire[MUX_SIZE-1:2] & ~int_svalid_wire, int_arid_wire, int_rlast_wire, int_rdata_wire[0]}),
  307. .in_valid(int_rvalid_wire), .in_ready(int_rready_wire),
  308. .out_data({int_bsel_wire, s_axi_rid, s_axi_rlast, int_rdata_wire[1]}),
  309. .out_valid(s_axi_rvalid), .out_ready(s_axi_rready)
  310. );
  311. assign s_axi_rdata = int_rdata_wire[1] | int_rdata_wire[2] | int_rdata_wire[3] | int_rdata_wire[4] | int_rdata_wire[5] | int_rdata_wire[6] | int_rdata_wire[7];
  312. assign int_bdata_wire[0] = b00_bram_rdata;
  313. assign b00_bram_clk = aclk;
  314. assign b00_bram_rst = ~aresetn;
  315. assign b00_bram_en = int_rsel_wire[2] | int_wsel_wire[2];
  316. assign b00_bram_we = int_wsel_wire[2] ? int_wstrb_wire : 4'd0;
  317. assign b00_bram_addr = int_we_wire ? int_waddr_wire : int_raddr_wire;
  318. assign b00_bram_wdata = int_wdata_wire;
  319. assign int_sdata_wire[0] = s00_axis_tdata;
  320. assign int_svalid_wire[0] = s00_axis_tvalid;
  321. assign s00_axis_tready = int_sready_wire[0];
  322. inout_buffer #(
  323. .DATA_WIDTH(32)
  324. ) mbuf_0 (
  325. .aclk(aclk), .aresetn(aresetn),
  326. .in_data(int_mdata_wire[0]), .in_valid(int_mvalid_wire[0]), .in_ready(int_mready_wire[0]),
  327. .out_data(m00_axis_tdata), .out_valid(m00_axis_tvalid), .out_ready(m00_axis_tready)
  328. );
  329. assign int_bdata_wire[1] = b01_bram_rdata;
  330. assign b01_bram_clk = aclk;
  331. assign b01_bram_rst = ~aresetn;
  332. assign b01_bram_en = int_rsel_wire[3] | int_wsel_wire[3];
  333. assign b01_bram_we = int_wsel_wire[3] ? int_wstrb_wire : 4'd0;
  334. assign b01_bram_addr = int_we_wire ? int_waddr_wire : int_raddr_wire;
  335. assign b01_bram_wdata = int_wdata_wire;
  336. assign int_sdata_wire[1] = s01_axis_tdata;
  337. assign int_svalid_wire[1] = s01_axis_tvalid;
  338. assign s01_axis_tready = int_sready_wire[1];
  339. inout_buffer #(
  340. .DATA_WIDTH(32)
  341. ) mbuf_1 (
  342. .aclk(aclk), .aresetn(aresetn),
  343. .in_data(int_mdata_wire[1]), .in_valid(int_mvalid_wire[1]), .in_ready(int_mready_wire[1]),
  344. .out_data(m01_axis_tdata), .out_valid(m01_axis_tvalid), .out_ready(m01_axis_tready)
  345. );
  346. assign int_bdata_wire[2] = b02_bram_rdata;
  347. assign b02_bram_clk = aclk;
  348. assign b02_bram_rst = ~aresetn;
  349. assign b02_bram_en = int_rsel_wire[4] | int_wsel_wire[4];
  350. assign b02_bram_we = int_wsel_wire[4] ? int_wstrb_wire : 4'd0;
  351. assign b02_bram_addr = int_we_wire ? int_waddr_wire : int_raddr_wire;
  352. assign b02_bram_wdata = int_wdata_wire;
  353. assign int_sdata_wire[2] = s02_axis_tdata;
  354. assign int_svalid_wire[2] = s02_axis_tvalid;
  355. assign s02_axis_tready = int_sready_wire[2];
  356. inout_buffer #(
  357. .DATA_WIDTH(32)
  358. ) mbuf_2 (
  359. .aclk(aclk), .aresetn(aresetn),
  360. .in_data(int_mdata_wire[2]), .in_valid(int_mvalid_wire[2]), .in_ready(int_mready_wire[2]),
  361. .out_data(m02_axis_tdata), .out_valid(m02_axis_tvalid), .out_ready(m02_axis_tready)
  362. );
  363. assign int_bdata_wire[3] = b03_bram_rdata;
  364. assign b03_bram_clk = aclk;
  365. assign b03_bram_rst = ~aresetn;
  366. assign b03_bram_en = int_rsel_wire[5] | int_wsel_wire[5];
  367. assign b03_bram_we = int_wsel_wire[5] ? int_wstrb_wire : 4'd0;
  368. assign b03_bram_addr = int_we_wire ? int_waddr_wire : int_raddr_wire;
  369. assign b03_bram_wdata = int_wdata_wire;
  370. assign int_sdata_wire[3] = s03_axis_tdata;
  371. assign int_svalid_wire[3] = s03_axis_tvalid;
  372. assign s03_axis_tready = int_sready_wire[3];
  373. inout_buffer #(
  374. .DATA_WIDTH(32)
  375. ) mbuf_3 (
  376. .aclk(aclk), .aresetn(aresetn),
  377. .in_data(int_mdata_wire[3]), .in_valid(int_mvalid_wire[3]), .in_ready(int_mready_wire[3]),
  378. .out_data(m03_axis_tdata), .out_valid(m03_axis_tvalid), .out_ready(m03_axis_tready)
  379. );
  380. assign int_bdata_wire[4] = b04_bram_rdata;
  381. assign b04_bram_clk = aclk;
  382. assign b04_bram_rst = ~aresetn;
  383. assign b04_bram_en = int_rsel_wire[6] | int_wsel_wire[6];
  384. assign b04_bram_we = int_wsel_wire[6] ? int_wstrb_wire : 4'd0;
  385. assign b04_bram_addr = int_we_wire ? int_waddr_wire : int_raddr_wire;
  386. assign b04_bram_wdata = int_wdata_wire;
  387. assign int_sdata_wire[4] = s04_axis_tdata;
  388. assign int_svalid_wire[4] = s04_axis_tvalid;
  389. assign s04_axis_tready = int_sready_wire[4];
  390. inout_buffer #(
  391. .DATA_WIDTH(32)
  392. ) mbuf_4 (
  393. .aclk(aclk), .aresetn(aresetn),
  394. .in_data(int_mdata_wire[4]), .in_valid(int_mvalid_wire[4]), .in_ready(int_mready_wire[4]),
  395. .out_data(m04_axis_tdata), .out_valid(m04_axis_tvalid), .out_ready(m04_axis_tready)
  396. );
  397. assign int_bdata_wire[5] = b05_bram_rdata;
  398. assign b05_bram_clk = aclk;
  399. assign b05_bram_rst = ~aresetn;
  400. assign b05_bram_en = int_rsel_wire[7] | int_wsel_wire[7];
  401. assign b05_bram_we = int_wsel_wire[7] ? int_wstrb_wire : 4'd0;
  402. assign b05_bram_addr = int_we_wire ? int_waddr_wire : int_raddr_wire;
  403. assign b05_bram_wdata = int_wdata_wire;
  404. assign int_sdata_wire[5] = s05_axis_tdata;
  405. assign int_svalid_wire[5] = s05_axis_tvalid;
  406. assign s05_axis_tready = int_sready_wire[5];
  407. inout_buffer #(
  408. .DATA_WIDTH(32)
  409. ) mbuf_5 (
  410. .aclk(aclk), .aresetn(aresetn),
  411. .in_data(int_mdata_wire[5]), .in_valid(int_mvalid_wire[5]), .in_ready(int_mready_wire[5]),
  412. .out_data(m05_axis_tdata), .out_valid(m05_axis_tvalid), .out_ready(m05_axis_tready)
  413. );
  414. endmodule