Advertisement
Guest User

Untitled

a guest
Dec 8th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.12 KB | None | 0 0
  1. ------------------------------------------------------------------------------
  2. -- dma_controller.vhd - entity/architecture pair
  3. ------------------------------------------------------------------------------
  4. -- IMPORTANT:
  5. -- DO NOT MODIFY THIS FILE EXCEPT IN THE DESIGNATED SECTIONS.
  6. --
  7. -- SEARCH FOR --USER TO DETERMINE WHERE CHANGES ARE ALLOWED.
  8. --
  9. -- TYPICALLY, THE ONLY ACCEPTABLE CHANGES INVOLVE ADDING NEW
  10. -- PORTS AND GENERICS THAT GET PASSED THROUGH TO THE INSTANTIATION
  11. -- OF THE USER_LOGIC ENTITY.
  12. ------------------------------------------------------------------------------
  13. --
  14. -- ***************************************************************************
  15. -- ** Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. **
  16. -- ** **
  17. -- ** Xilinx, Inc. **
  18. -- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" **
  19. -- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND **
  20. -- ** SOLUTIONS FOR XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, **
  21. -- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, **
  22. -- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION **
  23. -- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, **
  24. -- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE **
  25. -- ** FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY **
  26. -- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE **
  27. -- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR **
  28. -- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF **
  29. -- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS **
  30. -- ** FOR A PARTICULAR PURPOSE. **
  31. -- ** **
  32. -- ***************************************************************************
  33. --
  34. ------------------------------------------------------------------------------
  35. -- Filename: dma_controller.vhd
  36. -- Version: 1.00.a
  37. -- Description: Top level design, instantiates library components and user logic.
  38. -- Date: Sat Dec 06 09:27:54 2014 (by Create and Import Peripheral Wizard)
  39. -- VHDL Standard: VHDL'93
  40. ------------------------------------------------------------------------------
  41. -- Naming Conventions:
  42. -- active low signals: "*_n"
  43. -- clock signals: "clk", "clk_div#", "clk_#x"
  44. -- reset signals: "rst", "rst_n"
  45. -- generics: "C_*"
  46. -- user defined types: "*_TYPE"
  47. -- state machine next state: "*_ns"
  48. -- state machine current state: "*_cs"
  49. -- combinatorial signals: "*_com"
  50. -- pipelined or register delay signals: "*_d#"
  51. -- counter signals: "*cnt*"
  52. -- clock enable signals: "*_ce"
  53. -- internal version of output port: "*_i"
  54. -- device pins: "*_pin"
  55. -- ports: "- Names begin with Uppercase"
  56. -- processes: "*_PROCESS"
  57. -- component instantiations: "<ENTITY_>I_<#|FUNC>"
  58. ------------------------------------------------------------------------------
  59.  
  60. library ieee;
  61. use ieee.std_logic_1164.all;
  62. use ieee.std_logic_arith.all;
  63. use ieee.std_logic_unsigned.all;
  64.  
  65. library proc_common_v3_00_a;
  66. use proc_common_v3_00_a.proc_common_pkg.all;
  67. use proc_common_v3_00_a.ipif_pkg.all;
  68.  
  69. library axi_lite_ipif_v1_01_a;
  70. use axi_lite_ipif_v1_01_a.axi_lite_ipif;
  71.  
  72. library axi_master_lite_v1_00_a;
  73. use axi_master_lite_v1_00_a.axi_master_lite;
  74.  
  75. library dma_controller_v1_00_a;
  76. use dma_controller_v1_00_a.user_logic;
  77.  
  78. ------------------------------------------------------------------------------
  79. -- Entity section
  80. ------------------------------------------------------------------------------
  81. -- Definition of Generics:
  82. -- C_S_AXI_DATA_WIDTH -- AXI4LITE slave: Data width
  83. -- C_S_AXI_ADDR_WIDTH -- AXI4LITE slave: Address Width
  84. -- C_S_AXI_MIN_SIZE -- AXI4LITE slave: Min Size
  85. -- C_USE_WSTRB -- AXI4LITE slave: Write Strobe
  86. -- C_DPHASE_TIMEOUT -- AXI4LITE slave: Data Phase Timeout
  87. -- C_BASEADDR -- AXI4LITE slave: base address
  88. -- C_HIGHADDR -- AXI4LITE slave: high address
  89. -- C_FAMILY -- FPGA Family
  90. -- C_NUM_REG -- Number of software accessible registers
  91. -- C_NUM_MEM -- Number of address-ranges
  92. -- C_SLV_AWIDTH -- Slave interface address bus width
  93. -- C_SLV_DWIDTH -- Slave interface data bus width
  94. -- C_M_AXI_LITE_ADDR_WIDTH -- Master-Intf address bus width
  95. -- C_M_AXI_LITE_DATA_WIDTH -- Master-Intf data bus width
  96. --
  97. -- Definition of Ports:
  98. -- S_AXI_ACLK -- AXI4LITE slave: Clock
  99. -- S_AXI_ARESETN -- AXI4LITE slave: Reset
  100. -- S_AXI_AWADDR -- AXI4LITE slave: Write address
  101. -- S_AXI_AWVALID -- AXI4LITE slave: Write address valid
  102. -- S_AXI_WDATA -- AXI4LITE slave: Write data
  103. -- S_AXI_WSTRB -- AXI4LITE slave: Write strobe
  104. -- S_AXI_WVALID -- AXI4LITE slave: Write data valid
  105. -- S_AXI_BREADY -- AXI4LITE slave: Response ready
  106. -- S_AXI_ARADDR -- AXI4LITE slave: Read address
  107. -- S_AXI_ARVALID -- AXI4LITE slave: Read address valid
  108. -- S_AXI_RREADY -- AXI4LITE slave: Read data ready
  109. -- S_AXI_ARREADY -- AXI4LITE slave: read addres ready
  110. -- S_AXI_RDATA -- AXI4LITE slave: Read data
  111. -- S_AXI_RRESP -- AXI4LITE slave: Read data response
  112. -- S_AXI_RVALID -- AXI4LITE slave: Read data valid
  113. -- S_AXI_WREADY -- AXI4LITE slave: Write data ready
  114. -- S_AXI_BRESP -- AXI4LITE slave: Response
  115. -- S_AXI_BVALID -- AXI4LITE slave: Resonse valid
  116. -- S_AXI_AWREADY -- AXI4LITE slave: Wrte address ready
  117. -- m_axi_lite_aclk -- AXI4LITE master: Clock
  118. -- m_axi_lite_aresetn -- AXI4LITE master: Reset
  119. -- md_error -- AXI4LITE master: Error
  120. -- m_axi_lite_arready -- AXI4LITE master: Read address ready
  121. -- m_axi_lite_arvalid -- AXI4LITE master: read address valid
  122. -- m_axi_lite_araddr -- AXI4LITE master: read address protection
  123. -- m_axi_lite_arprot -- AXI4LITE master: Read address protection
  124. -- m_axi_lite_rready -- AXI4LITE master: Read data ready
  125. -- m_axi_lite_rvalid -- AXI4LITE master: Read data valid
  126. -- m_axi_lite_rdata -- AXI4LITE master: Read data
  127. -- m_axi_lite_rresp -- AXI4LITE master: read data response
  128. -- m_axi_lite_awready -- AXI4LITE master: write address ready
  129. -- m_axi_lite_awvalid -- AXI4LITE master: write address valid
  130. -- m_axi_lite_awaddr -- AXI4LITE master: write address valid
  131. -- m_axi_lite_awprot -- AXI4LITE master: write address protection
  132. -- m_axi_lite_wready -- AXI4LITE master: write data ready
  133. -- m_axi_lite_wvalid -- AXI4LITE master: write data valid
  134. -- m_axi_lite_wdata -- AXI4LITE master: write data
  135. -- m_axi_lite_wstrb -- AXI4LITE master: write data strobe
  136. -- m_axi_lite_bready -- AXI4LITE master: read response ready
  137. -- m_axi_lite_bvalid -- AXI4LITE master: read response valid
  138. -- m_axi_lite_bresp -- AXI4LITE master: read response
  139. ------------------------------------------------------------------------------
  140.  
  141. entity dma_controller is
  142. generic
  143. (
  144. -- ADD USER GENERICS BELOW THIS LINE ---------------
  145. --USER generics added here
  146. -- ADD USER GENERICS ABOVE THIS LINE ---------------
  147.  
  148. -- DO NOT EDIT BELOW THIS LINE ---------------------
  149. -- Bus protocol parameters, do not add to or delete
  150. C_S_AXI_DATA_WIDTH : integer := 32;
  151. C_S_AXI_ADDR_WIDTH : integer := 32;
  152. C_S_AXI_MIN_SIZE : std_logic_vector := X"000001FF";
  153. C_USE_WSTRB : integer := 0;
  154. C_DPHASE_TIMEOUT : integer := 8;
  155. C_BASEADDR : std_logic_vector := X"FFFFFFFF";
  156. C_HIGHADDR : std_logic_vector := X"00000000";
  157. C_FAMILY : string := "virtex6";
  158. C_NUM_REG : integer := 5;
  159. C_NUM_MEM : integer := 1;
  160. C_SLV_AWIDTH : integer := 32;
  161. C_SLV_DWIDTH : integer := 32;
  162. C_M_AXI_LITE_ADDR_WIDTH : integer := 32;
  163. C_M_AXI_LITE_DATA_WIDTH : integer := 32
  164. -- DO NOT EDIT ABOVE THIS LINE ---------------------
  165. );
  166. port
  167. (
  168. -- ADD USER PORTS BELOW THIS LINE ------------------
  169. --USER ports added here
  170. transfer_finished : out std_logic; --fires this as interrupt on completion
  171. -- ADD USER PORTS ABOVE THIS LINE ------------------
  172.  
  173. -- DO NOT EDIT BELOW THIS LINE ---------------------
  174. -- Bus protocol ports, do not add to or delete
  175. S_AXI_ACLK : in std_logic;
  176. S_AXI_ARESETN : in std_logic;
  177. S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0);
  178. S_AXI_AWVALID : in std_logic;
  179. S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0);
  180. S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH/8)-1 downto 0);
  181. S_AXI_WVALID : in std_logic;
  182. S_AXI_BREADY : in std_logic;
  183. S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0);
  184. S_AXI_ARVALID : in std_logic;
  185. S_AXI_RREADY : in std_logic;
  186. S_AXI_ARREADY : out std_logic;
  187. S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0);
  188. S_AXI_RRESP : out std_logic_vector(1 downto 0);
  189. S_AXI_RVALID : out std_logic;
  190. S_AXI_WREADY : out std_logic;
  191. S_AXI_BRESP : out std_logic_vector(1 downto 0);
  192. S_AXI_BVALID : out std_logic;
  193. S_AXI_AWREADY : out std_logic;
  194. m_axi_lite_aclk : in std_logic;
  195. m_axi_lite_aresetn : in std_logic;
  196. md_error : out std_logic;
  197. m_axi_lite_arready : in std_logic;
  198. m_axi_lite_arvalid : out std_logic;
  199. m_axi_lite_araddr : out std_logic_vector(C_M_AXI_LITE_ADDR_WIDTH-1 downto 0);
  200. m_axi_lite_arprot : out std_logic_vector(2 downto 0);
  201. m_axi_lite_rready : out std_logic;
  202. m_axi_lite_rvalid : in std_logic;
  203. m_axi_lite_rdata : in std_logic_vector(C_M_AXI_LITE_DATA_WIDTH-1 downto 0);
  204. m_axi_lite_rresp : in std_logic_vector(1 downto 0);
  205. m_axi_lite_awready : in std_logic;
  206. m_axi_lite_awvalid : out std_logic;
  207. m_axi_lite_awaddr : out std_logic_vector(C_M_AXI_LITE_ADDR_WIDTH-1 downto 0);
  208. m_axi_lite_awprot : out std_logic_vector(2 downto 0);
  209. m_axi_lite_wready : in std_logic;
  210. m_axi_lite_wvalid : out std_logic;
  211. m_axi_lite_wdata : out std_logic_vector(C_M_AXI_LITE_DATA_WIDTH-1 downto 0);
  212. m_axi_lite_wstrb : out std_logic_vector((C_M_AXI_LITE_DATA_WIDTH/8)-1 downto 0);
  213. m_axi_lite_bready : out std_logic;
  214. m_axi_lite_bvalid : in std_logic;
  215. m_axi_lite_bresp : in std_logic_vector(1 downto 0)
  216. -- DO NOT EDIT ABOVE THIS LINE ---------------------
  217. );
  218.  
  219. attribute MAX_FANOUT : string;
  220. attribute SIGIS : string;
  221. attribute MAX_FANOUT of S_AXI_ACLK : signal is "10000";
  222. attribute MAX_FANOUT of S_AXI_ARESETN : signal is "10000";
  223. attribute SIGIS of S_AXI_ACLK : signal is "Clk";
  224. attribute SIGIS of S_AXI_ARESETN : signal is "Rst";
  225.  
  226. attribute MAX_FANOUT of m_axi_lite_aclk : signal is "10000";
  227. attribute MAX_FANOUT of m_axi_lite_aresetn : signal is "10000";
  228. attribute SIGIS of m_axi_lite_aclk : signal is "Clk";
  229. attribute SIGIS of m_axi_lite_aresetn : signal is "Rst";
  230. end entity dma_controller;
  231.  
  232. ------------------------------------------------------------------------------
  233. -- Architecture section
  234. ------------------------------------------------------------------------------
  235.  
  236. architecture IMP of dma_controller is
  237.  
  238. constant USER_SLV_DWIDTH : integer := C_S_AXI_DATA_WIDTH;
  239.  
  240. constant IPIF_SLV_DWIDTH : integer := C_S_AXI_DATA_WIDTH;
  241.  
  242. constant ZERO_ADDR_PAD : std_logic_vector(0 to 31) := (others => '0');
  243. constant USER_SLV_BASEADDR : std_logic_vector := C_BASEADDR or X"00000000";
  244. constant USER_SLV_HIGHADDR : std_logic_vector := C_BASEADDR or X"000000FF";
  245. constant USER_MST_BASEADDR : std_logic_vector := C_BASEADDR or X"00000100";
  246. constant USER_MST_HIGHADDR : std_logic_vector := C_BASEADDR or X"000001FF";
  247.  
  248. constant IPIF_ARD_ADDR_RANGE_ARRAY : SLV64_ARRAY_TYPE :=
  249. (
  250. ZERO_ADDR_PAD & USER_SLV_BASEADDR, -- user logic slave space base address
  251. ZERO_ADDR_PAD & USER_SLV_HIGHADDR, -- user logic slave space high address
  252. ZERO_ADDR_PAD & USER_MST_BASEADDR, -- user logic master space base address
  253. ZERO_ADDR_PAD & USER_MST_HIGHADDR -- user logic master space high address
  254. );
  255.  
  256. constant USER_SLV_NUM_REG : integer := 5;
  257. constant USER_MST_NUM_REG : integer := 4;
  258. constant USER_NUM_REG : integer := USER_SLV_NUM_REG+USER_MST_NUM_REG;
  259. constant TOTAL_IPIF_CE : integer := USER_NUM_REG;
  260.  
  261. constant IPIF_ARD_NUM_CE_ARRAY : INTEGER_ARRAY_TYPE :=
  262. (
  263. 0 => (USER_SLV_NUM_REG), -- number of ce for user logic slave space
  264. 1 => (USER_MST_NUM_REG) -- number of ce for user logic master space
  265. );
  266.  
  267. ------------------------------------------
  268. -- Width of the master address bus (32 only)
  269. ------------------------------------------
  270. constant USER_MST_AWIDTH : integer := C_M_AXI_LITE_ADDR_WIDTH;
  271.  
  272. ------------------------------------------
  273. -- Width of the master data bus (32 only)
  274. ------------------------------------------
  275. constant USER_MST_DWIDTH : integer := C_M_AXI_LITE_DATA_WIDTH;
  276.  
  277. ------------------------------------------
  278. -- Index for CS/CE
  279. ------------------------------------------
  280. constant USER_SLV_CS_INDEX : integer := 0;
  281. constant USER_SLV_CE_INDEX : integer := calc_start_ce_index(IPIF_ARD_NUM_CE_ARRAY, USER_SLV_CS_INDEX);
  282. constant USER_MST_CS_INDEX : integer := 1;
  283. constant USER_MST_CE_INDEX : integer := calc_start_ce_index(IPIF_ARD_NUM_CE_ARRAY, USER_MST_CS_INDEX);
  284.  
  285. constant USER_CE_INDEX : integer := USER_SLV_CE_INDEX;
  286.  
  287. ------------------------------------------
  288. -- IP Interconnect (IPIC) signal declarations
  289. ------------------------------------------
  290. signal ipif_Bus2IP_Clk : std_logic;
  291. signal ipif_Bus2IP_Resetn : std_logic;
  292. signal ipif_Bus2IP_Addr : std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0);
  293. signal ipif_Bus2IP_RNW : std_logic;
  294. signal ipif_Bus2IP_BE : std_logic_vector(IPIF_SLV_DWIDTH/8-1 downto 0);
  295. signal ipif_Bus2IP_CS : std_logic_vector((IPIF_ARD_ADDR_RANGE_ARRAY'LENGTH)/2-1 downto 0);
  296. signal ipif_Bus2IP_RdCE : std_logic_vector(calc_num_ce(IPIF_ARD_NUM_CE_ARRAY)-1 downto 0);
  297. signal ipif_Bus2IP_WrCE : std_logic_vector(calc_num_ce(IPIF_ARD_NUM_CE_ARRAY)-1 downto 0);
  298. signal ipif_Bus2IP_Data : std_logic_vector(IPIF_SLV_DWIDTH-1 downto 0);
  299. signal ipif_IP2Bus_WrAck : std_logic;
  300. signal ipif_IP2Bus_RdAck : std_logic;
  301. signal ipif_IP2Bus_Error : std_logic;
  302. signal ipif_IP2Bus_Data : std_logic_vector(IPIF_SLV_DWIDTH-1 downto 0);
  303. signal ipif_ip2bus_mstrd_req : std_logic;
  304. signal ipif_ip2bus_mstwr_req : std_logic;
  305. signal ipif_ip2bus_mst_addr : std_logic_vector(0 to C_M_AXI_LITE_ADDR_WIDTH-1);
  306. signal ipif_ip2bus_mst_be : std_logic_vector(0 to (C_M_AXI_LITE_DATA_WIDTH/8)-1);
  307. signal ipif_ip2bus_mst_lock : std_logic;
  308. signal ipif_ip2bus_mst_reset : std_logic;
  309. signal ipif_bus2ip_mst_cmdack : std_logic;
  310. signal ipif_bus2ip_mst_cmplt : std_logic;
  311. signal ipif_bus2ip_mst_error : std_logic;
  312. signal ipif_bus2ip_mst_rearbitrate : std_logic;
  313. signal ipif_bus2ip_mst_cmd_timeout : std_logic;
  314. signal ipif_bus2ip_mstrd_d : std_logic_vector(0 to C_M_AXI_LITE_DATA_WIDTH-1);
  315. signal ipif_bus2ip_mstrd_src_rdy_n : std_logic;
  316. signal ipif_ip2bus_mstwr_d : std_logic_vector(0 to C_M_AXI_LITE_DATA_WIDTH-1);
  317. signal ipif_bus2ip_mstwr_dst_rdy_n : std_logic;
  318. signal user_Bus2IP_RdCE : std_logic_vector(USER_NUM_REG-1 downto 0);
  319. signal user_Bus2IP_WrCE : std_logic_vector(USER_NUM_REG-1 downto 0);
  320. signal user_IP2Bus_Data : std_logic_vector(USER_SLV_DWIDTH-1 downto 0);
  321. signal user_IP2Bus_RdAck : std_logic;
  322. signal user_IP2Bus_WrAck : std_logic;
  323. signal user_IP2Bus_Error : std_logic;
  324.  
  325. begin
  326.  
  327. ------------------------------------------
  328. -- instantiate axi_lite_ipif
  329. ------------------------------------------
  330. AXI_LITE_IPIF_I : entity axi_lite_ipif_v1_01_a.axi_lite_ipif
  331. generic map
  332. (
  333. C_S_AXI_DATA_WIDTH => IPIF_SLV_DWIDTH,
  334. C_S_AXI_ADDR_WIDTH => C_S_AXI_ADDR_WIDTH,
  335. C_S_AXI_MIN_SIZE => C_S_AXI_MIN_SIZE,
  336. C_USE_WSTRB => C_USE_WSTRB,
  337. C_DPHASE_TIMEOUT => C_DPHASE_TIMEOUT,
  338. C_ARD_ADDR_RANGE_ARRAY => IPIF_ARD_ADDR_RANGE_ARRAY,
  339. C_ARD_NUM_CE_ARRAY => IPIF_ARD_NUM_CE_ARRAY,
  340. C_FAMILY => C_FAMILY
  341. )
  342. port map
  343. (
  344. S_AXI_ACLK => S_AXI_ACLK,
  345. S_AXI_ARESETN => S_AXI_ARESETN,
  346. S_AXI_AWADDR => S_AXI_AWADDR,
  347. S_AXI_AWVALID => S_AXI_AWVALID,
  348. S_AXI_WDATA => S_AXI_WDATA,
  349. S_AXI_WSTRB => S_AXI_WSTRB,
  350. S_AXI_WVALID => S_AXI_WVALID,
  351. S_AXI_BREADY => S_AXI_BREADY,
  352. S_AXI_ARADDR => S_AXI_ARADDR,
  353. S_AXI_ARVALID => S_AXI_ARVALID,
  354. S_AXI_RREADY => S_AXI_RREADY,
  355. S_AXI_ARREADY => S_AXI_ARREADY,
  356. S_AXI_RDATA => S_AXI_RDATA,
  357. S_AXI_RRESP => S_AXI_RRESP,
  358. S_AXI_RVALID => S_AXI_RVALID,
  359. S_AXI_WREADY => S_AXI_WREADY,
  360. S_AXI_BRESP => S_AXI_BRESP,
  361. S_AXI_BVALID => S_AXI_BVALID,
  362. S_AXI_AWREADY => S_AXI_AWREADY,
  363. Bus2IP_Clk => ipif_Bus2IP_Clk,
  364. Bus2IP_Resetn => ipif_Bus2IP_Resetn,
  365. Bus2IP_Addr => ipif_Bus2IP_Addr,
  366. Bus2IP_RNW => ipif_Bus2IP_RNW,
  367. Bus2IP_BE => ipif_Bus2IP_BE,
  368. Bus2IP_CS => ipif_Bus2IP_CS,
  369. Bus2IP_RdCE => ipif_Bus2IP_RdCE,
  370. Bus2IP_WrCE => ipif_Bus2IP_WrCE,
  371. Bus2IP_Data => ipif_Bus2IP_Data,
  372. IP2Bus_WrAck => ipif_IP2Bus_WrAck,
  373. IP2Bus_RdAck => ipif_IP2Bus_RdAck,
  374. IP2Bus_Error => ipif_IP2Bus_Error,
  375. IP2Bus_Data => ipif_IP2Bus_Data
  376. );
  377.  
  378. ------------------------------------------
  379. -- instantiate axi_master_lite
  380. ------------------------------------------
  381. AXI_MASTER_LITE_I : entity axi_master_lite_v1_00_a.axi_master_lite
  382. generic map
  383. (
  384. C_M_AXI_LITE_ADDR_WIDTH => C_M_AXI_LITE_ADDR_WIDTH,
  385. C_M_AXI_LITE_DATA_WIDTH => C_M_AXI_LITE_DATA_WIDTH,
  386. C_FAMILY => C_FAMILY
  387. )
  388. port map
  389. (
  390. m_axi_lite_aclk => m_axi_lite_aclk,
  391. m_axi_lite_aresetn => m_axi_lite_aresetn,
  392. md_error => md_error,
  393. m_axi_lite_arready => m_axi_lite_arready,
  394. m_axi_lite_arvalid => m_axi_lite_arvalid,
  395. m_axi_lite_araddr => m_axi_lite_araddr,
  396. m_axi_lite_arprot => m_axi_lite_arprot,
  397. m_axi_lite_rready => m_axi_lite_rready,
  398. m_axi_lite_rvalid => m_axi_lite_rvalid,
  399. m_axi_lite_rdata => m_axi_lite_rdata,
  400. m_axi_lite_rresp => m_axi_lite_rresp,
  401. m_axi_lite_awready => m_axi_lite_awready,
  402. m_axi_lite_awvalid => m_axi_lite_awvalid,
  403. m_axi_lite_awaddr => m_axi_lite_awaddr,
  404. m_axi_lite_awprot => m_axi_lite_awprot,
  405. m_axi_lite_wready => m_axi_lite_wready,
  406. m_axi_lite_wvalid => m_axi_lite_wvalid,
  407. m_axi_lite_wdata => m_axi_lite_wdata,
  408. m_axi_lite_wstrb => m_axi_lite_wstrb,
  409. m_axi_lite_bready => m_axi_lite_bready,
  410. m_axi_lite_bvalid => m_axi_lite_bvalid,
  411. m_axi_lite_bresp => m_axi_lite_bresp,
  412. ip2bus_mstrd_req => ipif_ip2bus_mstrd_req,
  413. ip2bus_mstwr_req => ipif_ip2bus_mstwr_req,
  414. ip2bus_mst_addr => ipif_ip2bus_mst_addr,
  415. ip2bus_mst_be => ipif_ip2bus_mst_be,
  416. ip2bus_mst_lock => ipif_ip2bus_mst_lock,
  417. ip2bus_mst_reset => ipif_ip2bus_mst_reset,
  418. bus2ip_mst_cmdack => ipif_bus2ip_mst_cmdack,
  419. bus2ip_mst_cmplt => ipif_bus2ip_mst_cmplt,
  420. bus2ip_mst_error => ipif_bus2ip_mst_error,
  421. bus2ip_mst_rearbitrate => ipif_bus2ip_mst_rearbitrate,
  422. bus2ip_mst_cmd_timeout => ipif_bus2ip_mst_cmd_timeout,
  423. bus2ip_mstrd_d => ipif_bus2ip_mstrd_d,
  424. bus2ip_mstrd_src_rdy_n => ipif_bus2ip_mstrd_src_rdy_n,
  425. ip2bus_mstwr_d => ipif_ip2bus_mstwr_d,
  426. bus2ip_mstwr_dst_rdy_n => ipif_bus2ip_mstwr_dst_rdy_n
  427. );
  428.  
  429. ------------------------------------------
  430. -- instantiate User Logic
  431. ------------------------------------------
  432. USER_LOGIC_I : entity dma_controller_v1_00_a.user_logic
  433. generic map
  434. (
  435. -- MAP USER GENERICS BELOW THIS LINE ---------------
  436. --USER generics mapped here
  437. -- MAP USER GENERICS ABOVE THIS LINE ---------------
  438.  
  439. C_MST_AWIDTH => USER_MST_AWIDTH,
  440. C_MST_DWIDTH => USER_MST_DWIDTH,
  441. C_NUM_REG => USER_NUM_REG,
  442. C_SLV_DWIDTH => USER_SLV_DWIDTH
  443. )
  444. port map
  445. (
  446. -- MAP USER PORTS BELOW THIS LINE ------------------
  447. --USER ports mapped here
  448. transfer_finished => transfer_finished,
  449. -- MAP USER PORTS ABOVE THIS LINE ------------------
  450.  
  451. Bus2IP_Clk => ipif_Bus2IP_Clk,
  452. Bus2IP_Resetn => ipif_Bus2IP_Resetn,
  453. Bus2IP_Data => ipif_Bus2IP_Data,
  454. Bus2IP_BE => ipif_Bus2IP_BE,
  455. Bus2IP_RdCE => user_Bus2IP_RdCE,
  456. Bus2IP_WrCE => user_Bus2IP_WrCE,
  457. IP2Bus_Data => user_IP2Bus_Data,
  458. IP2Bus_RdAck => user_IP2Bus_RdAck,
  459. IP2Bus_WrAck => user_IP2Bus_WrAck,
  460. IP2Bus_Error => user_IP2Bus_Error,
  461. ip2bus_mstrd_req => ipif_ip2bus_mstrd_req,
  462. ip2bus_mstwr_req => ipif_ip2bus_mstwr_req,
  463. ip2bus_mst_addr => ipif_ip2bus_mst_addr,
  464. ip2bus_mst_be => ipif_ip2bus_mst_be,
  465. ip2bus_mst_lock => ipif_ip2bus_mst_lock,
  466. ip2bus_mst_reset => ipif_ip2bus_mst_reset,
  467. bus2ip_mst_cmdack => ipif_bus2ip_mst_cmdack,
  468. bus2ip_mst_cmplt => ipif_bus2ip_mst_cmplt,
  469. bus2ip_mst_error => ipif_bus2ip_mst_error,
  470. bus2ip_mst_rearbitrate => ipif_bus2ip_mst_rearbitrate,
  471. bus2ip_mst_cmd_timeout => ipif_bus2ip_mst_cmd_timeout,
  472. bus2ip_mstrd_d => ipif_bus2ip_mstrd_d,
  473. bus2ip_mstrd_src_rdy_n => ipif_bus2ip_mstrd_src_rdy_n,
  474. ip2bus_mstwr_d => ipif_ip2bus_mstwr_d,
  475. bus2ip_mstwr_dst_rdy_n => ipif_bus2ip_mstwr_dst_rdy_n
  476. );
  477.  
  478. ------------------------------------------
  479. -- connect internal signals
  480. ------------------------------------------
  481. IP2BUS_DATA_MUX_PROC : process( ipif_Bus2IP_CS, user_IP2Bus_Data ) is
  482. begin
  483.  
  484. case ipif_Bus2IP_CS (1 downto 0) is
  485. when "01" => ipif_IP2Bus_Data <= user_IP2Bus_Data;
  486. when "10" => ipif_IP2Bus_Data <= user_IP2Bus_Data;
  487. when others => ipif_IP2Bus_Data <= (others => '0');
  488. end case;
  489.  
  490. end process IP2BUS_DATA_MUX_PROC;
  491.  
  492. ipif_IP2Bus_WrAck <= user_IP2Bus_WrAck;
  493. ipif_IP2Bus_RdAck <= user_IP2Bus_RdAck;
  494. ipif_IP2Bus_Error <= user_IP2Bus_Error;
  495.  
  496. user_Bus2IP_RdCE(USER_SLV_NUM_REG-1 downto 0) <= ipif_Bus2IP_RdCE(TOTAL_IPIF_CE -USER_SLV_CE_INDEX -1 downto TOTAL_IPIF_CE - USER_SLV_CE_INDEX -USER_SLV_NUM_REG);
  497. user_Bus2IP_WrCE(USER_SLV_NUM_REG-1 downto 0) <= ipif_Bus2IP_WrCE(TOTAL_IPIF_CE -USER_SLV_CE_INDEX -1 downto TOTAL_IPIF_CE - USER_SLV_CE_INDEX -USER_SLV_NUM_REG);
  498. user_Bus2IP_RdCE(USER_NUM_REG-1 downto USER_NUM_REG-USER_MST_NUM_REG) <= ipif_Bus2IP_RdCE(TOTAL_IPIF_CE - USER_MST_CE_INDEX -1 downto TOTAL_IPIF_CE - USER_MST_CE_INDEX -USER_MST_NUM_REG);
  499. user_Bus2IP_WrCE(USER_NUM_REG-1 downto USER_NUM_REG- USER_MST_NUM_REG) <= ipif_Bus2IP_WrCE(TOTAL_IPIF_CE - USER_MST_CE_INDEX -1 downto TOTAL_IPIF_CE - USER_MST_CE_INDEX -USER_MST_NUM_REG);
  500.  
  501. end IMP;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement