diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/component.xml b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/component.xml new file mode 100644 index 0000000..51b1553 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/component.xml @@ -0,0 +1,1498 @@ + + + digilentinc.com + user + d_axi_i2s_audio + 2.0 + + + AXI_L + + + + + + + + + AWADDR + + + AXI_L_awaddr + + + + + AWPROT + + + AXI_L_awprot + + + + + AWVALID + + + AXI_L_awvalid + + + + + AWREADY + + + AXI_L_awready + + + + + WDATA + + + AXI_L_wdata + + + + + WSTRB + + + AXI_L_wstrb + + + + + WVALID + + + AXI_L_wvalid + + + + + WREADY + + + AXI_L_wready + + + + + BRESP + + + AXI_L_bresp + + + + + BVALID + + + AXI_L_bvalid + + + + + BREADY + + + AXI_L_bready + + + + + ARADDR + + + AXI_L_araddr + + + + + ARPROT + + + AXI_L_arprot + + + + + ARVALID + + + AXI_L_arvalid + + + + + ARREADY + + + AXI_L_arready + + + + + RDATA + + + AXI_L_rdata + + + + + RRESP + + + AXI_L_rresp + + + + + RVALID + + + AXI_L_rvalid + + + + + RREADY + + + AXI_L_rready + + + + + + WIZ.DATA_WIDTH + 32 + + + WIZ.NUM_REG + 10 + + + SUPPORTS_NARROW_BURST + 0 + + + + + AXI_L_RST + + + + + + + RST + + + AXI_L_aresetn + + + + + + POLARITY + ACTIVE_LOW + + + + + AXI_L_CLK + + + + + + + CLK + + + AXI_L_aclk + + + + + + ASSOCIATED_BUSIF + AXI_L + + + ASSOCIATED_RESET + axi_l_aresetn + + + + + AXI_MM2S + AXI_MM2S + + + + + + + TKEEP + + + S_AXIS_MM2S_TKEEP + + + + + TLAST + + + S_AXIS_MM2S_TLAST + + + + + TREADY + + + S_AXIS_MM2S_TREADY + + + + + TDATA + + + S_AXIS_MM2S_TDATA + + + + + TVALID + + + S_AXIS_MM2S_TVALID + + + + + + + false + + + + + + AXI_S2MM + AXI_S2MM + + + + + + + TVALID + + + M_AXIS_S2MM_TVALID + + + + + TKEEP + + + M_AXIS_S2MM_TKEEP + + + + + TREADY + + + M_AXIS_S2MM_TREADY + + + + + TLAST + + + M_AXIS_S2MM_TLAST + + + + + TDATA + + + M_AXIS_S2MM_TDATA + + + + + + + false + + + + + + AXI_S2MM_CLK + AXI_S2MM_CLK + + + + + + + CLK + + + M_AXIS_S2MM_ACLK + + + + + + ASSOCIATED_BUSIF + AXI_S2MM + + + ASSOCIATED_RESET + M_AXIS_S2MM_ARESETN + + + + + + false + + + + + + AXI_MM2S_CLK + + + + + + + CLK + + + S_AXIS_MM2S_ACLK + + + + + + ASSOCIATED_BUSIF + AXI_MM2S + + + ASSOCIATED_RESET + S_AXIS_MM2S_ARESETN + + + + + + false + + + + + + AXI_MM2S_RST + + + + + + + RST + + + S_AXIS_MM2S_ARESETN + + + + + + POLARITY + ACTIVE_LOW + + + + + + false + + + + + + AXI_S2MM_RST + + + + + + + RST + + + M_AXIS_S2MM_ARESETN + + + + + + POLARITY + ACTIVE_LOW + + + + + + false + + + + + + + + AXI_L + + AXI_L_reg + 0 + 4096 + 32 + register + + + OFFSET_BASE_PARAM + C_AXI_L_BASEADDR + + + OFFSET_HIGH_PARAM + C_AXI_L_HIGHADDR + + + + + + + + + xilinx_vhdlsynthesis + VHDL Synthesis + vhdlSource:vivado.xilinx.com:synthesis + vhdl + d_axi_i2s_audio_v2_0 + + xilinx_vhdlsynthesis_view_fileset + + + + viewChecksum + 85e9db01 + + + + + xilinx_vhdlbehavioralsimulation + VHDL Simulation + vhdlSource:vivado.xilinx.com:simulation + vhdl + d_axi_i2s_audio_v2_0 + + xilinx_vhdlbehavioralsimulation_view_fileset + + + + viewChecksum + 3c33b810 + + + + + xilinx_xpgui + UI Layout + :vivado.xilinx.com:xgui.ui + + xilinx_xpgui_view_fileset + + + + viewChecksum + 8ebd6a31 + + + + + + + BCLK_O + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + BCLK_I + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + + false + + + + + + BCLK_T + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + + false + + + + + + LRCLK_O + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + LRCLK_I + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + + false + + + + + + LRCLK_T + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + + false + + + + + + MCLK_O + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + SDATA_I + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + SDATA_O + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + CLK_100MHZ_I + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + S_AXIS_MM2S_ACLK + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + S_AXIS_MM2S_ARESETN + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 1 + + + + + S_AXIS_MM2S_TREADY + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + S_AXIS_MM2S_TDATA + + in + + 31 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + S_AXIS_MM2S_TKEEP + + in + + 3 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + S_AXIS_MM2S_TLAST + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + S_AXIS_MM2S_TVALID + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + M_AXIS_S2MM_ACLK + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + M_AXIS_S2MM_ARESETN + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 1 + + + + + M_AXIS_S2MM_TVALID + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + M_AXIS_S2MM_TDATA + + out + + 31 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + M_AXIS_S2MM_TKEEP + + out + + 3 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + M_AXIS_S2MM_TLAST + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + M_AXIS_S2MM_TREADY + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_aclk + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_aresetn + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_awaddr + + in + + 5 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_awprot + + in + + 2 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_awvalid + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_awready + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_wdata + + in + + 31 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_wstrb + + in + + 3 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_wvalid + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_wready + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_bresp + + out + + 1 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_bvalid + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_bready + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_araddr + + in + + 5 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_arprot + + in + + 2 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_arvalid + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + AXI_L_arready + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_rdata + + out + + 31 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_rresp + + out + + 1 + 0 + + + + std_logic_vector + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_rvalid + + out + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + + + AXI_L_rready + + in + + + std_logic + xilinx_vhdlsynthesis + xilinx_vhdlbehavioralsimulation + + + + 0 + + + + + + + C_DATA_WIDTH + C Data Width + 24 + + + C_AXI_STREAM_DATA_WIDTH + C Axi Stream Data Width + 32 + + + C_AXI_L_DATA_WIDTH + C Axi L Data Width + 32 + + + C_AXI_L_ADDR_WIDTH + C Axi L Addr Width + 6 + + + + + + choice_list_6fc15197 + 32 + + + choice_list_9d8b0d81 + ACTIVE_HIGH + ACTIVE_LOW + + + choice_pairs_ce1226b1 + 1 + 0 + + + + + xilinx_vhdlsynthesis_view_fileset + + src/d_axi_i2s_audio.xdc + xdc + USED_IN_implementation + USED_IN_synthesis + + + src/rst_sync.vhd + vhdlSource + + + src/i2s_ctl.vhd + vhdlSource + + + src/DCM.vhd + vhdlSource + + + src/Sync_ff.vhd + vhdlSource + + + src/i2s_stream.vhd + vhdlSource + + + src/i2s_rx_tx.vhd + vhdlSource + + + src/d_axi_i2s_audio_v2_0_AXI_L.vhd + vhdlSource + + + src/d_axi_i2s_audio_v2_0.vhd + vhdlSource + + + src/fifo_32/fifo_32.xci + xci + + + src/fifo_4/fifo_4.xci + xci + + + + xilinx_vhdlbehavioralsimulation_view_fileset + + src/fifo_32/fifo_32.xci + xci + + + src/fifo_4/fifo_4.xci + xci + + + src/rst_sync.vhd + vhdlSource + USED_IN_ipstatic + + + src/i2s_ctl.vhd + vhdlSource + USED_IN_ipstatic + + + src/DCM.vhd + vhdlSource + USED_IN_ipstatic + + + src/Sync_ff.vhd + vhdlSource + USED_IN_ipstatic + + + src/i2s_stream.vhd + vhdlSource + USED_IN_ipstatic + + + src/i2s_rx_tx.vhd + vhdlSource + USED_IN_ipstatic + + + src/d_axi_i2s_audio_v2_0_AXI_L.vhd + vhdlSource + USED_IN_ipstatic + + + src/d_axi_i2s_audio_v2_0.vhd + vhdlSource + USED_IN_ipstatic + + + + xilinx_xpgui_view_fileset + + xgui/d_axi_i2s_audio_v2_0.tcl + tclSource + CHECKSUM_33752f34 + XGUI_VERSION_2 + + + + I2S Controller AXI_Lite AXI-Stream + + + C_AXI_L_BASEADDR + C AXI_L BASEADDR + 0xFFFFFFFF + + + + false + + + + + + C_AXI_L_HIGHADDR + C AXI_L HIGHADDR + 0x00000000 + + + + false + + + + + + Component_Name + Component Name + d_axi_i2s_audio_v2_0 + + + C_DATA_WIDTH + C Data Width + 24 + + + C_AXI_STREAM_DATA_WIDTH + C Axi Stream Data Width + 32 + + + C_AXI_L_DATA_WIDTH + C Axi L Data Width + 32 + + + C_AXI_L_ADDR_WIDTH + C Axi L Addr Width + 6 + + + ENABLE_STREAM + Enable Stream + false + + + BIDIRECTIONAL_CLK + Enable Bidirectional Clock + false + + + + + + zynq + artix7{c7a200tsbg484-1} + kintex7 + + + AXI_Peripheral + + d_axi_i2s_audio_v2_0 + Digilent, Inc. + http://www.digilentinc.com + 52 + 2016-08-09T18:41:44Z + + C:/Users/nagy/Work/Atlys2/atlys2bist/proj + C:/Work/Github/NexysVideo/Projects/dma/repo/local/ip/d_axi_i2s_audio_v2_0 + + + + 2015.4 + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/DCM.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/DCM.vhd new file mode 100644 index 0000000..666bc4e --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/DCM.vhd @@ -0,0 +1,189 @@ +-- file: DCM.vhd +-- +-- (c) Copyright 2008 - 2011 Xilinx, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of Xilinx, Inc. and is protected under U.S. and +-- international copyright and other intellectual property +-- laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- Xilinx, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) Xilinx shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or Xilinx had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- Xilinx products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of Xilinx products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. +-- +------------------------------------------------------------------------------ +-- User entered comments +------------------------------------------------------------------------------ +-- None +-- +------------------------------------------------------------------------------ +-- "Output Output Phase Duty Pk-to-Pk Phase" +-- "Clock Freq (MHz) (degrees) Cycle (%) Jitter (ps) Error (ps)" +------------------------------------------------------------------------------ +-- CLK_OUT1____12.289______0.000______50.0______335.213____300.046 +-- +------------------------------------------------------------------------------ +-- "Input Clock Freq (MHz) Input Jitter (UI)" +------------------------------------------------------------------------------ +-- __primary_________100.000____________0.010 + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; +use ieee.numeric_std.all; + +library unisim; +use unisim.vcomponents.all; + +entity DCM is +port + (-- Clock in ports + CLK_100 : in std_logic; + -- Clock out ports + CLK_12_288 : out std_logic; + -- Status and control signals + RESET : in std_logic; + LOCKED : out std_logic + ); +end DCM; + +architecture xilinx of DCM is + attribute CORE_GENERATION_INFO : string; + attribute CORE_GENERATION_INFO of xilinx : architecture is "DCM,clk_wiz_v3_6,{component_name=DCM,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,feedback_source=FDBK_AUTO,primtype_sel=MMCM_ADV,num_out_clk=1,clkin1_period=10.000,clkin2_period=10.000,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,use_status=false,use_freeze=false,use_clk_valid=false,feedback_type=SINGLE,clock_mgr_type=MANUAL,manual_override=false}"; + -- Input clock buffering / unused connectors + signal clkin1 : std_logic; + -- Output clock buffering / unused connectors + signal clkfbout : std_logic; + signal clkfbout_buf : std_logic; + signal clkfboutb_unused : std_logic; + signal clkout0 : std_logic; + signal clkout0b_unused : std_logic; + signal clkout1_unused : std_logic; + signal clkout1b_unused : std_logic; + signal clkout2_unused : std_logic; + signal clkout2b_unused : std_logic; + signal clkout3_unused : std_logic; + signal clkout3b_unused : std_logic; + signal clkout4_unused : std_logic; + signal clkout5_unused : std_logic; + signal clkout6_unused : std_logic; + -- Dynamic programming unused signals + signal do_unused : std_logic_vector(15 downto 0); + signal drdy_unused : std_logic; + -- Dynamic phase shift unused signals + signal psdone_unused : std_logic; + -- Unused status signals + signal clkfbstopped_unused : std_logic; + signal clkinstopped_unused : std_logic; +begin + + + -- Input buffering + -------------------------------------- + clkin1 <= CLK_100; + + + -- Clocking primitive + -------------------------------------- + -- Instantiation of the MMCM primitive + -- * Unused inputs are tied off + -- * Unused outputs are labeled unused + plle2_adv_inst : PLLE2_ADV + generic map + (BANDWIDTH => "OPTIMIZED", + COMPENSATION => "ZHOLD", + DIVCLK_DIVIDE => 5, + CLKFBOUT_MULT => 51, + CLKFBOUT_PHASE => 0.000, + CLKOUT0_DIVIDE => 83, + CLKOUT0_PHASE => 0.000, + CLKOUT0_DUTY_CYCLE => 0.500, + CLKIN1_PERIOD => 10.000, + REF_JITTER1 => 0.010) + port map + -- Output clocks + (CLKFBOUT => clkfbout, + CLKOUT0 => clkout0, + CLKOUT1 => clkout1_unused, + CLKOUT2 => clkout2_unused, + CLKOUT3 => clkout3_unused, + CLKOUT4 => clkout4_unused, + CLKOUT5 => clkout5_unused, + -- Input clock control + CLKFBIN => clkfbout, + CLKIN1 => clkin1, + CLKIN2 => '0', + -- Tied to always select the primary input clock + CLKINSEL => '1', + -- Ports for dynamic reconfiguration + DADDR => (others => '0'), + DCLK => '0', + DEN => '0', + DI => (others => '0'), + DO => do_unused, + DRDY => drdy_unused, + DWE => '0', + -- Other control and status signals + LOCKED => LOCKED, + PWRDWN => '0', + RST => RESET); + + -- Output buffering + ------------------------------------- + + +-- -- Output buffering +-- ------------------------------------- +-- clkf_buf : BUFG +-- port map +-- (O => clkfbout_buf, +-- I => clkfbout); +-- +-- + clkout1_buf : BUFG + port map + (O => CLK_12_288, + I => clkout0); + +--clkfbout_buf <= clkfbout; +--CLK_12_288 <= clkout0; + + + +end xilinx; diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/Div_by_4.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/Div_by_4.vhd new file mode 100644 index 0000000..06ad645 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/Div_by_4.vhd @@ -0,0 +1,66 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:49:17 04/02/2014 +-- Design Name: +-- Module Name: Div_by_4 - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--use IEEE.NUMERIC_STD.ALL; + +-- Uncomment the following library declaration if instantiating +-- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity Div_by_4 is + Port + ( + CE_I : in STD_LOGIC; + CLK_I : in STD_LOGIC; + DIV_O : out STD_LOGIC + ); +end Div_by_4; + +architecture Behavioral of Div_by_4 is + +signal cnt : integer range 0 to 2 :=0; +signal clk_div : STD_LOGIC := '0'; + +begin + +process (CLK_I) +begin + if (CLK_I'event and CLK_I = '1') then + if (CE_I = '1') then + cnt <= cnt + 1; + if cnt = 2 then + cnt <= 0; + clk_div <= not clk_div; + end if; + else + cnt <= 0; + end if; + end if; +end process; + +DIV_O <= clk_div; + +end Behavioral; + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/Sync_ff.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/Sync_ff.vhd new file mode 100644 index 0000000..24ac540 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/Sync_ff.vhd @@ -0,0 +1,61 @@ +------------------------------------------------------------------------------- +-- +-- COPYRIGHT (C) 2012, Digilent RO. All rights reserved +-- +------------------------------------------------------------------------------- +-- FILE NAME : Sync_ff.vhd +-- MODULE NAME : Synchornisation Flip-Flops +-- AUTHOR : Hegbeli Ciprian +-- AUTHOR'S EMAIL : ciprian.hegbeli@digilent.ro +------------------------------------------------------------------------------- +-- REVISION HISTORY +-- VERSION DATE AUTHOR DESCRIPTION +-- 1.0 2014-04-02 CiprianH Created +------------------------------------------------------------------------------- +-- KEYWORDS : Sync +------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +------------------------------------------------------------------------ +-- Module Declaration +------------------------------------------------------------------------ +entity Sync_ff is + Port ( + -- Input Clock + CLK : in STD_LOGIC; + -- Asynchorn signal + D_I : in STD_LOGIC; + -- Sync signal + Q_O : out STD_LOGIC + ); +end Sync_ff; + +architecture Behavioral of Sync_ff is + +------------------------------------------------------------------------ +-- Signal Declarations +------------------------------------------------------------------------ +signal sreg : std_logic_vector(1 downto 0); + +attribute ASYNC_REG : string; +attribute ASYNC_REG of sreg : signal is "TRUE"; + +attribute TIG : string; +attribute TIG of D_I: signal is "TRUE"; + +begin + +------------------------------------------------------------------------ +-- Output synchro with second CLK +------------------------------------------------------------------------ +sync_b_proc_2: process(CLK) +begin + if rising_edge(CLK) then + Q_O <= sreg(1); + sreg <= sreg(0) & D_I; + end if; +end process; + +end Behavioral; + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio.xdc b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio.xdc new file mode 100644 index 0000000..a06ec94 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio.xdc @@ -0,0 +1,6 @@ +set_false_path -through [get_pins -filter {NAME =~ */Inst_I2sCtl/Inst_SyncBit_*/sreg_reg[0]/D} -hier] +set_false_path -through [get_pins -filter {NAME =~ */Inst_I2sCtl/Inst_Rst_Sync*/FDRE_inst_*/PRE} -hier] + +set_property ASYNC_REG true [get_cells -filter {NAME =~ */Inst_I2sCtl/Inst_Rst_Sync*} -hier] + + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio_v2_0.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio_v2_0.vhd new file mode 100644 index 0000000..6997460 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio_v2_0.vhd @@ -0,0 +1,204 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +entity d_axi_i2s_audio_v2_0 is + generic ( + C_DATA_WIDTH : integer := 24; + + -- AXI4-Stream parameter + C_AXI_STREAM_DATA_WIDTH : integer := 32; + + -- Parameters of Axi Slave Bus Interface AXI_L + C_AXI_L_DATA_WIDTH : integer := 32; + C_AXI_L_ADDR_WIDTH : integer := 6 + ); + port ( + -- I2S + BCLK_O : out std_logic; + BCLK_I : in std_logic; + BCLK_T : out std_logic; + LRCLK_O : out std_logic; + LRCLK_I : in std_logic; + LRCLK_T : out std_logic; + MCLK_O : out std_logic; + SDATA_I : in std_logic; + SDATA_O : out std_logic; + CLK_100MHZ_I : in std_logic; + + -- AXI4-Stream + S_AXIS_MM2S_ACLK : in std_logic; + S_AXIS_MM2S_ARESETN : in std_logic; + S_AXIS_MM2S_TREADY : out std_logic; + S_AXIS_MM2S_TDATA : in std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + S_AXIS_MM2S_TKEEP : in std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0); + S_AXIS_MM2S_TLAST : in std_logic; + S_AXIS_MM2S_TVALID : in std_logic; + + M_AXIS_S2MM_ACLK : in std_logic; + M_AXIS_S2MM_ARESETN : in std_logic; + M_AXIS_S2MM_TVALID : out std_logic; + M_AXIS_S2MM_TDATA : out std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + M_AXIS_S2MM_TKEEP : out std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0); + M_AXIS_S2MM_TLAST : out std_logic; + M_AXIS_S2MM_TREADY : in std_logic; + + + -- Ports of Axi Slave Bus Interface AXI_L + AXI_L_aclk : in std_logic; + AXI_L_aresetn : in std_logic; + AXI_L_awaddr : in std_logic_vector(C_AXI_L_ADDR_WIDTH-1 downto 0); + AXI_L_awprot : in std_logic_vector(2 downto 0); + AXI_L_awvalid : in std_logic; + AXI_L_awready : out std_logic; + AXI_L_wdata : in std_logic_vector(C_AXI_L_DATA_WIDTH-1 downto 0); + AXI_L_wstrb : in std_logic_vector((C_AXI_L_DATA_WIDTH/8)-1 downto 0); + AXI_L_wvalid : in std_logic; + AXI_L_wready : out std_logic; + AXI_L_bresp : out std_logic_vector(1 downto 0); + AXI_L_bvalid : out std_logic; + AXI_L_bready : in std_logic; + AXI_L_araddr : in std_logic_vector(C_AXI_L_ADDR_WIDTH-1 downto 0); + AXI_L_arprot : in std_logic_vector(2 downto 0); + AXI_L_arvalid : in std_logic; + AXI_L_arready : out std_logic; + AXI_L_rdata : out std_logic_vector(C_AXI_L_DATA_WIDTH-1 downto 0); + AXI_L_rresp : out std_logic_vector(1 downto 0); + AXI_L_rvalid : out std_logic; + AXI_L_rready : in std_logic + ); +end d_axi_i2s_audio_v2_0; + +architecture arch_imp of d_axi_i2s_audio_v2_0 is + + -- component declaration + component d_axi_i2s_audio_v2_0_AXI_L is + generic ( + -- Stream width constant + C_AXI_STREAM_DATA_WIDTH : integer := 32; + -- audio data width constant + C_DATA_WIDTH : integer := 24; + C_S_AXI_DATA_WIDTH : integer := 32; + C_S_AXI_ADDR_WIDTH : integer := 6 + ); + port ( + -- I2S + BCLK_O : out std_logic; + BCLK_I : in std_logic; + BCLK_T : out std_logic; + LRCLK_O : out std_logic; + LRCLK_I : in std_logic; + LRCLK_T : out std_logic; + MCLK_O : out std_logic; + SDATA_I : in std_logic; + SDATA_O : out std_logic; + CLK_100MHZ_I : in std_logic; + + -- AXI4-Stream + S_AXIS_MM2S_ACLK : in std_logic; + S_AXIS_MM2S_ARESETN : in std_logic; + S_AXIS_MM2S_TREADY : out std_logic; + S_AXIS_MM2S_TDATA : in std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + S_AXIS_MM2S_TKEEP : in std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0); + S_AXIS_MM2S_TLAST : in std_logic; + S_AXIS_MM2S_TVALID : in std_logic; + + M_AXIS_S2MM_ACLK : in std_logic; + M_AXIS_S2MM_ARESETN : in std_logic; + M_AXIS_S2MM_TVALID : out std_logic; + M_AXIS_S2MM_TDATA : out std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + M_AXIS_S2MM_TKEEP : out std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0); + M_AXIS_S2MM_TLAST : out std_logic; + M_AXIS_S2MM_TREADY : in std_logic; + + S_AXI_ACLK : in std_logic; + S_AXI_ARESETN : in std_logic; + S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); + S_AXI_AWPROT : in std_logic_vector(2 downto 0); + S_AXI_AWVALID : in std_logic; + S_AXI_AWREADY : out std_logic; + S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH/8)-1 downto 0); + S_AXI_WVALID : in std_logic; + S_AXI_WREADY : out std_logic; + S_AXI_BRESP : out std_logic_vector(1 downto 0); + S_AXI_BVALID : out std_logic; + S_AXI_BREADY : in std_logic; + S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); + S_AXI_ARPROT : in std_logic_vector(2 downto 0); + S_AXI_ARVALID : in std_logic; + S_AXI_ARREADY : out std_logic; + S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + S_AXI_RRESP : out std_logic_vector(1 downto 0); + S_AXI_RVALID : out std_logic; + S_AXI_RREADY : in std_logic + ); + end component d_axi_i2s_audio_v2_0_AXI_L; + +begin + +-- Instantiation of Axi Bus Interface AXI_L +d_axi_i2s_audio_v2_0_AXI_L_inst : d_axi_i2s_audio_v2_0_AXI_L + generic map ( + C_DATA_WIDTH => C_DATA_WIDTH, + C_AXI_STREAM_DATA_WIDTH => C_AXI_STREAM_DATA_WIDTH, + C_S_AXI_DATA_WIDTH => C_AXI_L_DATA_WIDTH, + C_S_AXI_ADDR_WIDTH => C_AXI_L_ADDR_WIDTH + ) + port map ( + BCLK_O => BCLK_O, + BCLK_I => BCLK_I, + BCLK_T => BCLK_T, + LRCLK_O => LRCLK_O, + LRCLK_I => LRCLK_I, + LRCLK_T => LRCLK_T, + MCLK_O => MCLK_O, + SDATA_I => SDATA_I, + SDATA_O => SDATA_O, + CLK_100MHZ_I => CLK_100MHZ_I, + + S_AXIS_MM2S_ACLK => S_AXIS_MM2S_ACLK, + S_AXIS_MM2S_ARESETN => S_AXIS_MM2S_ARESETN, + S_AXIS_MM2S_TREADY => S_AXIS_MM2S_TREADY, + S_AXIS_MM2S_TDATA => S_AXIS_MM2S_TDATA, + S_AXIS_MM2S_TKEEP => S_AXIS_MM2S_TKEEP, + S_AXIS_MM2S_TLAST => S_AXIS_MM2S_TLAST, + S_AXIS_MM2S_TVALID => S_AXIS_MM2S_TVALID, + + M_AXIS_S2MM_ACLK => M_AXIS_S2MM_ACLK, + M_AXIS_S2MM_ARESETN => M_AXIS_S2MM_ARESETN, + M_AXIS_S2MM_TDATA => M_AXIS_S2MM_TDATA, + M_AXIS_S2MM_TLAST => M_AXIS_S2MM_TLAST, + M_AXIS_S2MM_TREADY => M_AXIS_S2MM_TREADY, + M_AXIS_S2MM_TKEEP => M_AXIS_S2MM_TKEEP, + M_AXIS_S2MM_TVALID => M_AXIS_S2MM_TVALID, + + S_AXI_ACLK => AXI_L_aclk, + S_AXI_ARESETN => AXI_L_aresetn, + S_AXI_AWADDR => AXI_L_awaddr, + S_AXI_AWPROT => AXI_L_awprot, + S_AXI_AWVALID => AXI_L_awvalid, + S_AXI_AWREADY => AXI_L_awready, + S_AXI_WDATA => AXI_L_wdata, + S_AXI_WSTRB => AXI_L_wstrb, + S_AXI_WVALID => AXI_L_wvalid, + S_AXI_WREADY => AXI_L_wready, + S_AXI_BRESP => AXI_L_bresp, + S_AXI_BVALID => AXI_L_bvalid, + S_AXI_BREADY => AXI_L_bready, + S_AXI_ARADDR => AXI_L_araddr, + S_AXI_ARPROT => AXI_L_arprot, + S_AXI_ARVALID => AXI_L_arvalid, + S_AXI_ARREADY => AXI_L_arready, + S_AXI_RDATA => AXI_L_rdata, + S_AXI_RRESP => AXI_L_rresp, + S_AXI_RVALID => AXI_L_rvalid, + S_AXI_RREADY => AXI_L_rready + ); + + -- Add user logic here + + -- User logic ends + +end arch_imp; diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio_v2_0_AXI_L.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio_v2_0_AXI_L.vhd new file mode 100644 index 0000000..779b8b7 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/d_axi_i2s_audio_v2_0_AXI_L.vhd @@ -0,0 +1,781 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +entity d_axi_i2s_audio_v2_0_AXI_L is + generic ( + -- Stream width constant + C_AXI_STREAM_DATA_WIDTH : integer := 32; + -- audio data width constant + C_DATA_WIDTH : integer := 24; + -- Width of S_AXI data bus + C_S_AXI_DATA_WIDTH : integer := 32; + -- Width of S_AXI address bus + C_S_AXI_ADDR_WIDTH : integer := 6 + ); + port ( + + -- I2S + BCLK_O : out std_logic; + BCLK_I : in std_logic; + BCLK_T : out std_logic; + LRCLK_O : out std_logic; + LRCLK_I : in std_logic; + LRCLK_T : out std_logic; + MCLK_O : out std_logic; + SDATA_I : in std_logic; + SDATA_O : out std_logic; + CLK_100MHZ_I : in std_logic; + + -- AXI4-Stream + S_AXIS_MM2S_ACLK : in std_logic; + S_AXIS_MM2S_ARESETN : in std_logic; + S_AXIS_MM2S_TREADY : out std_logic; + S_AXIS_MM2S_TDATA : in std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + S_AXIS_MM2S_TKEEP : in std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0); + S_AXIS_MM2S_TLAST : in std_logic; + S_AXIS_MM2S_TVALID : in std_logic; + + M_AXIS_S2MM_ACLK : in std_logic; + M_AXIS_S2MM_ARESETN : in std_logic; + M_AXIS_S2MM_TVALID : out std_logic; + M_AXIS_S2MM_TDATA : out std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + M_AXIS_S2MM_TKEEP : out std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0); + M_AXIS_S2MM_TLAST : out std_logic; + M_AXIS_S2MM_TREADY : in std_logic; + + -- Global Clock Signal + S_AXI_ACLK : in std_logic; + -- Global Reset Signal. This Signal is Active LOW + S_AXI_ARESETN : in std_logic; + -- Write address (issued by master, acceped by Slave) + S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); + -- Write channel Protection type. This signal indicates the + -- privilege and security level of the transaction, and whether + -- the transaction is a data access or an instruction access. + S_AXI_AWPROT : in std_logic_vector(2 downto 0); + -- Write address valid. This signal indicates that the master signaling + -- valid write address and control information. + S_AXI_AWVALID : in std_logic; + -- Write address ready. This signal indicates that the slave is ready + -- to accept an address and associated control signals. + S_AXI_AWREADY : out std_logic; + -- Write data (issued by master, acceped by Slave) + S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + -- Write strobes. This signal indicates which byte lanes hold + -- valid data. There is one write strobe bit for each eight + -- bits of the write data bus. + S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH/8)-1 downto 0); + -- Write valid. This signal indicates that valid write + -- data and strobes are available. + S_AXI_WVALID : in std_logic; + -- Write ready. This signal indicates that the slave + -- can accept the write data. + S_AXI_WREADY : out std_logic; + -- Write response. This signal indicates the status + -- of the write transaction. + S_AXI_BRESP : out std_logic_vector(1 downto 0); + -- Write response valid. This signal indicates that the channel + -- is signaling a valid write response. + S_AXI_BVALID : out std_logic; + -- Response ready. This signal indicates that the master + -- can accept a write response. + S_AXI_BREADY : in std_logic; + -- Read address (issued by master, acceped by Slave) + S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); + -- Protection type. This signal indicates the privilege + -- and security level of the transaction, and whether the + -- transaction is a data access or an instruction access. + S_AXI_ARPROT : in std_logic_vector(2 downto 0); + -- Read address valid. This signal indicates that the channel + -- is signaling valid read address and control information. + S_AXI_ARVALID : in std_logic; + -- Read address ready. This signal indicates that the slave is + -- ready to accept an address and associated control signals. + S_AXI_ARREADY : out std_logic; + -- Read data (issued by slave) + S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + -- Read response. This signal indicates the status of the + -- read transfer. + S_AXI_RRESP : out std_logic_vector(1 downto 0); + -- Read valid. This signal indicates that the channel is + -- signaling the required read data. + S_AXI_RVALID : out std_logic; + -- Read ready. This signal indicates that the master can + -- accept the read data and response information. + S_AXI_RREADY : in std_logic + ); +end d_axi_i2s_audio_v2_0_AXI_L; + +architecture arch_imp of d_axi_i2s_audio_v2_0_AXI_L is + +-- Them main control component of the I2S protocol +component i2s_rx_tx + generic( + C_DATA_WIDTH : integer := 24); + port( + CLK_I : in std_logic; + RST_I : in std_logic; + TX_RS_I : in std_logic; + RX_RS_I : in std_logic; + TX_FIFO_RST_I : in std_logic; + TX_FIFO_D_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); + TX_FIFO_WR_EN_I : in std_logic; + RX_FIFO_RST_I : in std_logic; + RX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + RX_FIFO_RD_EN_I : in std_logic; + TX_FIFO_EMPTY_O : out std_logic; + TX_FIFO_FULL_O : out std_logic; + RX_FIFO_EMPTY_O : out std_logic; + RX_FIFO_FULL_O : out std_logic; + CLK_100MHZ_I : in std_logic; + CTL_MASTER_MODE_I : in std_logic; + + -- DBG + DBG_TX_FIFO_RST_I : out std_logic; + DBG_TX_FIFO_RD_EN_I : out std_logic; + DBG_TX_FIFO_WR_EN_I : out std_logic; + DBG_TX_FIFO_EMPTY_O : out std_logic; + DBG_TX_FIFO_FULL_O : out std_logic; + DBG_TX_FIFO_D_I : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_TX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_TX_RS_I : out std_logic; + + DBG_RX_FIFO_RST_I : out std_logic; + DBG_RX_FIFO_WR_EN_I : out std_logic; + DBG_RX_FIFO_RD_EN_I : out std_logic; + DBG_RX_FIFO_FULL_O : out std_logic; + DBG_RX_FIFO_EMPTY_O : out std_logic; + DBG_RX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_RX_FIFO_D_I : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_RX_RS_I : out std_logic; + + SAMPLING_RATE_I : in std_logic_vector(3 downto 0); + BCLK_O : out std_logic; + BCLK_I : in std_logic; + BCLK_T : out std_logic; + LRCLK_O : out std_logic; + LRCLK_I : in std_logic; + LRCLK_T : out std_logic; + MCLK_O : out std_logic; + SDATA_I : in std_logic; + SDATA_O : out std_logic); + end component; + + -- the stream module which controls the reciving and transmiting of data + -- on the AXI stream + component i2s_stream + generic( + C_AXI_STREAM_DATA_WIDTH : integer := 32; + C_DATA_WIDTH : integer := 24 + + ); + port( + TX_FIFO_FULL_I : in std_logic; + RX_FIFO_EMPTY_I : in std_logic; + TX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + RX_FIFO_D_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); + NR_OF_SMPL_I : in std_logic_vector(20 downto 0); + TX_STREAM_EN_I : in std_logic; + RX_STREAM_EN_I : in std_logic; + S_AXIS_MM2S_ACLK_I : in std_logic; + S_AXIS_MM2S_ARESETN : in std_logic; + S_AXIS_MM2S_TREADY_O : out std_logic; + S_AXIS_MM2S_TDATA_I : in std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + S_AXIS_MM2S_TLAST_I : in std_logic; + S_AXIS_MM2S_TVALID_I : in std_logic; + M_AXIS_S2MM_ACLK_I : in std_logic; + M_AXIS_S2MM_ARESETN : in std_logic; + M_AXIS_S2MM_TDATA_O : out std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + M_AXIS_S2MM_TLAST_O : out std_logic; + M_AXIS_S2MM_TVALID_O : out std_logic; + M_AXIS_S2MM_TREADY_I : in std_logic; + M_AXIS_S2MM_TKEEP_O : out std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0) + ); + end component; + + -- Main AXI stream CLK divider (by 4) for generating the TX_FIFO_WR_EN_I signal + component Div_by_4 + port( + CE_I : in STD_LOGIC; + CLK_I : in STD_LOGIC; + DIV_O : out STD_LOGIC + ); + end component; + + ------------------------------------------ + -- Signals for user logic slave model s/w accessible register example + ------------------------------------------ + + -- I2S control signals + signal I2S_RST_I : std_logic; + signal TX_RS_I : std_logic; + signal RX_RS_I : std_logic; + + -- TX_FIFO siganals + signal TX_FIFO_RST_I : std_logic; + signal TX_FIFO_WR_EN_I : std_logic; + signal TX_FIFO_D_I : std_logic_vector(C_DATA_WIDTH-1 downto 0); + signal TX_FIFO_D_O : std_logic_vector(C_DATA_WIDTH-1 downto 0); + signal TX_FIFO_EMPTY_O : std_logic; + signal TX_FIFO_FULL_O : std_logic; + + -- RX_FIFO siganals + signal RX_FIFO_RST_I : std_logic; + signal RX_FIFO_RD_EN_I : std_logic; + signal RX_FIFO_D_O : std_logic_vector(C_DATA_WIDTH-1 downto 0); + signal RX_FIFO_EMPTY_O : std_logic; + signal RX_FIFO_FULL_O : std_logic; + + -- Clock control signals (BCLK/LRCLK) + signal CTL_MASTER_MODE_I : std_logic; + signal SAMPLING_RATE_I : std_logic_vector(3 downto 0); + + --Stream specific signals + signal NR_OF_SMPL_I : std_logic_vector(20 downto 0); + signal DIV_CE : std_logic; + signal TX_FIFO_WR_EN_STREAM_O : std_logic; + signal TX_STREAM_EN_I : std_logic; + signal RX_STREAM_EN_I : std_logic; + + + signal RxFifoRdEn : std_logic; + signal RxFifoRdEn_dly : std_logic; + signal TxFifoWrEn : std_logic; + signal TxFifoWrEn_dly : std_logic; + signal M_AXIS_S2MM_TVALID_int : std_logic; + + -- DBG + signal DBG_TX_FIFO_RST_I : std_logic; + signal DBG_TX_FIFO_RD_EN_I : std_logic; + signal DBG_TX_FIFO_WR_EN_I : std_logic; + signal DBG_TX_FIFO_EMPTY_O : std_logic; + signal DBG_TX_FIFO_FULL_O : std_logic; + signal DBG_TX_FIFO_D_O : std_logic_vector(C_DATA_WIDTH-1 downto 0); + signal DBG_TX_FIFO_D_I : std_logic_vector(C_DATA_WIDTH-1 downto 0); + + signal DBG_RX_FIFO_RST_I : std_logic; + signal DBG_RX_FIFO_WR_EN_I : std_logic; + signal DBG_RX_FIFO_RD_EN_I : std_logic; + signal DBG_RX_FIFO_FULL_O : std_logic; + signal DBG_RX_FIFO_EMPTY_O : std_logic; + signal DBG_RX_FIFO_D_O : std_logic_vector(C_DATA_WIDTH-1 downto 0); + signal DBG_RX_FIFO_D_I : std_logic_vector(C_DATA_WIDTH-1 downto 0); + + signal DBG_TX_RS_I : std_logic; + signal DBG_RX_RS_I : std_logic; + + -- AXI4LITE signals + signal axi_awaddr : std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); + signal axi_awready : std_logic; + signal axi_wready : std_logic; + signal axi_bresp : std_logic_vector(1 downto 0); + signal axi_bvalid : std_logic; + signal axi_araddr : std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); + signal axi_arready : std_logic; + signal axi_rdata : std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal axi_rresp : std_logic_vector(1 downto 0); + signal axi_rvalid : std_logic; + + -- Example-specific design signals + -- local parameter for addressing 32 bit / 64 bit C_S_AXI_DATA_WIDTH + -- ADDR_LSB is used for addressing 32/64 bit registers/memories + -- ADDR_LSB = 2 for 32 bits (n downto 2) + -- ADDR_LSB = 3 for 64 bits (n downto 3) + constant ADDR_LSB : integer := (C_S_AXI_DATA_WIDTH/32)+ 1; + constant OPT_MEM_ADDR_BITS : integer := 3; + ------------------------------------------------ + ---- Signals for user logic register space example + -------------------------------------------------- + ---- Number of Slave Registers 10 + signal I2S_RESET_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_TRANSFER_CONTROL_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_FIFO_CONTROL_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_DATA_IN_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_DATA_OUT_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_STATUS_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_CLOCK_CONTROL_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_PERIOD_COUNT_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal I2S_STREAM_CONTROL_REG :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal slv_reg9 :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal slv_reg_rden : std_logic; + signal slv_reg_wren : std_logic; + signal reg_data_out :std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); + signal byte_index : integer; + + attribute KEEP : string; + + attribute KEEP of DBG_TX_FIFO_RST_I : signal is "TRUE"; + attribute KEEP of DBG_TX_FIFO_WR_EN_I : signal is "TRUE"; + attribute KEEP of DBG_TX_FIFO_RD_EN_I : signal is "TRUE"; + attribute KEEP of DBG_TX_FIFO_EMPTY_O : signal is "TRUE"; + attribute KEEP of DBG_TX_FIFO_FULL_O : signal is "TRUE"; + attribute KEEP of DBG_TX_FIFO_D_I : signal is "TRUE"; + attribute KEEP of DBG_TX_FIFO_D_O : signal is "TRUE"; + + attribute KEEP of DBG_RX_FIFO_RST_I : signal is "TRUE"; + attribute KEEP of DBG_RX_FIFO_WR_EN_I : signal is "TRUE"; + attribute KEEP of DBG_RX_FIFO_RD_EN_I : signal is "TRUE"; + attribute KEEP of DBG_RX_FIFO_FULL_O : signal is "TRUE"; + attribute KEEP of DBG_RX_FIFO_EMPTY_O : signal is "TRUE"; + attribute KEEP of DBG_RX_FIFO_D_I : signal is "TRUE"; + attribute KEEP of DBG_RX_FIFO_D_O : signal is "TRUE"; + + attribute KEEP of DBG_TX_RS_I : signal is "TRUE"; + attribute KEEP of DBG_RX_RS_I : signal is "TRUE"; + +begin + -- I/O Connections assignments + + S_AXI_AWREADY <= axi_awready; + S_AXI_WREADY <= axi_wready; + S_AXI_BRESP <= axi_bresp; + S_AXI_BVALID <= axi_bvalid; + S_AXI_ARREADY <= axi_arready; + S_AXI_RDATA <= axi_rdata; + S_AXI_RRESP <= axi_rresp; + S_AXI_RVALID <= axi_rvalid; + + I2S_RST_I <= I2S_RESET_REG(0); + TX_RS_I <= I2S_TRANSFER_CONTROL_REG(0); + RX_RS_I <= I2S_TRANSFER_CONTROL_REG(1); + TX_FIFO_WR_EN_I <= not TX_FIFO_FULL_O when (RX_STREAM_EN_I = '1' and S_AXIS_MM2S_TVALID = '1') else + TxFifoWrEn when (RX_STREAM_EN_I = '0') else + '0'; + RX_FIFO_RD_EN_I <= not RX_FIFO_EMPTY_O when (TX_STREAM_EN_I = '1' and M_AXIS_S2MM_TREADY = '1' and M_AXIS_S2MM_TVALID_int = '1') else + RxFifoRdEn when (TX_STREAM_EN_I = '0') else + '0'; + TX_FIFO_RST_I <= (not S_AXIS_MM2S_ARESETN) or I2S_FIFO_CONTROL_REG(30); + RX_FIFO_RST_I <= (not M_AXIS_S2MM_ARESETN) or I2S_FIFO_CONTROL_REG(31); + TX_FIFO_D_I <= TX_FIFO_D_O when RX_STREAM_EN_I = '1' else + I2S_DATA_IN_REG(C_DATA_WIDTH-1 downto 0); + SAMPLING_RATE_I <= I2S_CLOCK_CONTROL_REG(3 downto 0); + CTL_MASTER_MODE_I <= I2S_CLOCK_CONTROL_REG(16); + NR_OF_SMPL_I <= I2S_PERIOD_COUNT_REG(20 downto 0); + TX_STREAM_EN_I <= I2S_STREAM_CONTROL_REG(0); + RX_STREAM_EN_I <= I2S_STREAM_CONTROL_REG(1); + DIV_CE <= RX_STREAM_EN_I and (S_AXIS_MM2S_TVALID and not TX_FIFO_FULL_O); + +-- DBG_RX_FIFO_D_O <= I2S_DATA_OUT_REG(C_DATA_WIDTH-1 downto 0); + + M_AXIS_S2MM_TVALID <= M_AXIS_S2MM_TVALID_int; + + RDWR_PULSE: process(S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + RxFifoRdEn_dly <= I2S_FIFO_CONTROL_REG(1); + TxFifoWrEn_dly <= I2S_FIFO_CONTROL_REG(0); + end if; + end process RDWR_PULSE; + + RxFifoRdEn <= I2S_FIFO_CONTROL_REG(1) and not RxFifoRdEn_dly; + TxFifoWrEn <= I2S_FIFO_CONTROL_REG(0) and not TxFifoWrEn_dly; + + ------------------------------------------------------------------------ + -- Instantiaton of the I2S controler + ------------------------------------------------------------------------ + Inst_I2sCtl: i2s_rx_tx + generic map( + C_DATA_WIDTH => C_DATA_WIDTH) + port map( + CLK_I => S_AXI_ACLK, + RST_I => I2S_RST_I, + TX_RS_I => TX_RS_I, + RX_RS_I => RX_RS_I, + TX_FIFO_RST_I => TX_FIFO_RST_I, + TX_FIFO_D_I => TX_FIFO_D_I, + TX_FIFO_WR_EN_I => TX_FIFO_WR_EN_I, + RX_FIFO_RST_I => RX_FIFO_RST_I, + RX_FIFO_D_O => RX_FIFO_D_O, + RX_FIFO_RD_EN_I => RX_FIFO_RD_EN_I, + TX_FIFO_EMPTY_O => TX_FIFO_EMPTY_O, + TX_FIFO_FULL_O => TX_FIFO_FULL_O, + RX_FIFO_EMPTY_O => RX_FIFO_EMPTY_O, + RX_FIFO_FULL_O => RX_FIFO_FULL_O, + CLK_100MHZ_I => CLK_100MHZ_I, + CTL_MASTER_MODE_I => CTL_MASTER_MODE_I, + + -- DBG + DBG_TX_FIFO_RST_I => DBG_TX_FIFO_RST_I, + DBG_TX_FIFO_RD_EN_I => DBG_TX_FIFO_RD_EN_I, + DBG_TX_FIFO_WR_EN_I => DBG_TX_FIFO_WR_EN_I, + DBG_TX_FIFO_EMPTY_O => DBG_TX_FIFO_EMPTY_O, + DBG_TX_FIFO_FULL_O => DBG_TX_FIFO_FULL_O, + DBG_TX_FIFO_D_O => DBG_TX_FIFO_D_O, + DBG_TX_FIFO_D_I => DBG_TX_FIFO_D_I, + DBG_TX_RS_I => DBG_TX_RS_I, + + DBG_RX_FIFO_RST_I => DBG_RX_FIFO_RST_I, + DBG_RX_FIFO_WR_EN_I => DBG_RX_FIFO_WR_EN_I, + DBG_RX_FIFO_RD_EN_I => DBG_RX_FIFO_RD_EN_I, + DBG_RX_FIFO_FULL_O => DBG_RX_FIFO_FULL_O, + DBG_RX_FIFO_EMPTY_O => DBG_RX_FIFO_EMPTY_O, + DBG_RX_FIFO_D_I => DBG_RX_FIFO_D_I, + DBG_RX_FIFO_D_O => DBG_RX_FIFO_D_O, + DBG_RX_RS_I => DBG_RX_RS_I, + + SAMPLING_RATE_I => SAMPLING_RATE_I, + BCLK_O => BCLK_O, + BCLK_I => BCLK_I, + BCLK_T => BCLK_T, + LRCLK_O => LRCLK_O, + LRCLK_I => LRCLK_I, + LRCLK_T => LRCLK_T, + MCLK_O => MCLK_O, + SDATA_I => SDATA_I, + SDATA_O => SDATA_O); + + + ------------------------------------------------------------------------ + -- Instantiaton of the AXI stream controler + ------------------------------------------------------------------------ + Inst_I2sStream: i2s_stream + generic map( + C_AXI_STREAM_DATA_WIDTH => C_AXI_STREAM_DATA_WIDTH, + C_DATA_WIDTH => C_DATA_WIDTH + ) + port map( + TX_FIFO_FULL_I => TX_FIFO_FULL_O, + RX_FIFO_EMPTY_I => RX_FIFO_EMPTY_O, + TX_FIFO_D_O => TX_FIFO_D_O, + RX_FIFO_D_I => RX_FIFO_D_O, + NR_OF_SMPL_I => NR_OF_SMPL_I, + TX_STREAM_EN_I => TX_STREAM_EN_I, + RX_STREAM_EN_I => RX_STREAM_EN_I, + S_AXIS_MM2S_ACLK_I => S_AXIS_MM2S_ACLK, + S_AXIS_MM2S_ARESETN => S_AXIS_MM2S_ARESETN, + S_AXIS_MM2S_TREADY_O => S_AXIS_MM2S_TREADY, + S_AXIS_MM2S_TDATA_I => S_AXIS_MM2S_TDATA, + S_AXIS_MM2S_TLAST_I => S_AXIS_MM2S_TLAST, + S_AXIS_MM2S_TVALID_I => S_AXIS_MM2S_TVALID, + M_AXIS_S2MM_ACLK_I => M_AXIS_S2MM_ACLK, + M_AXIS_S2MM_ARESETN => M_AXIS_S2MM_ARESETN, + M_AXIS_S2MM_TDATA_O => M_AXIS_S2MM_TDATA, + M_AXIS_S2MM_TLAST_O => M_AXIS_S2MM_TLAST, + M_AXIS_S2MM_TREADY_I => M_AXIS_S2MM_TREADY, + M_AXIS_S2MM_TKEEP_O => M_AXIS_S2MM_TKEEP, + M_AXIS_S2MM_TVALID_O => M_AXIS_S2MM_TVALID_int + ); + + -- Implement axi_awready generation + -- axi_awready is asserted for one S_AXI_ACLK clock cycle when both + -- S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_awready is + -- de-asserted when reset is low. + + process (S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + axi_awready <= '0'; + else + if (axi_awready = '0' and S_AXI_AWVALID = '1' and S_AXI_WVALID = '1') then + -- slave is ready to accept write address when + -- there is a valid write address and write data + -- on the write address and data bus. This design + -- expects no outstanding transactions. + axi_awready <= '1'; + else + axi_awready <= '0'; + end if; + end if; + end if; + end process; + + -- Implement axi_awaddr latching + -- This process is used to latch the address when both + -- S_AXI_AWVALID and S_AXI_WVALID are valid. + + process (S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + axi_awaddr <= (others => '0'); + else + if (axi_awready = '0' and S_AXI_AWVALID = '1' and S_AXI_WVALID = '1') then + -- Write Address latching + axi_awaddr <= S_AXI_AWADDR; + end if; + end if; + end if; + end process; + + -- Implement axi_wready generation + -- axi_wready is asserted for one S_AXI_ACLK clock cycle when both + -- S_AXI_AWVALID and S_AXI_WVALID are asserted. axi_wready is + -- de-asserted when reset is low. + + process (S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + axi_wready <= '0'; + else + if (axi_wready = '0' and S_AXI_WVALID = '1' and S_AXI_AWVALID = '1') then + -- slave is ready to accept write data when + -- there is a valid write address and write data + -- on the write address and data bus. This design + -- expects no outstanding transactions. + axi_wready <= '1'; + else + axi_wready <= '0'; + end if; + end if; + end if; + end process; + + -- Implement memory mapped register select and write logic generation + -- The write data is accepted and written to memory mapped registers when + -- axi_awready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. Write strobes are used to + -- select byte enables of slave registers while writing. + -- These registers are cleared when reset (active low) is applied. + -- Slave register write enable is asserted when valid address and data are available + -- and the slave is ready to accept the write address and write data. + slv_reg_wren <= axi_wready and S_AXI_WVALID and axi_awready and S_AXI_AWVALID ; + + process (S_AXI_ACLK) + variable loc_addr :std_logic_vector(OPT_MEM_ADDR_BITS downto 0); + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + I2S_RESET_REG <= (others => '0'); + I2S_TRANSFER_CONTROL_REG <= (others => '0'); + I2S_FIFO_CONTROL_REG <= (others => '0'); + I2S_DATA_IN_REG <= (others => '0'); + I2S_DATA_OUT_REG <= (others => '0'); + I2S_STATUS_REG <= (others => '0'); + I2S_CLOCK_CONTROL_REG <= (others => '0'); + I2S_PERIOD_COUNT_REG <= (others => '0'); + I2S_STREAM_CONTROL_REG <= (others => '0'); + slv_reg9 <= (others => '0'); + else + loc_addr := axi_awaddr(ADDR_LSB + OPT_MEM_ADDR_BITS downto ADDR_LSB); + if (slv_reg_wren = '1') then + case loc_addr is + when b"0000" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 0 + I2S_RESET_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"0001" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 1 + I2S_TRANSFER_CONTROL_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"0010" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 2 + I2S_FIFO_CONTROL_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"0011" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 3 + I2S_DATA_IN_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"0110" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 6 + I2S_CLOCK_CONTROL_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"0111" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 7 + I2S_PERIOD_COUNT_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"1000" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 8 + I2S_STREAM_CONTROL_REG(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when b"1001" => + for byte_index in 0 to (C_S_AXI_DATA_WIDTH/8-1) loop + if ( S_AXI_WSTRB(byte_index) = '1' ) then + -- Respective byte enables are asserted as per write strobes + -- slave registor 9 + slv_reg9(byte_index*8+7 downto byte_index*8) <= S_AXI_WDATA(byte_index*8+7 downto byte_index*8); + end if; + end loop; + when others => + I2S_DATA_OUT_REG(31 downto 31-C_DATA_WIDTH) <= (others => '0'); + I2S_DATA_OUT_REG(C_DATA_WIDTH-1 downto 0) <= RX_FIFO_D_O; + I2S_STATUS_REG(0) <= TX_FIFO_EMPTY_O; + I2S_STATUS_REG(1) <= TX_FIFO_FULL_O; + I2S_STATUS_REG(15 downto 2) <= (others => '0'); + I2S_STATUS_REG(16) <= RX_FIFO_EMPTY_O; + I2S_STATUS_REG(17) <= RX_FIFO_FULL_O; + I2S_STATUS_REG(31 downto 18) <= (others => '0'); + end case; + end if; + I2S_DATA_OUT_REG(31 downto 31-C_DATA_WIDTH) <= (others => '0'); + I2S_DATA_OUT_REG(C_DATA_WIDTH-1 downto 0) <= RX_FIFO_D_O; + I2S_STATUS_REG(0) <= TX_FIFO_EMPTY_O; + I2S_STATUS_REG(1) <= TX_FIFO_FULL_O; + I2S_STATUS_REG(15 downto 2) <= (others => '0'); + I2S_STATUS_REG(16) <= RX_FIFO_EMPTY_O; + I2S_STATUS_REG(17) <= RX_FIFO_FULL_O; + I2S_STATUS_REG(31 downto 18) <= (others => '0'); + end if; + end if; + end process; + + -- Implement write response logic generation + -- The write response and response valid signals are asserted by the slave + -- when axi_wready, S_AXI_WVALID, axi_wready and S_AXI_WVALID are asserted. + -- This marks the acceptance of address and indicates the status of + -- write transaction. + + process (S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + axi_bvalid <= '0'; + axi_bresp <= "00"; --need to work more on the responses + else + if (axi_awready = '1' and S_AXI_AWVALID = '1' and axi_wready = '1' and S_AXI_WVALID = '1' and axi_bvalid = '0' ) then + axi_bvalid <= '1'; + axi_bresp <= "00"; + elsif (S_AXI_BREADY = '1' and axi_bvalid = '1') then --check if bready is asserted while bvalid is high) + axi_bvalid <= '0'; -- (there is a possibility that bready is always asserted high) + end if; + end if; + end if; + end process; + + -- Implement axi_arready generation + -- axi_arready is asserted for one S_AXI_ACLK clock cycle when + -- S_AXI_ARVALID is asserted. axi_awready is + -- de-asserted when reset (active low) is asserted. + -- The read address is also latched when S_AXI_ARVALID is + -- asserted. axi_araddr is reset to zero on reset assertion. + + process (S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + axi_arready <= '0'; + axi_araddr <= (others => '1'); + else + if (axi_arready = '0' and S_AXI_ARVALID = '1') then + -- indicates that the slave has acceped the valid read address + axi_arready <= '1'; + -- Read Address latching + axi_araddr <= S_AXI_ARADDR; + else + axi_arready <= '0'; + end if; + end if; + end if; + end process; + + -- Implement axi_arvalid generation + -- axi_rvalid is asserted for one S_AXI_ACLK clock cycle when both + -- S_AXI_ARVALID and axi_arready are asserted. The slave registers + -- data are available on the axi_rdata bus at this instance. The + -- assertion of axi_rvalid marks the validity of read data on the + -- bus and axi_rresp indicates the status of read transaction.axi_rvalid + -- is deasserted on reset (active low). axi_rresp and axi_rdata are + -- cleared to zero on reset (active low). + process (S_AXI_ACLK) + begin + if rising_edge(S_AXI_ACLK) then + if S_AXI_ARESETN = '0' then + axi_rvalid <= '0'; + axi_rresp <= "00"; + else + if (axi_arready = '1' and S_AXI_ARVALID = '1' and axi_rvalid = '0') then + -- Valid read data is available at the read data bus + axi_rvalid <= '1'; + axi_rresp <= "00"; -- 'OKAY' response + elsif (axi_rvalid = '1' and S_AXI_RREADY = '1') then + -- Read data is accepted by the master + axi_rvalid <= '0'; + end if; + end if; + end if; + end process; + + -- Implement memory mapped register select and read logic generation + -- Slave register read enable is asserted when valid address is available + -- and the slave is ready to accept the read address. + slv_reg_rden <= axi_arready and S_AXI_ARVALID and (not axi_rvalid) ; + + process (I2S_RESET_REG, I2S_TRANSFER_CONTROL_REG, I2S_FIFO_CONTROL_REG, I2S_DATA_IN_REG, I2S_DATA_OUT_REG, I2S_CLOCK_CONTROL_REG, I2S_STATUS_REG, I2S_PERIOD_COUNT_REG, I2S_STREAM_CONTROL_REG, slv_reg9, axi_araddr, S_AXI_ARESETN, slv_reg_rden) + variable loc_addr :std_logic_vector(OPT_MEM_ADDR_BITS downto 0); + begin + if S_AXI_ARESETN = '0' then + reg_data_out <= (others => '1'); + else + -- Address decoding for reading registers + loc_addr := axi_araddr(ADDR_LSB + OPT_MEM_ADDR_BITS downto ADDR_LSB); + case loc_addr is + when b"0000" => + reg_data_out <= I2S_RESET_REG; + when b"0001" => + reg_data_out <= I2S_TRANSFER_CONTROL_REG; + when b"0010" => + reg_data_out <= I2S_FIFO_CONTROL_REG; + when b"0011" => + reg_data_out <= I2S_DATA_IN_REG; + when b"0100" => + reg_data_out <= I2S_DATA_OUT_REG; + when b"0101" => + reg_data_out <= I2S_STATUS_REG; + when b"0110" => + reg_data_out <= I2S_CLOCK_CONTROL_REG; + when b"0111" => + reg_data_out <= I2S_PERIOD_COUNT_REG; + when b"1000" => + reg_data_out <= I2S_STREAM_CONTROL_REG; + when b"1001" => + reg_data_out <= slv_reg9; + when others => + reg_data_out <= (others => '0'); + end case; + end if; + end process; + + -- Output register or memory read data + process( S_AXI_ACLK ) is + begin + if (rising_edge (S_AXI_ACLK)) then + if ( S_AXI_ARESETN = '0' ) then + axi_rdata <= (others => '0'); + else + if (slv_reg_rden = '1') then + -- When there is a valid read address (S_AXI_ARVALID) with + -- acceptance of read address by the slave (axi_arready), + -- output the read dada + -- Read address mux + axi_rdata <= reg_data_out; -- register read data + end if; + end if; + end if; + end process; + + + -- Add user logic here + + -- User logic ends + +end arch_imp; diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/fifo_32/fifo_32.xci b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/fifo_32/fifo_32.xci new file mode 100644 index 0000000..b688cf6 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/fifo_32/fifo_32.xci @@ -0,0 +1,395 @@ + + + xilinx.com + xci + unknown + 1.0 + + + fifo_32 + + + fifo_32 + Independent_Clocks_Block_RAM + 2 + 2 + Native + Standard_FIFO + false + 24 + 4096 + 24 + 4096 + false + false + true + true + Asynchronous_Reset + 1 + true + 0 + false + false + false + false + Active_High + false + Active_High + false + Active_High + false + Active_High + false + false + false + false + false + 12 + false + 12 + false + 12 + false + 1 + 1 + No_Programmable_Full_Threshold + 4093 + 4092 + No_Programmable_Empty_Threshold + 2 + 3 + AXI4 + Common_Clock + false + Slave_Interface_Clock_Enable + READ_WRITE + 0 + 32 + 64 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 4 + true + false + false + 1 + false + 1 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 16 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 1024 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 16 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 16 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 1024 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 1024 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + Fully_Registered + Fully_Registered + Fully_Registered + Fully_Registered + Fully_Registered + Fully_Registered + false + Active_High + false + Active_High + false + false + false + false + false + false + false + false + 0 + 0 + 12 + BlankString + 24 + 0 + 24 + 0 + artix7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 1 + BlankString + 0 + 0 + 1 + 0 + 4kx9 + 2 + 3 + 0 + 4093 + 4092 + 0 + 12 + 4096 + 1 + 12 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 12 + 4096 + 1 + 12 + 1 + 1 + 1 + 0 + 2 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 32 + 64 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 8 + 1 + 1 + 4 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 512x36 + 1kx36 + 512x36 + 512x36 + 1kx36 + 1kx18 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 32 + 64 + 2 + 32 + 64 + 1 + 16 + 1024 + 16 + 16 + 1024 + 1024 + 4 + 10 + 4 + 4 + 10 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1023 + 1023 + 1023 + 1023 + 1023 + 1023 + 0 + 0 + 0 + 0 + 0 + 0 + 1022 + 1022 + 1022 + 1022 + 1022 + 1022 + 0 + 0 + 0 + 0 + 0 + 0 + artix7 + xc7a200t + sbg484 + -1 + C + + VERILOG + MIXED + TRUE + TRUE + + TRUE + 2014.3.1 + 2 + OUT_OF_CONTEXT + + . + . + + + + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/fifo_4/fifo_4.xci b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/fifo_4/fifo_4.xci new file mode 100644 index 0000000..55742cd --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/fifo_4/fifo_4.xci @@ -0,0 +1,395 @@ + + + xilinx.com + xci + unknown + 1.0 + + + fifo_4 + + + fifo_4 + Independent_Clocks_Block_RAM + 2 + 2 + Native + Standard_FIFO + false + 4 + 16 + 4 + 16 + false + false + true + true + Asynchronous_Reset + 1 + true + 0 + false + false + false + false + Active_High + false + Active_High + false + Active_High + false + Active_High + false + false + false + false + false + 4 + false + 4 + false + 4 + false + 1 + 1 + No_Programmable_Full_Threshold + 13 + 12 + No_Programmable_Empty_Threshold + 2 + 3 + AXI4 + Common_Clock + false + Slave_Interface_Clock_Enable + READ_WRITE + 0 + 32 + 64 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 4 + true + false + false + 1 + false + 1 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 16 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 1024 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 16 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 16 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 1024 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + FIFO + Common_Clock_Block_RAM + Data_FIFO + false + false + false + 1024 + false + No_Programmable_Full_Threshold + 1023 + No_Programmable_Empty_Threshold + 1022 + Fully_Registered + Fully_Registered + Fully_Registered + Fully_Registered + Fully_Registered + Fully_Registered + false + Active_High + false + Active_High + false + false + false + false + false + false + false + false + 0 + 0 + 4 + BlankString + 4 + 0 + 4 + 0 + artix7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 1 + BlankString + 0 + 0 + 1 + 0 + 512x36 + 2 + 3 + 0 + 13 + 12 + 0 + 4 + 16 + 1 + 4 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 16 + 1 + 4 + 1 + 1 + 1 + 0 + 2 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 32 + 64 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 8 + 1 + 1 + 4 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 512x36 + 1kx36 + 512x36 + 512x36 + 1kx36 + 1kx18 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 32 + 64 + 2 + 32 + 64 + 1 + 16 + 1024 + 16 + 16 + 1024 + 1024 + 4 + 10 + 4 + 4 + 10 + 10 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1023 + 1023 + 1023 + 1023 + 1023 + 1023 + 0 + 0 + 0 + 0 + 0 + 0 + 1022 + 1022 + 1022 + 1022 + 1022 + 1022 + 0 + 0 + 0 + 0 + 0 + 0 + artix7 + xc7a200t + sbg484 + -1 + C + + VERILOG + MIXED + TRUE + TRUE + + TRUE + 2014.3.1 + 2 + OUT_OF_CONTEXT + + . + . + + + + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_ctl.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_ctl.vhd new file mode 100644 index 0000000..7a5bb81 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_ctl.vhd @@ -0,0 +1,325 @@ +------------------------------------------------------------------------------- +-- +-- COPYRIGHT (C) 2012, Digilent RO. All rights reserved +-- +------------------------------------------------------------------------------- +-- FILE NAME : i2s_ctl.vhd +-- MODULE NAME : I2S Control +-- AUTHOR : Mihaita Nagy +-- AUTHOR'S EMAIL : mihaita.nagy@digilent.ro +------------------------------------------------------------------------------- +-- REVISION HISTORY +-- VERSION DATE AUTHOR DESCRIPTION +-- 1.0 2012-25-01 Mihaita Nagy Created +-- 2.0 2012-02-04 Mihaita Nagy Remade the i2s_transmitter.vhd and +-- i2s_receiver.vhd into one new module. +-- 3.0 2014-12-02 HegbeliC Implemented edge detection for the +-- master mode and the division rate +-- for the different sampling rates +------------------------------------------------------------------------------- +-- KEYWORDS : I2S +------------------------------------------------------------------------------- +-- DESCRIPTION : This module implements the I2S transmitter and receiver +-- interface, with a 32-bit Stereo data transmission. Parameter +-- C_DATA_WIDTH sets the width of the data to be transmitted, +-- with a maximum value of 32 bits. If a smaller width size is +-- used (i.e. 24) than the remaining bits that needs to be +-- transmitted to complete the 32-bit length, are automaticaly +-- set to 0. +------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +------------------------------------------------------------------------ +-- Module Declaration +------------------------------------------------------------------------ +entity i2s_ctl is + generic ( + -- Width of one Slot (24/20/18/16-bit wide) + C_DATA_WIDTH: integer := 24 + ); + port ( + CLK_I : in std_logic; -- System clock (100 MHz) + RST_I : in std_logic; -- System reset + EN_TX_I : in std_logic; -- Transmit enable + EN_RX_I : in std_logic; -- Receive enable + FS_I : in std_logic_vector(3 downto 0); -- Sampling rate slector + MM_I : in std_logic; -- Audio controler Master Mode delcetor + D_L_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); -- Left channel data + D_R_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); -- Right channel data + OE_L_O : out std_logic; -- Left channel data output enable pulse + OE_R_O : out std_logic; -- Right channel data output enable pulse + WE_L_O : out std_logic; -- Left channel data write enable pulse + WE_R_O : out std_logic; -- Right channel data write enable pulse + D_L_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); -- Left channel data + D_R_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); -- Right channel data + BCLK_O : out std_logic; -- serial CLK + BCLK_I : in std_logic; -- serial CLK + BCLK_T : out std_logic; -- serial CLK + LRCLK_O : out std_logic; -- channel CLK + LRCLK_I : in std_logic; -- channel CLK + LRCLK_T : out std_logic; -- channel CLK + SDATA_O : out std_logic; -- Output serial data + SDATA_I : in std_logic -- Input serial data + ); +end i2s_ctl; + +architecture Behavioral of i2s_ctl is + +------------------------------------------------------------------------ +-- Signal Declarations +------------------------------------------------------------------------ +-- Counter for the clock divider +signal Cnt_Bclk : integer range 0 to 31; + +-- Counter for the L/R clock divider +signal Cnt_Lrclk : integer range 0 to 31; + +-- Rising and Falling edge impulses of the serial clock +signal BCLK_Fall, BCLK_Rise : std_logic; +signal BCLK_Fall_int, BCLK_Rise_int : std_logic; +signal BCLK_Fall_shot, BCLK_Rise_shot : std_logic; + +-- Synchronisation signals for Rising and Falling edge +signal Q1R, Q2R, Q3R : std_logic; +signal Q1F, Q2F, Q3F : std_logic; + +-- Internal synchronous BCLK signal +signal BCLK_int : std_logic; + +-- Internal synchronous LRCLK signal +signal LRCLK_int : std_logic; +signal LRCLK : std_logic; + +-- +signal Data_Out_int : std_logic_vector(31 downto 0); + +-- +signal Data_In_int : std_logic_vector(31 downto 0); + +-- +signal D_L_O_int : std_logic_vector(C_DATA_WIDTH-1 downto 0); + +-- +signal D_R_O_int : std_logic_vector(C_DATA_WIDTH-1 downto 0); + +--Internal synchronous OE signals +signal OE_R_int, OE_L_int : std_logic; + +--Internal synchronous WE signals +signal WE_R_int, WE_L_int : std_logic; + +-- Division rate for the BCLK and LRCLK +signal DIV_RATE : natural := 4; + +------------------------------------------------------------------------ +-- Module Implementation +------------------------------------------------------------------------ + +begin + +------------------------------------------------------------------------ +-- Sampling frequency and data width decoder (DIV_RATE, C_DATA_WIDTH) +------------------------------------------------------------------------ + + BIT_FS: process(CLK_I) + begin + if rising_edge(CLK_I) then + case (FS_I) is + when x"0" => DIV_RATE <= 24; + when x"1" => DIV_RATE <= 16; + when x"2" => DIV_RATE <= 12; + when x"3" => DIV_RATE <= 8; + when x"4" => DIV_RATE <= 6; + when x"5" => DIV_RATE <= 4; + when x"6" => DIV_RATE <= 2; + when others => DIV_RATE <= 4; + end case; + end if; + end process; + +------------------------------------------------------------------------ +-- Serial clock generator (BCLK_O, BCLK_Fall, BCLK_Rise) +------------------------------------------------------------------------ + SER_CLK: process(CLK_I) + begin + if rising_edge(CLK_I) then + if RST_I = '1' then + Cnt_Bclk <= 0; + BCLK_int <= '0'; + elsif Cnt_Bclk = ((DIV_RATE/2)-1) then + Cnt_Bclk <= 0; + BCLK_int <= not BCLK_int; + else + Cnt_Bclk <= Cnt_Bclk + 1; + end if; + end if; + end process SER_CLK; + + -- Rising and Falling edges when in Slave mode + BCLK_Fall_int <= '1' when Cnt_Bclk = ((DIV_RATE/2)-1) and BCLK_int = '1' and (EN_RX_I = '1' or EN_TX_I = '1') else '0'; + BCLK_Rise_int <= '1' when Cnt_Bclk = ((DIV_RATE/2)-1) and BCLK_int = '0' and (EN_RX_I = '1' or EN_TX_I = '1') else '0'; + + -- Rising edge detection when in Master Mode (BCLK_I active) + OneShotRise: process(CLK_I) + begin + if rising_edge(CLK_I) then + Q1R<=BCLK_I; + Q2R<=Q1R; + Q3R<=Q2R; + end if; + end process; + + BCLK_Rise_shot <= BCLK_I and (not Q3R); + + -- Falling edge detection when in Master Mode (BCLK_I active) + OneShotFall: process(CLK_I) + begin + if rising_edge(CLK_I) then + Q1F<=not BCLK_I; + Q2F<=Q1F; + Q3F<=Q2F; + end if; + end process; + + BCLK_Fall_shot <= not BCLK_I and (not Q3F); + + -- Falling edge selection with respect to Master Mode bit + BCLK_Fall <= BCLK_Fall_int when MM_I = '0' else + BCLK_Fall_shot; + + -- Risesing edge selection with respect to Master Mode bit + BCLK_Rise <= BCLK_Rise_int when MM_I = '0' else + BCLK_Rise_shot; + + -- Serial clock output + BCLK_O <= BCLK_int when EN_RX_I = '1' or EN_TX_I = '1' else '1'; + BCLK_T <= MM_I; + +------------------------------------------------------------------------ +-- Left/Right clock generator (LRCLK_O, LRCLK_Pls) +------------------------------------------------------------------------ + LRCLK_GEN: process(CLK_I) + begin + if rising_edge(CLK_I) then + if RST_I = '1' then + Cnt_Lrclk <= 0; + LRCLK <= '0'; -- Left channel active by default + elsif BCLK_Fall = '1' then + if Cnt_Lrclk = 31 then -- half of frame (64 bits) + Cnt_Lrclk <= 0; + LRCLK <= not LRCLK; + else + Cnt_Lrclk <= Cnt_Lrclk + 1; + end if; + end if; + end if; + end process LRCLK_GEN; + + -- L/R clock output + LRCLK_O <= LRCLK when EN_TX_I = '1' or EN_RX_I = '1' else '0'; + LRCLK_int <= LRCLK when MM_I = '0' else LRCLK_I; + LRCLK_T <= MM_I; + +------------------------------------------------------------------------ +-- Load in paralled data, shift out serial data (SDATA_O) +------------------------------------------------------------------------ + SER_DATA_O: process(CLK_I) + begin + if rising_edge(CLK_I) then + if RST_I = '1' then + Data_Out_int(31) <= '0'; + Data_Out_int(30 downto 31-C_DATA_WIDTH) <= D_L_I; -- Left channel data by default + Data_Out_int(30-C_DATA_WIDTH downto 0) <= (others => '0'); + elsif Cnt_Lrclk = 0 and BCLK_Rise = '1' then -- load par. data + if LRCLK_int = '1' then + Data_Out_int(31) <= '0'; + Data_Out_int(30 downto 31-C_DATA_WIDTH) <= D_R_I; + Data_Out_int(30-C_DATA_WIDTH downto 0) <= (others => '0'); + else + Data_Out_int(31) <= '0'; + Data_Out_int(30 downto 31-C_DATA_WIDTH) <= D_L_I; + Data_Out_int(30-C_DATA_WIDTH downto 0) <= (others => '0'); + end if; + elsif BCLK_Fall = '1' then -- shift out ser. data + Data_Out_int <= Data_Out_int(30 downto 0) & '0'; + end if; + end if; + end process SER_DATA_O; + + -- Serial data output + SDATA_O <= Data_Out_int(31) when EN_TX_I = '1' else '0'; + +------------------------------------------------------------------------ +-- Shift in serial data, load out parallel data (SDATA_I) +------------------------------------------------------------------------ + SER_DATA_I: process(CLK_I) + begin + if rising_edge(CLK_I) then + if RST_I = '1' then + Data_In_int <= (others => '0'); + D_L_O_int <= (others => '0'); + D_R_O_int <= (others => '0'); + elsif Cnt_Lrclk = 0 and BCLK_Fall = '1' then -- load par. data + if LRCLK_int = '1' then + D_L_O_int <= Data_In_int(31 downto 32-C_DATA_WIDTH); + Data_In_int <= (others => '0'); + else + D_R_O_int <= Data_In_int(31 downto 32-C_DATA_WIDTH); + Data_In_int <= (others => '0'); + end if; + elsif BCLK_Rise = '1' then -- shift in ser. data + Data_In_int <= Data_In_int(30 downto 0) & SDATA_I; + end if; + end if; + end process SER_DATA_I; + + D_L_O <= D_L_O_int; + D_R_O <= D_R_O_int; + +------------------------------------------------------------------------ +-- Output Enable signals (for FIFO) +------------------------------------------------------------------------ + OE_GEN: process(CLK_I) + begin + if rising_edge(CLK_I) then + if Cnt_Lrclk = 31 and BCLK_Fall = '1' then + if LRCLK_int = '1' then -- Right channel + OE_R_int <= '1'; + else -- Left channel + OE_L_int <= '1'; + end if; + else + OE_R_int <= '0'; + OE_L_int <= '0'; + end if; + end if; + end process OE_GEN; + + OE_R_O <= OE_R_int when EN_TX_I = '1' else '0'; + OE_L_O <= OE_L_int when EN_TX_I = '1' else '0'; + +------------------------------------------------------------------------ +-- Write Enable signals (for FIFO) +------------------------------------------------------------------------ + WE_GEN: process(CLK_I) + begin + if rising_edge(CLK_I) then + if Cnt_Lrclk = 1 and BCLK_Rise = '1' then + if LRCLK_int = '1' then -- Right channel + WE_R_int <= '1'; + else -- Left channel + WE_L_int <= '1'; + end if; + else + WE_R_int <= '0'; + WE_L_int <= '0'; + end if; + end if; + end process WE_GEN; + + WE_R_O <= WE_R_int when EN_RX_I = '1' else '0'; + WE_L_O <= WE_L_int when EN_RX_I = '1' else '0'; + +end Behavioral; + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_rx_tx.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_rx_tx.vhd new file mode 100644 index 0000000..429c9e8 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_rx_tx.vhd @@ -0,0 +1,436 @@ +------------------------------------------------------------------------------- +-- +-- COPYRIGHT (C) 2012, Digilent RO. All rights reserved +-- +------------------------------------------------------------------------------- +-- FILE NAME : i2s_rx_tx.vhd +-- MODULE NAME : I2S Tranceiver +-- AUTHOR : Mihaita Nagy +-- AUTHOR'S EMAIL : mihaita.nagy@digilent.ro +------------------------------------------------------------------------------- +-- REVISION HISTORY +-- VERSION DATE AUTHOR DESCRIPTION +-- 1.0 2012-25-01 MihaitaN Created +-- 2.0 ? MihaitaN ? +-- 3.0 2014-12-02 HegbeliC Integration of the MCLK and Master Mode +------------------------------------------------------------------------------- +-- KEYWORDS : I2S +------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +library unisim; +use unisim.VComponents.all; + +------------------------------------------------------------------------ +-- Module Declaration +------------------------------------------------------------------------ +entity i2s_rx_tx is + generic ( + -- Width of left/right channel data buses + C_DATA_WIDTH : integer := 24 + ); + port ( + -- Global signals + CLK_I : in std_logic; + RST_I : in std_logic; + + -- Control signals + TX_RS_I : in std_logic; + RX_RS_I : in std_logic; + + -- CLK input for MCLK rendering + CLK_100MHZ_I : in std_logic; + + -- Control signal for setting the sampeling rate + SAMPLING_RATE_I : in std_logic_vector (3 downto 0); + + -- Flag for when the Controller is in master mode + CTL_MASTER_MODE_I : in std_logic; + + -- DBG + DBG_TX_FIFO_RST_I : out std_logic; + DBG_TX_FIFO_WR_EN_I : out std_logic; + DBG_TX_FIFO_RD_EN_I : out std_logic; + DBG_TX_FIFO_EMPTY_O : out std_logic; + DBG_TX_FIFO_FULL_O : out std_logic; + DBG_TX_FIFO_D_I : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_TX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_TX_RS_I : out std_logic; + + DBG_RX_FIFO_RST_I : out std_logic; + DBG_RX_FIFO_WR_EN_I : out std_logic; + DBG_RX_FIFO_RD_EN_I : out std_logic; + DBG_RX_FIFO_FULL_O : out std_logic; + DBG_RX_FIFO_EMPTY_O : out std_logic; + DBG_RX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_RX_FIFO_D_I : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + DBG_RX_RS_I : out std_logic; + + -- Tx FIFO Control signals + TX_FIFO_RST_I : in std_logic; + TX_FIFO_D_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); + TX_FIFO_WR_EN_I : in std_logic; + + -- Rx FIFO Control signals + RX_FIFO_RST_I : in std_logic; + RX_FIFO_RD_EN_I : in std_logic; + RX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + + -- Tx FIFO Flags + TX_FIFO_EMPTY_O : out std_logic; + TX_FIFO_FULL_O : out std_logic; + + -- Rx FIFO Flags + RX_FIFO_EMPTY_O : out std_logic; + RX_FIFO_FULL_O : out std_logic; + + -- I2S interface signals + BCLK_O : out std_logic; + BCLK_I : in std_logic; + BCLK_T : out std_logic; + LRCLK_O : out std_logic; + LRCLK_I : in std_logic; + LRCLK_T : out std_logic; + MCLK_O : out std_logic; + SDATA_I : in std_logic; + SDATA_O : out std_logic + ); +end i2s_rx_tx; + +architecture Behavioral of i2s_rx_tx is + +------------------------------------------------------------------------ +-- Signal Declarations +------------------------------------------------------------------------ +signal StartTransaction : std_logic; +signal StopTransaction : std_logic; +signal RxEn : std_logic; +signal TxEn : std_logic; +signal LRCLK_Int : std_logic; +signal LR : std_logic; +signal Rnw : std_logic; +signal RxFifoDataIn : std_logic_vector(C_DATA_WIDTH-1 downto 0); +signal RxFifoDataInL : std_logic_vector(C_DATA_WIDTH-1 downto 0); +signal RxFifoDataInR : std_logic_vector(C_DATA_WIDTH-1 downto 0); +signal RxFifoWrEn : std_logic; +signal RxFifoWrEnL : std_logic; +signal RxFifoWrEnR : std_logic; +signal TxFifoDataOut : std_logic_vector(C_DATA_WIDTH-1 downto 0); +signal TxFifoRdEn : std_logic; +signal TxFifoRdEnL : std_logic; +signal TxFifoRdEnR : std_logic; +signal TxFifoEmpty : std_logic; +signal RxFifoFull : std_logic; +signal SamplingFrequncy : std_logic_vector(3 downto 0); +signal Rst_Int : std_logic; +signal Rst_Int_sync : std_logic; +signal MM_Int : std_logic; +signal Rst_interior : std_logic; +-- DCM signals +signal RstDcm : std_logic; +signal LockDcm : std_logic; +signal CLK_12 : std_logic; + +signal TxFifoReset : std_logic; +signal RxFifoReset : std_logic; + +signal TX_FIFO_FULL_int : std_logic; +signal RX_FIFO_EMPTY_int : std_logic; +signal RX_FIFO_D_int : std_logic_vector(C_DATA_WIDTH-1 downto 0); + +------------------------------------------------------------------------ +-- Component Declarations +------------------------------------------------------------------------ +component i2s_ctl + generic ( + C_DATA_WIDTH: integer := 24); + port ( + CLK_I : in std_logic; + RST_I : in std_logic; + EN_TX_I : in std_logic; + EN_RX_I : in std_logic; + OE_L_O : out std_logic; + OE_R_O : out std_logic; + WE_L_O : out std_logic; + WE_R_O : out std_logic; + D_L_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); + D_R_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); + D_L_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + D_R_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + MM_I : in std_logic; + FS_I : in std_logic_vector(3 downto 0); + BCLK_O : out std_logic; + BCLK_I : in std_logic; + BCLK_T : out std_logic; + LRCLK_O : out std_logic; + LRCLK_I : in std_logic; + LRCLK_T : out std_logic; + SDATA_O : out std_logic; + SDATA_I : in std_logic); +end component; + +-- the FIFO used for sample rate bus + +component fifo_4 + port ( + rst : in std_logic; + wr_clk : in std_logic; + rd_clk : in std_logic; + din : in std_logic_vector(3 downto 0); + wr_en : in std_logic; + rd_en : in std_logic; + dout : out std_logic_vector(3 downto 0); + full : out std_logic; + empty : out std_logic + ); +end component; + +-- the FIFO, used for Rx and Tx +component fifo_32 + port ( + wr_clk : in std_logic; + rd_clk : in std_logic; + rst : in std_logic; + din : in std_logic_vector(23 downto 0); + wr_en : in std_logic; + rd_en : in std_logic; + dout : out std_logic_vector(23 downto 0); + full : out std_logic; + empty : out std_logic); +end component; + +-- the DCM for generating 12.288 MHz +component DCM + port( + CLK_100 : in std_logic; + CLK_12_288 : out std_logic; + RESET : in std_logic; + LOCKED : out std_logic + ); +end component; + +-- the synchronisation unite for the two CLK domains +component Sync_ff + port( + CLK : in std_logic; + D_I : in std_logic; + Q_O : out std_logic + ); +end component; + +component rst_sync + Port ( + RST_I : in STD_LOGIC; + CLK : in STD_LOGIC; + Q_O : out STD_LOGIC + ); +end component; + +------------------------------------------------------------------------ +-- Module Implementation +------------------------------------------------------------------------ + +begin + +------------------------------------------------------------------------ +-- Instantiate the I2S transmitter module +------------------------------------------------------------------------ + Inst_I2sRxTx: i2s_ctl + generic map( + C_DATA_WIDTH => C_DATA_WIDTH) + port map( + CLK_I => CLK_12, + RST_I => Rst_Int_sync, + EN_TX_I => TxEn, + EN_RX_I => RxEn, + OE_L_O => TxFifoRdEnL, + OE_R_O => TxFifoRdEnR, + WE_L_O => RxFifoWrEnL, + WE_R_O => RxFifoWrEnR, + D_L_I => TxFifoDataOut, + D_R_I => TxFifoDataOut, + D_L_O => RxFifoDataInL, + D_R_O => RxFifoDataInR, + MM_I => MM_Int, + FS_I => SamplingFrequncy, + BCLK_O => BCLK_O, + BCLK_I => BCLK_I, + BCLK_T => BCLK_T, + LRCLK_O => LRCLK_Int, + LRCLK_I => LRCLK_I, + LRCLK_T => LRCLK_T, + SDATA_O => SDATA_O, + SDATA_I => SDATA_I); + + TxFifoRdEn <= TxFifoRdEnL or TxFifoRdEnR; + RxFifoWrEn <= RxFifoWrEnL or RxFifoWrEnR; + LRCLK_O <= LRCLK_Int; + +------------------------------------------------------------------------ +-- Instantiate the transmitter fifo +------------------------------------------------------------------------ + Inst_Sampling: fifo_4 + port map ( + rst => RST_I, + wr_clk => CLK_I, + rd_clk => CLK_12, + din => SAMPLING_RATE_I, + wr_en => '1', + rd_en => '1', + dout => SamplingFrequncy, + full => open, + empty => open); + +------------------------------------------------------------------------ +-- Instantiate the transmitter fifo +------------------------------------------------------------------------ + Inst_I2sTxFifo: fifo_32 + port map( + wr_clk => CLK_I, + rd_clk => CLK_12, + rst => TxFifoReset, + din => TX_FIFO_D_I, + wr_en => TX_FIFO_WR_EN_I, + rd_en => TxFifoRdEn, + dout => TxFifoDataOut, + full => TX_FIFO_FULL_int, + empty => TxFifoEmpty); + + DBG_TX_FIFO_RST_I <= TxFifoReset; + DBG_TX_FIFO_RD_EN_I <= TxFifoRdEn; + DBG_TX_FIFO_WR_EN_I <= TX_FIFO_WR_EN_I; + DBG_TX_FIFO_FULL_O <= TX_FIFO_FULL_int; + DBG_TX_FIFO_EMPTY_O <= TxFifoEmpty; + DBG_TX_FIFO_D_I <= TX_FIFO_D_I; + DBG_TX_FIFO_D_O <= TxFifoDataOut; + DBG_TX_RS_I <= TxEn; + +-- TX_FIFO_EMPTY_O <= TxFifoEmpty; + TX_FIFO_FULL_O <= TX_FIFO_FULL_int; + +------------------------------------------------------------------------ +-- Instantiate the receiver fifo +------------------------------------------------------------------------ + Inst_I2sRxFifo: fifo_32 + port map( + wr_clk => CLK_12, + rd_clk => CLK_I, + rst => RX_FIFO_RST_I, + din => RxFifoDataIn, + wr_en => RxFifoWrEn, + rd_en => RX_FIFO_RD_EN_I, + dout => RX_FIFO_D_int, + full => RxFifoFull, + empty => RX_FIFO_EMPTY_int); + + DBG_RX_FIFO_RST_I <= RX_FIFO_RST_I; + DBG_RX_FIFO_WR_EN_I <= RxFifoWrEn; + DBG_RX_FIFO_RD_EN_I <= RX_FIFO_RD_EN_I; + DBG_RX_FIFO_EMPTY_O <=RX_FIFO_EMPTY_int; + DBG_RX_FIFO_D_O <= RX_FIFO_D_int; + DBG_RX_FIFO_D_I <= RxFifoDataIn; + DBG_RX_RS_I <= RxEn; + + + RX_FIFO_EMPTY_O <= RX_FIFO_EMPTY_int; +-- RX_FIFO_FULL_O <= RxFifoFull; + RX_FIFO_D_O <= RX_FIFO_D_int; + + -- input selct between audio controler in master or in slave + LR <= LRCLK_Int when MM_Int = '0' else LRCLK_I; + RxFifoDataIn <= RxFifoDataInR when LR = '1' else RxFifoDataInL; + + +------------------------------------------------------------------------ +-- Instantiate DCM +------------------------------------------------------------------------ + Inst_Dcm : DCM + port map( + CLK_100 => CLK_100MHZ_I, + CLK_12_288 => CLK_12, + RESET => Rst_Int, + LOCKED => LockDcm); + + Rst_Int <= RST_I and not LockDcm; + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_SyncBit_RX_RS: Sync_ff + port map( + CLK => CLK_12, + D_I => RX_RS_I, + Q_O => RxEn); + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_SyncBit_TX_RS: Sync_ff + port map( + CLK => CLK_12, + D_I => TX_RS_I, + Q_O => TxEn); + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_SyncBit_CTL_MM: Sync_ff + port map( + CLK => CLK_12, + D_I => CTL_MASTER_MODE_I, + Q_O => MM_Int); + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_Rst_Sync_TX_RST: rst_sync + port map( + CLK => CLK_12, + RST_I => TX_FIFO_RST_I, + Q_O => TxFifoReset); + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_Rst_Sync_RST: rst_sync + port map( + CLK => CLK_12, + RST_I => Rst_Int, + Q_O => Rst_Int_sync); + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_SyncBit_Tx_Empty: Sync_ff + port map( + CLK => CLK_I, + D_I => TxFifoEmpty, + Q_O => TX_FIFO_EMPTY_O); + +------------------------------------------------------------------------ +-- Instantiate BusSync for the sample rate read out (100 -> 12) +------------------------------------------------------------------------ + Inst_SyncBit_Rx_Full: Sync_ff + port map( + CLK => CLK_I, + D_I => RxFifoFull, + Q_O => RX_FIFO_FULL_O); + +------------------------------------------------------------------------ +-- Instantiaton of the ODDR for the Output MCLK +------------------------------------------------------------------------ + ODDR_inst : ODDR + generic map( + DDR_CLK_EDGE => "OPPOSITE_EDGE", -- "OPPOSITE_EDGE" or "SAME_EDGE" + INIT => '0', -- Initial value for Q port ('1' or '0') + SRTYPE => "SYNC") -- Reset Type ("ASYNC" or "SYNC") + port map ( + Q => MCLK_O, -- 1-bit DDR output + C => CLK_12, -- 1-bit clock input + CE => '1', -- 1-bit clock enable input + D1 => '1', -- 1-bit data input (positive edge) + D2 => '0', -- 1-bit data input (negative edge) + R => '0', -- 1-bit reset input + S => '0'); -- 1-bit set input + +end Behavioral; diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_stream.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_stream.vhd new file mode 100644 index 0000000..057fcf4 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/i2s_stream.vhd @@ -0,0 +1,158 @@ +------------------------------------------------------------------------------- +-- +-- COPYRIGHT (C) 2014, Digilent RO. All rights reserved +-- +------------------------------------------------------------------------------- +-- FILE NAME : i2s_stream.vhd +-- MODULE NAME : I2S Stream +-- AUTHOR : Hegbeli Ciprian +-- AUTHOR'S EMAIL : ciprian.hegbeli@digilent.com +------------------------------------------------------------------------------- +-- REVISION HISTORY +-- VERSION DATE AUTHOR DESCRIPTION +-- 1.0 2014-28-03 Hegbeli Ciprian Created +------------------------------------------------------------------------------- +-- KEYWORDS : Stream +------------------------------------------------------------------------------- +-- DESCRIPTION : This module implements the Stream protocol for sending the +-- incomming I2S data to the DMA. It implements both the S2MM +-- and the MM2S allowing for a full duplex comunication +------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +use IEEE.NUMERIC_STD.ALL; +use ieee.std_logic_unsigned.all; + +------------------------------------------------------------------------ +-- Module Declaration +------------------------------------------------------------------------ +entity i2s_stream is + generic ( + -- Stream data width (must be multiple of 8) + C_AXI_STREAM_DATA_WIDTH : integer := 32; + -- Width of one Slot (24/20/18/16-bit wide) + C_DATA_WIDTH : integer := 24 + ); + port ( + + -- Tx FIFO Flags + TX_FIFO_FULL_I : in std_logic; + + -- Rx FIFO Flags + RX_FIFO_EMPTY_I : in std_logic; + + -- Tx FIFO Control signals + TX_FIFO_D_O : out std_logic_vector(C_DATA_WIDTH-1 downto 0); + + -- Rx FIFO Control signals + RX_FIFO_D_I : in std_logic_vector(C_DATA_WIDTH-1 downto 0); + + NR_OF_SMPL_I : in std_logic_vector(20 downto 0); + + TX_STREAM_EN_I : in std_logic; + RX_STREAM_EN_I : in std_logic; + + -- AXI4-Stream + -- Slave + S_AXIS_MM2S_ACLK_I : in std_logic; + S_AXIS_MM2S_ARESETN : in std_logic; + S_AXIS_MM2S_TREADY_O : out std_logic; + S_AXIS_MM2S_TDATA_I : in std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + S_AXIS_MM2S_TLAST_I : in std_logic; + S_AXIS_MM2S_TVALID_I : in std_logic; + + -- Master + M_AXIS_S2MM_ACLK_I : in std_logic; + M_AXIS_S2MM_ARESETN : in std_logic; + M_AXIS_S2MM_TDATA_O : out std_logic_vector(C_AXI_STREAM_DATA_WIDTH-1 downto 0); + M_AXIS_S2MM_TLAST_O : out std_logic; + M_AXIS_S2MM_TVALID_O : out std_logic; + M_AXIS_S2MM_TREADY_I : in std_logic; + M_AXIS_S2MM_TKEEP_O : out std_logic_vector((C_AXI_STREAM_DATA_WIDTH/8)-1 downto 0) + + ); +end i2s_stream; + +architecture Behavioral of i2s_stream is + +------------------------------------------------------------------------ +-- Signal Declarations +------------------------------------------------------------------------ +signal nr_of_rd, nr_of_wr : std_logic_vector (20 downto 0); +signal tlast : std_logic; +signal ready : std_logic; + +------------------------------------------------------------------------ +-- Module Implementation +------------------------------------------------------------------------ + +begin + + +------------------------------------------------------------------------ +-- MM2S protocol imnplementation +------------------------------------------------------------------------ + S_Control: process (S_AXIS_MM2S_ACLK_I) + begin + if (S_AXIS_MM2S_ACLK_I'event and S_AXIS_MM2S_ACLK_I = '0') then + if (S_AXIS_MM2S_ARESETN = '0') then + nr_of_rd <= NR_OF_SMPL_I; + elsif (RX_STREAM_EN_I = '1') then + if (nr_of_rd > 0) then + if (S_AXIS_MM2S_TVALID_I = '1' and ready = '1') then + TX_FIFO_D_O <= S_AXIS_MM2S_TDATA_I(C_DATA_WIDTH-1 downto 0); + nr_of_rd <= nr_of_rd-1; + end if; + end if; + else + nr_of_rd <= NR_OF_SMPL_I; + end if; + end if; + end process; + + -- ready signal decalaration + ready <= not TX_FIFO_FULL_I when RX_STREAM_EN_I = '1' else + '0'; + S_AXIS_MM2S_TREADY_O <= ready; + +------------------------------------------------------------------------ +-- S2MM protocol implementation +------------------------------------------------------------------------ + M_Control: process (M_AXIS_S2MM_ACLK_I) + begin + if (M_AXIS_S2MM_ACLK_I'event and M_AXIS_S2MM_ACLK_I = '1') then + if (M_AXIS_S2MM_ARESETN = '0') THEN + tlast <= '0'; + nr_of_wr <= NR_OF_SMPL_I; + elsif (TX_STREAM_EN_I = '1') then + if (nr_of_wr > 0) then + if (M_AXIS_S2MM_TREADY_I = '1' and RX_FIFO_EMPTY_I = '0') then + nr_of_wr <= nr_of_wr-1; + end if; + end if; + if (nr_of_wr = 0) then + tlast <= '0'; + end if; + if (nr_of_wr = 1) then + tlast <= '1'; + end if; + else + tlast <= '0'; + nr_of_wr <= NR_OF_SMPL_I; + end if; + end if; + end process; + + -- S2MM Data signals + M_AXIS_S2MM_TDATA_O(C_AXI_STREAM_DATA_WIDTH-1 downto C_DATA_WIDTH) <= (others => '0'); + M_AXIS_S2MM_TDATA_O(C_DATA_WIDTH-1 downto 0) <= RX_FIFO_D_I; + -- S2MM valid signal only active when strea is enabled and not EOL + M_AXIS_S2MM_TVALID_O <= not RX_FIFO_EMPTY_I when (nr_of_wr > 0 and TX_STREAM_EN_I = '1') else + '0'; + M_AXIS_S2MM_TLAST_O <= tlast; + -- Kepp all incomming samples + M_AXIS_S2MM_TKEEP_O <= (others => '1'); + +end Behavioral; + diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/rst_sync.vhd b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/rst_sync.vhd new file mode 100644 index 0000000..bbb2b58 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/src/rst_sync.vhd @@ -0,0 +1,73 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 10/29/2014 12:36:46 PM +-- Design Name: +-- Module Name: rst_sync - Behavioral +-- Project Name: +-- Target Devices: +-- Tool Versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +Library UNISIM; +use UNISIM.vcomponents.all; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--use IEEE.NUMERIC_STD.ALL; + +-- Uncomment the following library declaration if instantiating +-- any Xilinx leaf cells in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity rst_sync is + Port ( RST_I : in STD_LOGIC; + CLK : in STD_LOGIC; + Q_O : out STD_LOGIC); +end rst_sync; + +architecture Behavioral of rst_sync is + +signal d_int: std_logic; +signal q_int: std_logic; + +begin + +FDRE_inst_1 : FDPE + generic map ( + INIT => '0') -- Initial value of register ('0' or '1') + port map ( + Q => d_int, -- Data output + C => CLK, -- Clock input + CE => '1', -- Clock enable input + PRE => RST_I, -- Synchronous reset input + D => '0' -- Data input + ); + +FDRE_inst_2 : FDPE + generic map ( + INIT => '0') -- Initial value of register ('0' or '1') + port map ( + Q => q_int, -- Data output + C => CLK, -- Clock input + CE => '1', -- Clock enable input + PRE => RST_I, -- Synchronous reset input + D => d_int -- Data input + ); + +Q_O <= q_int; +end Behavioral; diff --git a/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/xgui/d_axi_i2s_audio_v2_0.tcl b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/xgui/d_axi_i2s_audio_v2_0.tcl new file mode 100644 index 0000000..69fa659 --- /dev/null +++ b/ARM_DMA/ARM_DMA.ipdefs/repo_0/local/ip/d_axi_i2s_audio_v2_0/xgui/d_axi_i2s_audio_v2_0.tcl @@ -0,0 +1,109 @@ +# Definitional proc to organize widgets for parameters. +proc init_gui { IPINST } { + ipgui::add_param $IPINST -name "Component_Name" + #Adding Page + set Page_0 [ipgui::add_page $IPINST -name "Page 0"] + set_property tooltip {Page 0} ${Page_0} + ipgui::add_param $IPINST -name "C_DATA_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI_STREAM_DATA_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI_L_DATA_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "C_AXI_L_ADDR_WIDTH" -parent ${Page_0} + ipgui::add_param $IPINST -name "ENABLE_STREAM" -parent ${Page_0} + ipgui::add_param $IPINST -name "BIDIRECTIONAL_CLK" -parent ${Page_0} + + +} + +proc update_PARAM_VALUE.BIDIRECTIONAL_CLK { PARAM_VALUE.BIDIRECTIONAL_CLK } { + # Procedure called to update BIDIRECTIONAL_CLK when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.BIDIRECTIONAL_CLK { PARAM_VALUE.BIDIRECTIONAL_CLK } { + # Procedure called to validate BIDIRECTIONAL_CLK + return true +} + +proc update_PARAM_VALUE.C_AXI_L_ADDR_WIDTH { PARAM_VALUE.C_AXI_L_ADDR_WIDTH } { + # Procedure called to update C_AXI_L_ADDR_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI_L_ADDR_WIDTH { PARAM_VALUE.C_AXI_L_ADDR_WIDTH } { + # Procedure called to validate C_AXI_L_ADDR_WIDTH + return true +} + +proc update_PARAM_VALUE.C_AXI_L_DATA_WIDTH { PARAM_VALUE.C_AXI_L_DATA_WIDTH } { + # Procedure called to update C_AXI_L_DATA_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI_L_DATA_WIDTH { PARAM_VALUE.C_AXI_L_DATA_WIDTH } { + # Procedure called to validate C_AXI_L_DATA_WIDTH + return true +} + +proc update_PARAM_VALUE.C_AXI_STREAM_DATA_WIDTH { PARAM_VALUE.C_AXI_STREAM_DATA_WIDTH } { + # Procedure called to update C_AXI_STREAM_DATA_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI_STREAM_DATA_WIDTH { PARAM_VALUE.C_AXI_STREAM_DATA_WIDTH } { + # Procedure called to validate C_AXI_STREAM_DATA_WIDTH + return true +} + +proc update_PARAM_VALUE.C_DATA_WIDTH { PARAM_VALUE.C_DATA_WIDTH } { + # Procedure called to update C_DATA_WIDTH when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_DATA_WIDTH { PARAM_VALUE.C_DATA_WIDTH } { + # Procedure called to validate C_DATA_WIDTH + return true +} + +proc update_PARAM_VALUE.ENABLE_STREAM { PARAM_VALUE.ENABLE_STREAM } { + # Procedure called to update ENABLE_STREAM when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.ENABLE_STREAM { PARAM_VALUE.ENABLE_STREAM } { + # Procedure called to validate ENABLE_STREAM + return true +} + +proc update_PARAM_VALUE.C_AXI_L_BASEADDR { PARAM_VALUE.C_AXI_L_BASEADDR } { + # Procedure called to update C_AXI_L_BASEADDR when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI_L_BASEADDR { PARAM_VALUE.C_AXI_L_BASEADDR } { + # Procedure called to validate C_AXI_L_BASEADDR + return true +} + +proc update_PARAM_VALUE.C_AXI_L_HIGHADDR { PARAM_VALUE.C_AXI_L_HIGHADDR } { + # Procedure called to update C_AXI_L_HIGHADDR when any of the dependent parameters in the arguments change +} + +proc validate_PARAM_VALUE.C_AXI_L_HIGHADDR { PARAM_VALUE.C_AXI_L_HIGHADDR } { + # Procedure called to validate C_AXI_L_HIGHADDR + return true +} + + +proc update_MODELPARAM_VALUE.C_DATA_WIDTH { MODELPARAM_VALUE.C_DATA_WIDTH PARAM_VALUE.C_DATA_WIDTH } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_DATA_WIDTH}] ${MODELPARAM_VALUE.C_DATA_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_AXI_STREAM_DATA_WIDTH { MODELPARAM_VALUE.C_AXI_STREAM_DATA_WIDTH PARAM_VALUE.C_AXI_STREAM_DATA_WIDTH } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI_STREAM_DATA_WIDTH}] ${MODELPARAM_VALUE.C_AXI_STREAM_DATA_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_AXI_L_DATA_WIDTH { MODELPARAM_VALUE.C_AXI_L_DATA_WIDTH PARAM_VALUE.C_AXI_L_DATA_WIDTH } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI_L_DATA_WIDTH}] ${MODELPARAM_VALUE.C_AXI_L_DATA_WIDTH} +} + +proc update_MODELPARAM_VALUE.C_AXI_L_ADDR_WIDTH { MODELPARAM_VALUE.C_AXI_L_ADDR_WIDTH PARAM_VALUE.C_AXI_L_ADDR_WIDTH } { + # Procedure called to set VHDL generic/Verilog parameter value(s) based on TCL parameter value + set_property value [get_property value ${PARAM_VALUE.C_AXI_L_ADDR_WIDTH}] ${MODELPARAM_VALUE.C_AXI_L_ADDR_WIDTH} +} + diff --git a/ARM_DMA/ARM_DMA.runs/impl_1/design_1_wrapper.bit b/ARM_DMA/ARM_DMA.runs/impl_1/design_1_wrapper.bit new file mode 100644 index 0000000..2b50221 Binary files /dev/null and b/ARM_DMA/ARM_DMA.runs/impl_1/design_1_wrapper.bit differ diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/design_1.bd b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/design_1.bd new file mode 100644 index 0000000..dd6d30c --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/design_1.bd @@ -0,0 +1,3427 @@ +{ + "design": { + "design_info": { + "boundary_crc": "0x332675C5F7D4F3F7", + "device": "xc7z020clg400-1", + "gen_directory": "../../../../ARM_DMA.gen/sources_1/bd/design_1", + "name": "design_1", + "rev_ctrl_bd_flag": "RevCtrlBdOff", + "synth_flow_mode": "Hierarchical", + "tool_version": "2021.2", + "validated": "true" + }, + "design_tree": { + "axi_dma_0": "", + "axi_gpio_0": "", + "axi_iic_0": "", + "axi_mem_intercon": { + "xbar": "", + "s00_couplers": {}, + "s01_couplers": {}, + "m00_couplers": { + "auto_pc": "" + } + }, + "processing_system7_0": "", + "processing_system7_0_axi_periph": { + "xbar": "", + "s00_couplers": { + "auto_pc": "" + }, + "m00_couplers": {}, + "m01_couplers": {}, + "m02_couplers": {}, + "m03_couplers": {} + }, + "rst_processing_system7_0_100M": "", + "xlconcat_0": "", + "d_axi_i2s_audio_0": "" + }, + "interface_ports": { + "DDR": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:ddrx:1.0", + "vlnv": "xilinx.com:interface:ddrx_rtl:1.0", + "parameters": { + "AXI_ARBITRATION_SCHEME": { + "value": "TDM", + "value_src": "default" + }, + "BURST_LENGTH": { + "value": "8", + "value_src": "default" + }, + "CAN_DEBUG": { + "value": "false", + "value_src": "default" + }, + "CAS_LATENCY": { + "value": "11", + "value_src": "default" + }, + "CAS_WRITE_LATENCY": { + "value": "11", + "value_src": "default" + }, + "CS_ENABLED": { + "value": "true", + "value_src": "default" + }, + "DATA_MASK_ENABLED": { + "value": "true", + "value_src": "default" + }, + "DATA_WIDTH": { + "value": "8", + "value_src": "default" + }, + "MEMORY_TYPE": { + "value": "COMPONENTS", + "value_src": "default" + }, + "MEM_ADDR_MAP": { + "value": "ROW_COLUMN_BANK", + "value_src": "default" + }, + "SLOT": { + "value": "Single", + "value_src": "default" + }, + "TIMEPERIOD_PS": { + "value": "1250", + "value_src": "default" + } + } + }, + "FIXED_IO": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:display_processing_system7:fixedio:1.0", + "vlnv": "xilinx.com:display_processing_system7:fixedio_rtl:1.0", + "parameters": { + "CAN_DEBUG": { + "value": "false", + "value_src": "default" + } + } + }, + "btns_4bits": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:gpio:1.0", + "vlnv": "xilinx.com:interface:gpio_rtl:1.0" + }, + "iic_rtl": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:iic:1.0", + "vlnv": "xilinx.com:interface:iic_rtl:1.0" + } + }, + "ports": { + "MCLK_O": { + "direction": "O" + }, + "BCLK_O": { + "direction": "O" + }, + "LRCLK_O": { + "direction": "O" + }, + "SDATA_O": { + "direction": "O" + }, + "SDATA_I": { + "direction": "I" + } + }, + "components": { + "axi_dma_0": { + "vlnv": "xilinx.com:ip:axi_dma:7.1", + "xci_name": "design_1_axi_dma_0_0", + "xci_path": "ip/design_1_axi_dma_0_0/design_1_axi_dma_0_0.xci", + "inst_hier_path": "axi_dma_0", + "parameters": { + "c_include_mm2s_dre": { + "value": "0" + }, + "c_include_s2mm_dre": { + "value": "0" + }, + "c_include_sg": { + "value": "0" + }, + "c_micro_dma": { + "value": "0" + }, + "c_mm2s_burst_size": { + "value": "8" + }, + "c_s2mm_burst_size": { + "value": "8" + }, + "c_sg_length_width": { + "value": "23" + } + }, + "interface_ports": { + "M_AXI_MM2S": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Master", + "address_space_ref": "Data_MM2S", + "base_address": { + "minimum": "0x00000000", + "maximum": "0xFFFFFFFF", + "width": "32" + } + }, + "M_AXI_S2MM": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Master", + "address_space_ref": "Data_S2MM", + "base_address": { + "minimum": "0x00000000", + "maximum": "0xFFFFFFFF", + "width": "32" + } + } + }, + "addressing": { + "address_spaces": { + "Data_MM2S": { + "range": "4G", + "width": "32" + }, + "Data_S2MM": { + "range": "4G", + "width": "32" + } + } + } + }, + "axi_gpio_0": { + "vlnv": "xilinx.com:ip:axi_gpio:2.0", + "xci_name": "design_1_axi_gpio_0_0", + "xci_path": "ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci", + "inst_hier_path": "axi_gpio_0", + "parameters": { + "C_INTERRUPT_PRESENT": { + "value": "1" + }, + "GPIO_BOARD_INTERFACE": { + "value": "btns_4bits" + }, + "USE_BOARD_FLOW": { + "value": "true" + } + } + }, + "axi_iic_0": { + "vlnv": "xilinx.com:ip:axi_iic:2.1", + "xci_name": "design_1_axi_iic_0_0", + "xci_path": "ip/design_1_axi_iic_0_0/design_1_axi_iic_0_0.xci", + "inst_hier_path": "axi_iic_0", + "parameters": { + "IIC_BOARD_INTERFACE": { + "value": "audio_i2c" + }, + "USE_BOARD_FLOW": { + "value": "true" + } + } + }, + "axi_mem_intercon": { + "vlnv": "xilinx.com:ip:axi_interconnect:2.1", + "xci_path": "ip/design_1_axi_mem_intercon_0/design_1_axi_mem_intercon_0.xci", + "inst_hier_path": "axi_mem_intercon", + "xci_name": "design_1_axi_mem_intercon_0", + "parameters": { + "NUM_MI": { + "value": "1" + }, + "NUM_SI": { + "value": "2" + }, + "S01_HAS_DATA_FIFO": { + "value": "0" + }, + "S02_HAS_DATA_FIFO": { + "value": "1" + }, + "SYNCHRONIZATION_STAGES": { + "value": "2" + } + }, + "interface_ports": { + "S00_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S01_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "M00_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_RESET": { + "value": "ARESETN" + } + } + }, + "ARESETN": { + "type": "rst", + "direction": "I" + }, + "S00_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S00_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S00_ARESETN" + } + } + }, + "S00_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S01_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S01_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S01_ARESETN" + } + } + }, + "S01_ARESETN": { + "type": "rst", + "direction": "I" + }, + "M00_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M00_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M00_ARESETN" + } + } + }, + "M00_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "components": { + "xbar": { + "vlnv": "xilinx.com:ip:axi_crossbar:2.1", + "xci_name": "design_1_xbar_4", + "xci_path": "ip/design_1_xbar_4/design_1_xbar_4.xci", + "inst_hier_path": "axi_mem_intercon/xbar", + "parameters": { + "NUM_MI": { + "value": "1" + }, + "NUM_SI": { + "value": "2" + }, + "STRATEGY": { + "value": "0" + } + }, + "interface_ports": { + "S00_AXI": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Slave", + "bridges": [ + "M00_AXI" + ] + }, + "S01_AXI": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Slave", + "bridges": [ + "M00_AXI" + ] + } + } + }, + "s00_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "interface_nets": { + "s00_couplers_to_s00_couplers": { + "interface_ports": [ + "S_AXI", + "M_AXI" + ] + } + } + }, + "s01_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "interface_nets": { + "s01_couplers_to_s01_couplers": { + "interface_ports": [ + "S_AXI", + "M_AXI" + ] + } + } + }, + "m00_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "components": { + "auto_pc": { + "vlnv": "xilinx.com:ip:axi_protocol_converter:2.1", + "xci_name": "design_1_auto_pc_0", + "xci_path": "ip/design_1_auto_pc_0/design_1_auto_pc_0.xci", + "inst_hier_path": "axi_mem_intercon/m00_couplers/auto_pc", + "parameters": { + "MI_PROTOCOL": { + "value": "AXI3" + }, + "SI_PROTOCOL": { + "value": "AXI4" + } + }, + "interface_ports": { + "S_AXI": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Slave", + "bridges": [ + "M_AXI" + ] + } + } + } + }, + "interface_nets": { + "auto_pc_to_m00_couplers": { + "interface_ports": [ + "M_AXI", + "auto_pc/M_AXI" + ] + }, + "m00_couplers_to_auto_pc": { + "interface_ports": [ + "S_AXI", + "auto_pc/S_AXI" + ] + } + }, + "nets": { + "S_ACLK_1": { + "ports": [ + "S_ACLK", + "auto_pc/aclk" + ] + }, + "S_ARESETN_1": { + "ports": [ + "S_ARESETN", + "auto_pc/aresetn" + ] + } + } + } + }, + "interface_nets": { + "axi_mem_intercon_to_s00_couplers": { + "interface_ports": [ + "S00_AXI", + "s00_couplers/S_AXI" + ] + }, + "axi_mem_intercon_to_s01_couplers": { + "interface_ports": [ + "S01_AXI", + "s01_couplers/S_AXI" + ] + }, + "m00_couplers_to_axi_mem_intercon": { + "interface_ports": [ + "M00_AXI", + "m00_couplers/M_AXI" + ] + }, + "s00_couplers_to_xbar": { + "interface_ports": [ + "s00_couplers/M_AXI", + "xbar/S00_AXI" + ] + }, + "s01_couplers_to_xbar": { + "interface_ports": [ + "s01_couplers/M_AXI", + "xbar/S01_AXI" + ] + }, + "xbar_to_m00_couplers": { + "interface_ports": [ + "xbar/M00_AXI", + "m00_couplers/S_AXI" + ] + } + }, + "nets": { + "M00_ACLK_1": { + "ports": [ + "M00_ACLK", + "m00_couplers/M_ACLK" + ] + }, + "M00_ARESETN_1": { + "ports": [ + "M00_ARESETN", + "m00_couplers/M_ARESETN" + ] + }, + "S00_ACLK_1": { + "ports": [ + "S00_ACLK", + "s00_couplers/S_ACLK" + ] + }, + "S00_ARESETN_1": { + "ports": [ + "S00_ARESETN", + "s00_couplers/S_ARESETN" + ] + }, + "S01_ACLK_1": { + "ports": [ + "S01_ACLK", + "s01_couplers/S_ACLK" + ] + }, + "S01_ARESETN_1": { + "ports": [ + "S01_ARESETN", + "s01_couplers/S_ARESETN" + ] + }, + "axi_mem_intercon_ACLK_net": { + "ports": [ + "ACLK", + "xbar/aclk", + "s00_couplers/M_ACLK", + "s01_couplers/M_ACLK", + "m00_couplers/S_ACLK" + ] + }, + "axi_mem_intercon_ARESETN_net": { + "ports": [ + "ARESETN", + "xbar/aresetn", + "s00_couplers/M_ARESETN", + "s01_couplers/M_ARESETN", + "m00_couplers/S_ARESETN" + ] + } + } + }, + "processing_system7_0": { + "vlnv": "xilinx.com:ip:processing_system7:5.5", + "xci_name": "design_1_processing_system7_0_0", + "xci_path": "ip/design_1_processing_system7_0_0/design_1_processing_system7_0_0.xci", + "inst_hier_path": "processing_system7_0", + "parameters": { + "PCW_ACT_APU_PERIPHERAL_FREQMHZ": { + "value": "650.000000" + }, + "PCW_ACT_CAN0_PERIPHERAL_FREQMHZ": { + "value": "23.8095" + }, + "PCW_ACT_CAN1_PERIPHERAL_FREQMHZ": { + "value": "23.8095" + }, + "PCW_ACT_CAN_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_DCI_PERIPHERAL_FREQMHZ": { + "value": "10.096154" + }, + "PCW_ACT_ENET0_PERIPHERAL_FREQMHZ": { + "value": "125.000000" + }, + "PCW_ACT_ENET1_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_FPGA0_PERIPHERAL_FREQMHZ": { + "value": "100.000000" + }, + "PCW_ACT_FPGA1_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_FPGA2_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_FPGA3_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_I2C_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_ACT_PCAP_PERIPHERAL_FREQMHZ": { + "value": "200.000000" + }, + "PCW_ACT_QSPI_PERIPHERAL_FREQMHZ": { + "value": "200.000000" + }, + "PCW_ACT_SDIO_PERIPHERAL_FREQMHZ": { + "value": "50.000000" + }, + "PCW_ACT_SMC_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_SPI_PERIPHERAL_FREQMHZ": { + "value": "10.000000" + }, + "PCW_ACT_TPIU_PERIPHERAL_FREQMHZ": { + "value": "200.000000" + }, + "PCW_ACT_TTC0_CLK0_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_ACT_TTC0_CLK1_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_ACT_TTC0_CLK2_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_ACT_TTC1_CLK0_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_ACT_TTC1_CLK1_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_ACT_TTC1_CLK2_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_ACT_TTC_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_ACT_UART_PERIPHERAL_FREQMHZ": { + "value": "100.000000" + }, + "PCW_ACT_USB0_PERIPHERAL_FREQMHZ": { + "value": "60" + }, + "PCW_ACT_USB1_PERIPHERAL_FREQMHZ": { + "value": "60" + }, + "PCW_ACT_WDT_PERIPHERAL_FREQMHZ": { + "value": "108.333336" + }, + "PCW_APU_CLK_RATIO_ENABLE": { + "value": "6:2:1" + }, + "PCW_APU_PERIPHERAL_FREQMHZ": { + "value": "650" + }, + "PCW_CAN0_PERIPHERAL_CLKSRC": { + "value": "External" + }, + "PCW_CAN0_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_CAN1_PERIPHERAL_CLKSRC": { + "value": "External" + }, + "PCW_CAN1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_CAN_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_CAN_PERIPHERAL_VALID": { + "value": "0" + }, + "PCW_CLK0_FREQ": { + "value": "100000000" + }, + "PCW_CLK1_FREQ": { + "value": "10000000" + }, + "PCW_CLK2_FREQ": { + "value": "10000000" + }, + "PCW_CLK3_FREQ": { + "value": "10000000" + }, + "PCW_CORE0_FIQ_INTR": { + "value": "0" + }, + "PCW_CORE0_IRQ_INTR": { + "value": "0" + }, + "PCW_CORE1_FIQ_INTR": { + "value": "0" + }, + "PCW_CORE1_IRQ_INTR": { + "value": "0" + }, + "PCW_CPU_CPU_6X4X_MAX_RANGE": { + "value": "667" + }, + "PCW_CPU_PERIPHERAL_CLKSRC": { + "value": "ARM PLL" + }, + "PCW_CRYSTAL_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_DCI_PERIPHERAL_CLKSRC": { + "value": "DDR PLL" + }, + "PCW_DCI_PERIPHERAL_FREQMHZ": { + "value": "10.159" + }, + "PCW_DDR_PERIPHERAL_CLKSRC": { + "value": "DDR PLL" + }, + "PCW_DDR_RAM_BASEADDR": { + "value": "0x00100000" + }, + "PCW_DDR_RAM_HIGHADDR": { + "value": "0x1FFFFFFF" + }, + "PCW_DM_WIDTH": { + "value": "4" + }, + "PCW_DQS_WIDTH": { + "value": "4" + }, + "PCW_DQ_WIDTH": { + "value": "32" + }, + "PCW_ENET0_BASEADDR": { + "value": "0xE000B000" + }, + "PCW_ENET0_ENET0_IO": { + "value": "MIO 16 .. 27" + }, + "PCW_ENET0_GRP_MDIO_ENABLE": { + "value": "1" + }, + "PCW_ENET0_GRP_MDIO_IO": { + "value": "MIO 52 .. 53" + }, + "PCW_ENET0_HIGHADDR": { + "value": "0xE000BFFF" + }, + "PCW_ENET0_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_ENET0_PERIPHERAL_ENABLE": { + "value": "1" + }, + "PCW_ENET0_PERIPHERAL_FREQMHZ": { + "value": "1000 Mbps" + }, + "PCW_ENET0_RESET_ENABLE": { + "value": "1" + }, + "PCW_ENET0_RESET_IO": { + "value": "MIO 9" + }, + "PCW_ENET1_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_ENET1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_ENET_RESET_ENABLE": { + "value": "1" + }, + "PCW_ENET_RESET_POLARITY": { + "value": "Active Low" + }, + "PCW_ENET_RESET_SELECT": { + "value": "Share reset pin" + }, + "PCW_EN_4K_TIMER": { + "value": "0" + }, + "PCW_EN_CAN0": { + "value": "0" + }, + "PCW_EN_CAN1": { + "value": "0" + }, + "PCW_EN_CLK0_PORT": { + "value": "1" + }, + "PCW_EN_CLK1_PORT": { + "value": "0" + }, + "PCW_EN_CLK2_PORT": { + "value": "0" + }, + "PCW_EN_CLK3_PORT": { + "value": "0" + }, + "PCW_EN_CLKTRIG0_PORT": { + "value": "0" + }, + "PCW_EN_CLKTRIG1_PORT": { + "value": "0" + }, + "PCW_EN_CLKTRIG2_PORT": { + "value": "0" + }, + "PCW_EN_CLKTRIG3_PORT": { + "value": "0" + }, + "PCW_EN_DDR": { + "value": "1" + }, + "PCW_EN_EMIO_CAN0": { + "value": "0" + }, + "PCW_EN_EMIO_CAN1": { + "value": "0" + }, + "PCW_EN_EMIO_CD_SDIO0": { + "value": "0" + }, + "PCW_EN_EMIO_CD_SDIO1": { + "value": "0" + }, + "PCW_EN_EMIO_ENET0": { + "value": "0" + }, + "PCW_EN_EMIO_ENET1": { + "value": "0" + }, + "PCW_EN_EMIO_GPIO": { + "value": "0" + }, + "PCW_EN_EMIO_I2C0": { + "value": "0" + }, + "PCW_EN_EMIO_I2C1": { + "value": "0" + }, + "PCW_EN_EMIO_MODEM_UART0": { + "value": "0" + }, + "PCW_EN_EMIO_MODEM_UART1": { + "value": "0" + }, + "PCW_EN_EMIO_PJTAG": { + "value": "0" + }, + "PCW_EN_EMIO_SDIO0": { + "value": "0" + }, + "PCW_EN_EMIO_SDIO1": { + "value": "0" + }, + "PCW_EN_EMIO_SPI0": { + "value": "0" + }, + "PCW_EN_EMIO_SPI1": { + "value": "0" + }, + "PCW_EN_EMIO_SRAM_INT": { + "value": "0" + }, + "PCW_EN_EMIO_TRACE": { + "value": "0" + }, + "PCW_EN_EMIO_TTC0": { + "value": "1" + }, + "PCW_EN_EMIO_TTC1": { + "value": "0" + }, + "PCW_EN_EMIO_UART0": { + "value": "0" + }, + "PCW_EN_EMIO_UART1": { + "value": "0" + }, + "PCW_EN_EMIO_WDT": { + "value": "0" + }, + "PCW_EN_EMIO_WP_SDIO0": { + "value": "0" + }, + "PCW_EN_EMIO_WP_SDIO1": { + "value": "0" + }, + "PCW_EN_ENET0": { + "value": "1" + }, + "PCW_EN_ENET1": { + "value": "0" + }, + "PCW_EN_GPIO": { + "value": "1" + }, + "PCW_EN_I2C0": { + "value": "0" + }, + "PCW_EN_I2C1": { + "value": "0" + }, + "PCW_EN_MODEM_UART0": { + "value": "0" + }, + "PCW_EN_MODEM_UART1": { + "value": "0" + }, + "PCW_EN_PJTAG": { + "value": "0" + }, + "PCW_EN_PTP_ENET0": { + "value": "0" + }, + "PCW_EN_PTP_ENET1": { + "value": "0" + }, + "PCW_EN_QSPI": { + "value": "1" + }, + "PCW_EN_RST0_PORT": { + "value": "1" + }, + "PCW_EN_RST1_PORT": { + "value": "0" + }, + "PCW_EN_RST2_PORT": { + "value": "0" + }, + "PCW_EN_RST3_PORT": { + "value": "0" + }, + "PCW_EN_SDIO0": { + "value": "1" + }, + "PCW_EN_SDIO1": { + "value": "0" + }, + "PCW_EN_SMC": { + "value": "0" + }, + "PCW_EN_SPI0": { + "value": "0" + }, + "PCW_EN_SPI1": { + "value": "0" + }, + "PCW_EN_TRACE": { + "value": "0" + }, + "PCW_EN_TTC0": { + "value": "1" + }, + "PCW_EN_TTC1": { + "value": "0" + }, + "PCW_EN_UART0": { + "value": "1" + }, + "PCW_EN_UART1": { + "value": "0" + }, + "PCW_EN_USB0": { + "value": "1" + }, + "PCW_EN_USB1": { + "value": "0" + }, + "PCW_EN_WDT": { + "value": "0" + }, + "PCW_FCLK0_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_FCLK1_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_FCLK2_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_FCLK3_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_FCLK_CLK0_BUF": { + "value": "TRUE" + }, + "PCW_FPGA0_PERIPHERAL_FREQMHZ": { + "value": "100" + }, + "PCW_FPGA1_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_FPGA2_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_FPGA3_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_FPGA_FCLK0_ENABLE": { + "value": "1" + }, + "PCW_GP0_EN_MODIFIABLE_TXN": { + "value": "0" + }, + "PCW_GP0_NUM_READ_THREADS": { + "value": "4" + }, + "PCW_GP0_NUM_WRITE_THREADS": { + "value": "4" + }, + "PCW_GP1_EN_MODIFIABLE_TXN": { + "value": "0" + }, + "PCW_GP1_NUM_READ_THREADS": { + "value": "4" + }, + "PCW_GP1_NUM_WRITE_THREADS": { + "value": "4" + }, + "PCW_GPIO_BASEADDR": { + "value": "0xE000A000" + }, + "PCW_GPIO_EMIO_GPIO_ENABLE": { + "value": "0" + }, + "PCW_GPIO_HIGHADDR": { + "value": "0xE000AFFF" + }, + "PCW_GPIO_MIO_GPIO_ENABLE": { + "value": "1" + }, + "PCW_GPIO_MIO_GPIO_IO": { + "value": "MIO" + }, + "PCW_GPIO_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_I2C0_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_I2C1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_I2C_RESET_ENABLE": { + "value": "1" + }, + "PCW_I2C_RESET_POLARITY": { + "value": "Active Low" + }, + "PCW_IMPORT_BOARD_PRESET": { + "value": "None" + }, + "PCW_INCLUDE_ACP_TRANS_CHECK": { + "value": "0" + }, + "PCW_IRQ_F2P_INTR": { + "value": "1" + }, + "PCW_IRQ_F2P_MODE": { + "value": "DIRECT" + }, + "PCW_MIO_0_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_0_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_0_SLEW": { + "value": "slow" + }, + "PCW_MIO_10_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_10_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_10_SLEW": { + "value": "slow" + }, + "PCW_MIO_11_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_11_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_11_SLEW": { + "value": "slow" + }, + "PCW_MIO_12_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_12_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_12_SLEW": { + "value": "slow" + }, + "PCW_MIO_13_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_13_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_13_SLEW": { + "value": "slow" + }, + "PCW_MIO_14_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_14_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_14_SLEW": { + "value": "slow" + }, + "PCW_MIO_15_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_15_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_15_SLEW": { + "value": "slow" + }, + "PCW_MIO_16_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_16_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_16_SLEW": { + "value": "slow" + }, + "PCW_MIO_17_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_17_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_17_SLEW": { + "value": "slow" + }, + "PCW_MIO_18_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_18_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_18_SLEW": { + "value": "slow" + }, + "PCW_MIO_19_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_19_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_19_SLEW": { + "value": "slow" + }, + "PCW_MIO_1_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_1_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_1_SLEW": { + "value": "slow" + }, + "PCW_MIO_20_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_20_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_20_SLEW": { + "value": "slow" + }, + "PCW_MIO_21_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_21_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_21_SLEW": { + "value": "slow" + }, + "PCW_MIO_22_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_22_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_22_SLEW": { + "value": "slow" + }, + "PCW_MIO_23_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_23_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_23_SLEW": { + "value": "slow" + }, + "PCW_MIO_24_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_24_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_24_SLEW": { + "value": "slow" + }, + "PCW_MIO_25_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_25_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_25_SLEW": { + "value": "slow" + }, + "PCW_MIO_26_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_26_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_26_SLEW": { + "value": "slow" + }, + "PCW_MIO_27_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_27_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_27_SLEW": { + "value": "slow" + }, + "PCW_MIO_28_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_28_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_28_SLEW": { + "value": "slow" + }, + "PCW_MIO_29_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_29_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_29_SLEW": { + "value": "slow" + }, + "PCW_MIO_2_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_2_SLEW": { + "value": "slow" + }, + "PCW_MIO_30_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_30_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_30_SLEW": { + "value": "slow" + }, + "PCW_MIO_31_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_31_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_31_SLEW": { + "value": "slow" + }, + "PCW_MIO_32_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_32_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_32_SLEW": { + "value": "slow" + }, + "PCW_MIO_33_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_33_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_33_SLEW": { + "value": "slow" + }, + "PCW_MIO_34_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_34_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_34_SLEW": { + "value": "slow" + }, + "PCW_MIO_35_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_35_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_35_SLEW": { + "value": "slow" + }, + "PCW_MIO_36_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_36_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_36_SLEW": { + "value": "slow" + }, + "PCW_MIO_37_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_37_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_37_SLEW": { + "value": "slow" + }, + "PCW_MIO_38_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_38_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_38_SLEW": { + "value": "slow" + }, + "PCW_MIO_39_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_39_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_39_SLEW": { + "value": "slow" + }, + "PCW_MIO_3_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_3_SLEW": { + "value": "slow" + }, + "PCW_MIO_40_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_40_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_40_SLEW": { + "value": "slow" + }, + "PCW_MIO_41_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_41_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_41_SLEW": { + "value": "slow" + }, + "PCW_MIO_42_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_42_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_42_SLEW": { + "value": "slow" + }, + "PCW_MIO_43_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_43_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_43_SLEW": { + "value": "slow" + }, + "PCW_MIO_44_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_44_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_44_SLEW": { + "value": "slow" + }, + "PCW_MIO_45_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_45_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_45_SLEW": { + "value": "slow" + }, + "PCW_MIO_46_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_46_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_46_SLEW": { + "value": "slow" + }, + "PCW_MIO_47_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_47_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_47_SLEW": { + "value": "slow" + }, + "PCW_MIO_48_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_48_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_48_SLEW": { + "value": "slow" + }, + "PCW_MIO_49_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_49_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_49_SLEW": { + "value": "slow" + }, + "PCW_MIO_4_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_4_SLEW": { + "value": "slow" + }, + "PCW_MIO_50_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_50_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_50_SLEW": { + "value": "slow" + }, + "PCW_MIO_51_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_51_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_51_SLEW": { + "value": "slow" + }, + "PCW_MIO_52_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_52_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_52_SLEW": { + "value": "slow" + }, + "PCW_MIO_53_IOTYPE": { + "value": "LVCMOS 1.8V" + }, + "PCW_MIO_53_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_53_SLEW": { + "value": "slow" + }, + "PCW_MIO_5_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_5_SLEW": { + "value": "slow" + }, + "PCW_MIO_6_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_6_SLEW": { + "value": "slow" + }, + "PCW_MIO_7_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_7_SLEW": { + "value": "slow" + }, + "PCW_MIO_8_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_8_SLEW": { + "value": "slow" + }, + "PCW_MIO_9_IOTYPE": { + "value": "LVCMOS 3.3V" + }, + "PCW_MIO_9_PULLUP": { + "value": "enabled" + }, + "PCW_MIO_9_SLEW": { + "value": "slow" + }, + "PCW_MIO_PRIMITIVE": { + "value": "54" + }, + "PCW_MIO_TREE_PERIPHERALS": { + "value": "GPIO#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#GPIO#Quad SPI Flash#ENET Reset#GPIO#GPIO#GPIO#GPIO#UART 0#UART 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#SD 0#SD 0#SD 0#SD 0#SD 0#SD 0#USB Reset#SD 0#GPIO#GPIO#GPIO#GPIO#Enet 0#Enet 0" + }, + "PCW_MIO_TREE_SIGNALS": { + "value": "gpio[0]#qspi0_ss_b#qspi0_io[0]#qspi0_io[1]#qspi0_io[2]#qspi0_io[3]/HOLD_B#qspi0_sclk#gpio[7]#qspi_fbclk#reset#gpio[10]#gpio[11]#gpio[12]#gpio[13]#rx#tx#tx_clk#txd[0]#txd[1]#txd[2]#txd[3]#tx_ctl#rx_clk#rxd[0]#rxd[1]#rxd[2]#rxd[3]#rx_ctl#data[4]#dir#stp#nxt#data[0]#data[1]#data[2]#data[3]#clk#data[5]#data[6]#data[7]#clk#cmd#data[0]#data[1]#data[2]#data[3]#reset#cd#gpio[48]#gpio[49]#gpio[50]#gpio[51]#mdc#mdio" + }, + "PCW_M_AXI_GP0_ENABLE_STATIC_REMAP": { + "value": "0" + }, + "PCW_M_AXI_GP0_ID_WIDTH": { + "value": "12" + }, + "PCW_M_AXI_GP0_SUPPORT_NARROW_BURST": { + "value": "0" + }, + "PCW_M_AXI_GP0_THREAD_ID_WIDTH": { + "value": "12" + }, + "PCW_NAND_CYCLES_T_AR": { + "value": "1" + }, + "PCW_NAND_CYCLES_T_CLR": { + "value": "1" + }, + "PCW_NAND_CYCLES_T_RC": { + "value": "11" + }, + "PCW_NAND_CYCLES_T_REA": { + "value": "1" + }, + "PCW_NAND_CYCLES_T_RR": { + "value": "1" + }, + "PCW_NAND_CYCLES_T_WC": { + "value": "11" + }, + "PCW_NAND_CYCLES_T_WP": { + "value": "1" + }, + "PCW_NOR_CS0_T_CEOE": { + "value": "1" + }, + "PCW_NOR_CS0_T_PC": { + "value": "1" + }, + "PCW_NOR_CS0_T_RC": { + "value": "11" + }, + "PCW_NOR_CS0_T_TR": { + "value": "1" + }, + "PCW_NOR_CS0_T_WC": { + "value": "11" + }, + "PCW_NOR_CS0_T_WP": { + "value": "1" + }, + "PCW_NOR_CS0_WE_TIME": { + "value": "0" + }, + "PCW_NOR_CS1_T_CEOE": { + "value": "1" + }, + "PCW_NOR_CS1_T_PC": { + "value": "1" + }, + "PCW_NOR_CS1_T_RC": { + "value": "11" + }, + "PCW_NOR_CS1_T_TR": { + "value": "1" + }, + "PCW_NOR_CS1_T_WC": { + "value": "11" + }, + "PCW_NOR_CS1_T_WP": { + "value": "1" + }, + "PCW_NOR_CS1_WE_TIME": { + "value": "0" + }, + "PCW_NOR_SRAM_CS0_T_CEOE": { + "value": "1" + }, + "PCW_NOR_SRAM_CS0_T_PC": { + "value": "1" + }, + "PCW_NOR_SRAM_CS0_T_RC": { + "value": "11" + }, + "PCW_NOR_SRAM_CS0_T_TR": { + "value": "1" + }, + "PCW_NOR_SRAM_CS0_T_WC": { + "value": "11" + }, + "PCW_NOR_SRAM_CS0_T_WP": { + "value": "1" + }, + "PCW_NOR_SRAM_CS0_WE_TIME": { + "value": "0" + }, + "PCW_NOR_SRAM_CS1_T_CEOE": { + "value": "1" + }, + "PCW_NOR_SRAM_CS1_T_PC": { + "value": "1" + }, + "PCW_NOR_SRAM_CS1_T_RC": { + "value": "11" + }, + "PCW_NOR_SRAM_CS1_T_TR": { + "value": "1" + }, + "PCW_NOR_SRAM_CS1_T_WC": { + "value": "11" + }, + "PCW_NOR_SRAM_CS1_T_WP": { + "value": "1" + }, + "PCW_NOR_SRAM_CS1_WE_TIME": { + "value": "0" + }, + "PCW_OVERRIDE_BASIC_CLOCK": { + "value": "0" + }, + "PCW_P2F_ENET0_INTR": { + "value": "0" + }, + "PCW_P2F_GPIO_INTR": { + "value": "0" + }, + "PCW_P2F_QSPI_INTR": { + "value": "0" + }, + "PCW_P2F_SDIO0_INTR": { + "value": "0" + }, + "PCW_P2F_UART0_INTR": { + "value": "0" + }, + "PCW_P2F_USB0_INTR": { + "value": "0" + }, + "PCW_PACKAGE_DDR_BOARD_DELAY0": { + "value": "0.279" + }, + "PCW_PACKAGE_DDR_BOARD_DELAY1": { + "value": "0.260" + }, + "PCW_PACKAGE_DDR_BOARD_DELAY2": { + "value": "0.085" + }, + "PCW_PACKAGE_DDR_BOARD_DELAY3": { + "value": "0.092" + }, + "PCW_PACKAGE_DDR_DQS_TO_CLK_DELAY_0": { + "value": "-0.051" + }, + "PCW_PACKAGE_DDR_DQS_TO_CLK_DELAY_1": { + "value": "-0.006" + }, + "PCW_PACKAGE_DDR_DQS_TO_CLK_DELAY_2": { + "value": "-0.009" + }, + "PCW_PACKAGE_DDR_DQS_TO_CLK_DELAY_3": { + "value": "-0.033" + }, + "PCW_PACKAGE_NAME": { + "value": "clg400" + }, + "PCW_PCAP_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_PCAP_PERIPHERAL_FREQMHZ": { + "value": "200" + }, + "PCW_PERIPHERAL_BOARD_PRESET": { + "value": "part0" + }, + "PCW_PJTAG_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_PLL_BYPASSMODE_ENABLE": { + "value": "0" + }, + "PCW_PRESET_BANK0_VOLTAGE": { + "value": "LVCMOS 3.3V" + }, + "PCW_PRESET_BANK1_VOLTAGE": { + "value": "LVCMOS 1.8V" + }, + "PCW_PS7_SI_REV": { + "value": "PRODUCTION" + }, + "PCW_QSPI_GRP_FBCLK_ENABLE": { + "value": "1" + }, + "PCW_QSPI_GRP_FBCLK_IO": { + "value": "MIO 8" + }, + "PCW_QSPI_GRP_IO1_ENABLE": { + "value": "0" + }, + "PCW_QSPI_GRP_SINGLE_SS_ENABLE": { + "value": "1" + }, + "PCW_QSPI_GRP_SINGLE_SS_IO": { + "value": "MIO 1 .. 6" + }, + "PCW_QSPI_GRP_SS1_ENABLE": { + "value": "0" + }, + "PCW_QSPI_INTERNAL_HIGHADDRESS": { + "value": "0xFCFFFFFF" + }, + "PCW_QSPI_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_QSPI_PERIPHERAL_ENABLE": { + "value": "1" + }, + "PCW_QSPI_PERIPHERAL_FREQMHZ": { + "value": "200" + }, + "PCW_QSPI_QSPI_IO": { + "value": "MIO 1 .. 6" + }, + "PCW_SD0_GRP_CD_ENABLE": { + "value": "1" + }, + "PCW_SD0_GRP_CD_IO": { + "value": "MIO 47" + }, + "PCW_SD0_GRP_POW_ENABLE": { + "value": "0" + }, + "PCW_SD0_GRP_WP_ENABLE": { + "value": "0" + }, + "PCW_SD0_PERIPHERAL_ENABLE": { + "value": "1" + }, + "PCW_SD0_SD0_IO": { + "value": "MIO 40 .. 45" + }, + "PCW_SD1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_SDIO0_BASEADDR": { + "value": "0xE0100000" + }, + "PCW_SDIO0_HIGHADDR": { + "value": "0xE0100FFF" + }, + "PCW_SDIO_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_SDIO_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_SDIO_PERIPHERAL_VALID": { + "value": "1" + }, + "PCW_SINGLE_QSPI_DATA_MODE": { + "value": "x4" + }, + "PCW_SMC_CYCLE_T0": { + "value": "NA" + }, + "PCW_SMC_CYCLE_T1": { + "value": "NA" + }, + "PCW_SMC_CYCLE_T2": { + "value": "NA" + }, + "PCW_SMC_CYCLE_T3": { + "value": "NA" + }, + "PCW_SMC_CYCLE_T4": { + "value": "NA" + }, + "PCW_SMC_CYCLE_T5": { + "value": "NA" + }, + "PCW_SMC_CYCLE_T6": { + "value": "NA" + }, + "PCW_SMC_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_SMC_PERIPHERAL_VALID": { + "value": "0" + }, + "PCW_SPI0_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_SPI1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_SPI_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_SPI_PERIPHERAL_VALID": { + "value": "0" + }, + "PCW_S_AXI_HP0_DATA_WIDTH": { + "value": "32" + }, + "PCW_S_AXI_HP0_ID_WIDTH": { + "value": "6" + }, + "PCW_TPIU_PERIPHERAL_CLKSRC": { + "value": "External" + }, + "PCW_TRACE_INTERNAL_WIDTH": { + "value": "2" + }, + "PCW_TRACE_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_TTC0_BASEADDR": { + "value": "0xE0104000" + }, + "PCW_TTC0_CLK0_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_TTC0_CLK0_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_TTC0_CLK1_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_TTC0_CLK1_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_TTC0_CLK2_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_TTC0_CLK2_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_TTC0_HIGHADDR": { + "value": "0xE0104fff" + }, + "PCW_TTC0_PERIPHERAL_ENABLE": { + "value": "1" + }, + "PCW_TTC0_TTC0_IO": { + "value": "EMIO" + }, + "PCW_TTC1_CLK0_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_TTC1_CLK0_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_TTC1_CLK1_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_TTC1_CLK1_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_TTC1_CLK2_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_TTC1_CLK2_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_TTC1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_TTC_PERIPHERAL_FREQMHZ": { + "value": "50" + }, + "PCW_UART0_BASEADDR": { + "value": "0xE0000000" + }, + "PCW_UART0_BAUD_RATE": { + "value": "115200" + }, + "PCW_UART0_GRP_FULL_ENABLE": { + "value": "0" + }, + "PCW_UART0_HIGHADDR": { + "value": "0xE0000FFF" + }, + "PCW_UART0_PERIPHERAL_ENABLE": { + "value": "1" + }, + "PCW_UART0_UART0_IO": { + "value": "MIO 14 .. 15" + }, + "PCW_UART1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_UART_PERIPHERAL_CLKSRC": { + "value": "IO PLL" + }, + "PCW_UART_PERIPHERAL_FREQMHZ": { + "value": "100" + }, + "PCW_UART_PERIPHERAL_VALID": { + "value": "1" + }, + "PCW_UIPARAM_ACT_DDR_FREQ_MHZ": { + "value": "525.000000" + }, + "PCW_UIPARAM_DDR_ADV_ENABLE": { + "value": "0" + }, + "PCW_UIPARAM_DDR_AL": { + "value": "0" + }, + "PCW_UIPARAM_DDR_BL": { + "value": "8" + }, + "PCW_UIPARAM_DDR_BOARD_DELAY0": { + "value": "0.279" + }, + "PCW_UIPARAM_DDR_BOARD_DELAY1": { + "value": "0.260" + }, + "PCW_UIPARAM_DDR_BOARD_DELAY2": { + "value": "0.085" + }, + "PCW_UIPARAM_DDR_BOARD_DELAY3": { + "value": "0.092" + }, + "PCW_UIPARAM_DDR_BUS_WIDTH": { + "value": "16 Bit" + }, + "PCW_UIPARAM_DDR_CLOCK_0_LENGTH_MM": { + "value": "27.95" + }, + "PCW_UIPARAM_DDR_CLOCK_0_PACKAGE_LENGTH": { + "value": "80.4535" + }, + "PCW_UIPARAM_DDR_CLOCK_0_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_CLOCK_1_LENGTH_MM": { + "value": "27.95" + }, + "PCW_UIPARAM_DDR_CLOCK_1_PACKAGE_LENGTH": { + "value": "80.4535" + }, + "PCW_UIPARAM_DDR_CLOCK_1_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_CLOCK_2_LENGTH_MM": { + "value": "0" + }, + "PCW_UIPARAM_DDR_CLOCK_2_PACKAGE_LENGTH": { + "value": "80.4535" + }, + "PCW_UIPARAM_DDR_CLOCK_2_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_CLOCK_3_LENGTH_MM": { + "value": "0" + }, + "PCW_UIPARAM_DDR_CLOCK_3_PACKAGE_LENGTH": { + "value": "80.4535" + }, + "PCW_UIPARAM_DDR_CLOCK_3_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_CLOCK_STOP_EN": { + "value": "0" + }, + "PCW_UIPARAM_DDR_DQS_0_LENGTH_MM": { + "value": "32.14" + }, + "PCW_UIPARAM_DDR_DQS_0_PACKAGE_LENGTH": { + "value": "105.056" + }, + "PCW_UIPARAM_DDR_DQS_0_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQS_1_LENGTH_MM": { + "value": "31.12" + }, + "PCW_UIPARAM_DDR_DQS_1_PACKAGE_LENGTH": { + "value": "66.904" + }, + "PCW_UIPARAM_DDR_DQS_1_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQS_2_LENGTH_MM": { + "value": "0" + }, + "PCW_UIPARAM_DDR_DQS_2_PACKAGE_LENGTH": { + "value": "89.1715" + }, + "PCW_UIPARAM_DDR_DQS_2_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQS_3_LENGTH_MM": { + "value": "0" + }, + "PCW_UIPARAM_DDR_DQS_3_PACKAGE_LENGTH": { + "value": "113.63" + }, + "PCW_UIPARAM_DDR_DQS_3_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQS_TO_CLK_DELAY_0": { + "value": "-0.051" + }, + "PCW_UIPARAM_DDR_DQS_TO_CLK_DELAY_1": { + "value": "-0.006" + }, + "PCW_UIPARAM_DDR_DQS_TO_CLK_DELAY_2": { + "value": "-0.009" + }, + "PCW_UIPARAM_DDR_DQS_TO_CLK_DELAY_3": { + "value": "-0.033" + }, + "PCW_UIPARAM_DDR_DQ_0_LENGTH_MM": { + "value": "32.2" + }, + "PCW_UIPARAM_DDR_DQ_0_PACKAGE_LENGTH": { + "value": "98.503" + }, + "PCW_UIPARAM_DDR_DQ_0_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQ_1_LENGTH_MM": { + "value": "31.08" + }, + "PCW_UIPARAM_DDR_DQ_1_PACKAGE_LENGTH": { + "value": "68.5855" + }, + "PCW_UIPARAM_DDR_DQ_1_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQ_2_LENGTH_MM": { + "value": "0" + }, + "PCW_UIPARAM_DDR_DQ_2_PACKAGE_LENGTH": { + "value": "90.295" + }, + "PCW_UIPARAM_DDR_DQ_2_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_DQ_3_LENGTH_MM": { + "value": "0" + }, + "PCW_UIPARAM_DDR_DQ_3_PACKAGE_LENGTH": { + "value": "103.977" + }, + "PCW_UIPARAM_DDR_DQ_3_PROPOGATION_DELAY": { + "value": "160" + }, + "PCW_UIPARAM_DDR_ECC": { + "value": "Disabled" + }, + "PCW_UIPARAM_DDR_ENABLE": { + "value": "1" + }, + "PCW_UIPARAM_DDR_FREQ_MHZ": { + "value": "525" + }, + "PCW_UIPARAM_DDR_HIGH_TEMP": { + "value": "Normal (0-85)" + }, + "PCW_UIPARAM_DDR_MEMORY_TYPE": { + "value": "DDR 3" + }, + "PCW_UIPARAM_DDR_PARTNO": { + "value": "MT41J256M16 RE-125" + }, + "PCW_UIPARAM_DDR_TRAIN_DATA_EYE": { + "value": "1" + }, + "PCW_UIPARAM_DDR_TRAIN_READ_GATE": { + "value": "1" + }, + "PCW_UIPARAM_DDR_TRAIN_WRITE_LEVEL": { + "value": "1" + }, + "PCW_UIPARAM_DDR_USE_INTERNAL_VREF": { + "value": "0" + }, + "PCW_UIPARAM_GENERATE_SUMMARY": { + "value": "NA" + }, + "PCW_USB0_BASEADDR": { + "value": "0xE0102000" + }, + "PCW_USB0_HIGHADDR": { + "value": "0xE0102fff" + }, + "PCW_USB0_PERIPHERAL_ENABLE": { + "value": "1" + }, + "PCW_USB0_RESET_ENABLE": { + "value": "1" + }, + "PCW_USB0_RESET_IO": { + "value": "MIO 46" + }, + "PCW_USB0_USB0_IO": { + "value": "MIO 28 .. 39" + }, + "PCW_USB1_PERIPHERAL_ENABLE": { + "value": "0" + }, + "PCW_USB_RESET_ENABLE": { + "value": "1" + }, + "PCW_USB_RESET_POLARITY": { + "value": "Active Low" + }, + "PCW_USB_RESET_SELECT": { + "value": "Share reset pin" + }, + "PCW_USE_AXI_FABRIC_IDLE": { + "value": "0" + }, + "PCW_USE_AXI_NONSECURE": { + "value": "0" + }, + "PCW_USE_CORESIGHT": { + "value": "0" + }, + "PCW_USE_CROSS_TRIGGER": { + "value": "0" + }, + "PCW_USE_CR_FABRIC": { + "value": "1" + }, + "PCW_USE_DDR_BYPASS": { + "value": "0" + }, + "PCW_USE_DEBUG": { + "value": "0" + }, + "PCW_USE_DMA0": { + "value": "0" + }, + "PCW_USE_DMA1": { + "value": "0" + }, + "PCW_USE_DMA2": { + "value": "0" + }, + "PCW_USE_DMA3": { + "value": "0" + }, + "PCW_USE_EXPANDED_IOP": { + "value": "0" + }, + "PCW_USE_FABRIC_INTERRUPT": { + "value": "1" + }, + "PCW_USE_HIGH_OCM": { + "value": "0" + }, + "PCW_USE_M_AXI_GP0": { + "value": "1" + }, + "PCW_USE_M_AXI_GP1": { + "value": "0" + }, + "PCW_USE_PROC_EVENT_BUS": { + "value": "0" + }, + "PCW_USE_PS_SLCR_REGISTERS": { + "value": "0" + }, + "PCW_USE_S_AXI_ACP": { + "value": "0" + }, + "PCW_USE_S_AXI_GP0": { + "value": "0" + }, + "PCW_USE_S_AXI_GP1": { + "value": "0" + }, + "PCW_USE_S_AXI_HP0": { + "value": "1" + }, + "PCW_USE_S_AXI_HP1": { + "value": "0" + }, + "PCW_USE_S_AXI_HP2": { + "value": "0" + }, + "PCW_USE_S_AXI_HP3": { + "value": "0" + }, + "PCW_USE_TRACE": { + "value": "0" + }, + "PCW_VALUE_SILVERSION": { + "value": "3" + }, + "PCW_WDT_PERIPHERAL_CLKSRC": { + "value": "CPU_1X" + }, + "PCW_WDT_PERIPHERAL_DIVISOR0": { + "value": "1" + }, + "PCW_WDT_PERIPHERAL_ENABLE": { + "value": "0" + }, + "preset": { + "value": "ZedBoard" + } + }, + "interface_ports": { + "M_AXI_GP0": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Master", + "address_space_ref": "Data", + "base_address": { + "minimum": "0x40000000", + "maximum": "0x7FFFFFFF", + "width": "32" + } + }, + "S_AXI_HP0": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Slave", + "memory_map_ref": "S_AXI_HP0" + } + }, + "addressing": { + "address_spaces": { + "Data": { + "range": "4G", + "width": "32", + "local_memory_map": { + "name": "Data", + "description": "Address Space Segments", + "address_blocks": { + "segment1": { + "name": "segment1", + "display_name": "segment1", + "base_address": "0x00000000", + "range": "256K", + "width": "18", + "usage": "register" + }, + "segment2": { + "name": "segment2", + "display_name": "segment2", + "base_address": "0x00040000", + "range": "256K", + "width": "19", + "usage": "register" + }, + "segment3": { + "name": "segment3", + "display_name": "segment3", + "base_address": "0x00080000", + "range": "512K", + "width": "20", + "usage": "register" + }, + "segment4": { + "name": "segment4", + "display_name": "segment4", + "base_address": "0x00100000", + "range": "1023M", + "width": "30", + "usage": "register" + }, + "M_AXI_GP0": { + "name": "M_AXI_GP0", + "display_name": "M_AXI_GP0", + "base_address": "0x40000000", + "range": "1G", + "width": "31", + "usage": "register" + }, + "M_AXI_GP1": { + "name": "M_AXI_GP1", + "display_name": "M_AXI_GP1", + "base_address": "0x80000000", + "range": "1G", + "width": "32", + "usage": "register" + }, + "IO_Peripheral_Registers": { + "name": "IO_Peripheral_Registers", + "display_name": "IOPeripheralRegisters", + "base_address": "0xE0000000", + "range": "3M", + "width": "32", + "usage": "register" + }, + "SMC_Memories": { + "name": "SMC_Memories", + "display_name": "SMCMemories", + "base_address": "0xE1000000", + "range": "80M", + "width": "32", + "usage": "register" + }, + "SLCR_Registers": { + "name": "SLCR_Registers", + "display_name": "SLCRRegisters", + "base_address": "0xF8000000", + "range": "3K", + "width": "32", + "usage": "register" + }, + "PS_System_Registers": { + "name": "PS_System_Registers", + "display_name": "PSSystemRegisters", + "base_address": "0xF8001000", + "range": "8252K", + "width": "32", + "usage": "register" + }, + "CPU_Private_Registers": { + "name": "CPU_Private_Registers", + "display_name": "CPUPrivateRegisters", + "base_address": "0xF8900000", + "range": "6156K", + "width": "32", + "usage": "register" + }, + "segment5": { + "name": "segment5", + "display_name": "segment5", + "base_address": "0xFC000000", + "range": "32M", + "width": "32", + "usage": "register" + }, + "segment6": { + "name": "segment6", + "display_name": "segment6", + "base_address": "0xFFFC0000", + "range": "256K", + "width": "32", + "usage": "register" + } + } + } + } + } + } + }, + "processing_system7_0_axi_periph": { + "vlnv": "xilinx.com:ip:axi_interconnect:2.1", + "xci_path": "ip/design_1_processing_system7_0_axi_periph_0/design_1_processing_system7_0_axi_periph_0.xci", + "inst_hier_path": "processing_system7_0_axi_periph", + "xci_name": "design_1_processing_system7_0_axi_periph_0", + "parameters": { + "NUM_MI": { + "value": "4" + }, + "SYNCHRONIZATION_STAGES": { + "value": "2" + } + }, + "interface_ports": { + "S00_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "M00_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "M01_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "M02_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "M03_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_RESET": { + "value": "ARESETN" + } + } + }, + "ARESETN": { + "type": "rst", + "direction": "I" + }, + "S00_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S00_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S00_ARESETN" + } + } + }, + "S00_ARESETN": { + "type": "rst", + "direction": "I" + }, + "M00_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M00_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M00_ARESETN" + } + } + }, + "M00_ARESETN": { + "type": "rst", + "direction": "I" + }, + "M01_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M01_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M01_ARESETN" + } + } + }, + "M01_ARESETN": { + "type": "rst", + "direction": "I" + }, + "M02_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M02_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M02_ARESETN" + } + } + }, + "M02_ARESETN": { + "type": "rst", + "direction": "I" + }, + "M03_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M03_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M03_ARESETN" + } + } + }, + "M03_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "components": { + "xbar": { + "vlnv": "xilinx.com:ip:axi_crossbar:2.1", + "xci_name": "design_1_xbar_5", + "xci_path": "ip/design_1_xbar_5/design_1_xbar_5.xci", + "inst_hier_path": "processing_system7_0_axi_periph/xbar", + "parameters": { + "NUM_MI": { + "value": "4" + }, + "NUM_SI": { + "value": "1" + }, + "STRATEGY": { + "value": "0" + } + }, + "interface_ports": { + "S00_AXI": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Slave", + "bridges": [ + "M00_AXI", + "M01_AXI", + "M02_AXI", + "M03_AXI" + ] + } + } + }, + "s00_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "components": { + "auto_pc": { + "vlnv": "xilinx.com:ip:axi_protocol_converter:2.1", + "xci_name": "design_1_auto_pc_1", + "xci_path": "ip/design_1_auto_pc_1/design_1_auto_pc_1.xci", + "inst_hier_path": "processing_system7_0_axi_periph/s00_couplers/auto_pc", + "parameters": { + "MI_PROTOCOL": { + "value": "AXI4LITE" + }, + "SI_PROTOCOL": { + "value": "AXI3" + } + }, + "interface_ports": { + "S_AXI": { + "vlnv": "xilinx.com:interface:aximm_rtl:1.0", + "mode": "Slave", + "bridges": [ + "M_AXI" + ] + } + } + } + }, + "interface_nets": { + "auto_pc_to_s00_couplers": { + "interface_ports": [ + "M_AXI", + "auto_pc/M_AXI" + ] + }, + "s00_couplers_to_auto_pc": { + "interface_ports": [ + "S_AXI", + "auto_pc/S_AXI" + ] + } + }, + "nets": { + "S_ACLK_1": { + "ports": [ + "S_ACLK", + "auto_pc/aclk" + ] + }, + "S_ARESETN_1": { + "ports": [ + "S_ARESETN", + "auto_pc/aresetn" + ] + } + } + }, + "m00_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "interface_nets": { + "m00_couplers_to_m00_couplers": { + "interface_ports": [ + "S_AXI", + "M_AXI" + ] + } + } + }, + "m01_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "interface_nets": { + "m01_couplers_to_m01_couplers": { + "interface_ports": [ + "S_AXI", + "M_AXI" + ] + } + } + }, + "m02_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "interface_nets": { + "m02_couplers_to_m02_couplers": { + "interface_ports": [ + "S_AXI", + "M_AXI" + ] + } + } + }, + "m03_couplers": { + "interface_ports": { + "M_AXI": { + "mode": "Master", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + }, + "S_AXI": { + "mode": "Slave", + "vlnv_bus_definition": "xilinx.com:interface:aximm:1.0", + "vlnv": "xilinx.com:interface:aximm_rtl:1.0" + } + }, + "ports": { + "M_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "M_AXI" + }, + "ASSOCIATED_RESET": { + "value": "M_ARESETN" + } + } + }, + "M_ARESETN": { + "type": "rst", + "direction": "I" + }, + "S_ACLK": { + "type": "clk", + "direction": "I", + "parameters": { + "ASSOCIATED_BUSIF": { + "value": "S_AXI" + }, + "ASSOCIATED_RESET": { + "value": "S_ARESETN" + } + } + }, + "S_ARESETN": { + "type": "rst", + "direction": "I" + } + }, + "interface_nets": { + "m03_couplers_to_m03_couplers": { + "interface_ports": [ + "S_AXI", + "M_AXI" + ] + } + } + } + }, + "interface_nets": { + "m00_couplers_to_processing_system7_0_axi_periph": { + "interface_ports": [ + "M00_AXI", + "m00_couplers/M_AXI" + ] + }, + "m01_couplers_to_processing_system7_0_axi_periph": { + "interface_ports": [ + "M01_AXI", + "m01_couplers/M_AXI" + ] + }, + "m02_couplers_to_processing_system7_0_axi_periph": { + "interface_ports": [ + "M02_AXI", + "m02_couplers/M_AXI" + ] + }, + "m03_couplers_to_processing_system7_0_axi_periph": { + "interface_ports": [ + "M03_AXI", + "m03_couplers/M_AXI" + ] + }, + "processing_system7_0_axi_periph_to_s00_couplers": { + "interface_ports": [ + "S00_AXI", + "s00_couplers/S_AXI" + ] + }, + "s00_couplers_to_xbar": { + "interface_ports": [ + "s00_couplers/M_AXI", + "xbar/S00_AXI" + ] + }, + "xbar_to_m00_couplers": { + "interface_ports": [ + "xbar/M00_AXI", + "m00_couplers/S_AXI" + ] + }, + "xbar_to_m01_couplers": { + "interface_ports": [ + "xbar/M01_AXI", + "m01_couplers/S_AXI" + ] + }, + "xbar_to_m02_couplers": { + "interface_ports": [ + "xbar/M02_AXI", + "m02_couplers/S_AXI" + ] + }, + "xbar_to_m03_couplers": { + "interface_ports": [ + "xbar/M03_AXI", + "m03_couplers/S_AXI" + ] + } + }, + "nets": { + "M00_ACLK_1": { + "ports": [ + "M00_ACLK", + "m00_couplers/M_ACLK" + ] + }, + "M00_ARESETN_1": { + "ports": [ + "M00_ARESETN", + "m00_couplers/M_ARESETN" + ] + }, + "M01_ACLK_1": { + "ports": [ + "M01_ACLK", + "m01_couplers/M_ACLK" + ] + }, + "M01_ARESETN_1": { + "ports": [ + "M01_ARESETN", + "m01_couplers/M_ARESETN" + ] + }, + "M02_ACLK_1": { + "ports": [ + "M02_ACLK", + "m02_couplers/M_ACLK" + ] + }, + "M02_ARESETN_1": { + "ports": [ + "M02_ARESETN", + "m02_couplers/M_ARESETN" + ] + }, + "M03_ACLK_1": { + "ports": [ + "M03_ACLK", + "m03_couplers/M_ACLK" + ] + }, + "M03_ARESETN_1": { + "ports": [ + "M03_ARESETN", + "m03_couplers/M_ARESETN" + ] + }, + "S00_ACLK_1": { + "ports": [ + "S00_ACLK", + "s00_couplers/S_ACLK" + ] + }, + "S00_ARESETN_1": { + "ports": [ + "S00_ARESETN", + "s00_couplers/S_ARESETN" + ] + }, + "processing_system7_0_axi_periph_ACLK_net": { + "ports": [ + "ACLK", + "xbar/aclk", + "s00_couplers/M_ACLK", + "m00_couplers/S_ACLK", + "m01_couplers/S_ACLK", + "m02_couplers/S_ACLK", + "m03_couplers/S_ACLK" + ] + }, + "processing_system7_0_axi_periph_ARESETN_net": { + "ports": [ + "ARESETN", + "xbar/aresetn", + "s00_couplers/M_ARESETN", + "m00_couplers/S_ARESETN", + "m01_couplers/S_ARESETN", + "m02_couplers/S_ARESETN", + "m03_couplers/S_ARESETN" + ] + } + } + }, + "rst_processing_system7_0_100M": { + "vlnv": "xilinx.com:ip:proc_sys_reset:5.0", + "xci_name": "design_1_rst_processing_system7_0_100M_0", + "xci_path": "ip/design_1_rst_processing_system7_0_100M_0/design_1_rst_processing_system7_0_100M_0.xci", + "inst_hier_path": "rst_processing_system7_0_100M" + }, + "xlconcat_0": { + "vlnv": "xilinx.com:ip:xlconcat:2.1", + "xci_name": "design_1_xlconcat_0_0", + "xci_path": "ip/design_1_xlconcat_0_0/design_1_xlconcat_0_0.xci", + "inst_hier_path": "xlconcat_0", + "parameters": { + "NUM_PORTS": { + "value": "4" + }, + "dout_width": { + "value": "4" + } + } + }, + "d_axi_i2s_audio_0": { + "vlnv": "digilentinc.com:user:d_axi_i2s_audio:2.0", + "xci_name": "design_1_d_axi_i2s_audio_0_0", + "xci_path": "ip/design_1_d_axi_i2s_audio_0_0/design_1_d_axi_i2s_audio_0_0.xci", + "inst_hier_path": "d_axi_i2s_audio_0", + "parameters": { + "ENABLE_STREAM": { + "value": "true" + } + } + } + }, + "interface_nets": { + "axi_dma_0_M_AXIS_MM2S": { + "interface_ports": [ + "axi_dma_0/M_AXIS_MM2S", + "d_axi_i2s_audio_0/AXI_MM2S" + ] + }, + "axi_dma_0_M_AXI_MM2S": { + "interface_ports": [ + "axi_dma_0/M_AXI_MM2S", + "axi_mem_intercon/S00_AXI" + ] + }, + "axi_dma_0_M_AXI_S2MM": { + "interface_ports": [ + "axi_dma_0/M_AXI_S2MM", + "axi_mem_intercon/S01_AXI" + ] + }, + "axi_gpio_0_GPIO": { + "interface_ports": [ + "btns_4bits", + "axi_gpio_0/GPIO" + ] + }, + "axi_iic_0_IIC": { + "interface_ports": [ + "iic_rtl", + "axi_iic_0/IIC" + ] + }, + "axi_mem_intercon_M00_AXI": { + "interface_ports": [ + "axi_mem_intercon/M00_AXI", + "processing_system7_0/S_AXI_HP0" + ] + }, + "d_axi_i2s_audio_0_AXI_S2MM": { + "interface_ports": [ + "axi_dma_0/S_AXIS_S2MM", + "d_axi_i2s_audio_0/AXI_S2MM" + ] + }, + "processing_system7_0_DDR": { + "interface_ports": [ + "DDR", + "processing_system7_0/DDR" + ] + }, + "processing_system7_0_FIXED_IO": { + "interface_ports": [ + "FIXED_IO", + "processing_system7_0/FIXED_IO" + ] + }, + "processing_system7_0_M_AXI_GP0": { + "interface_ports": [ + "processing_system7_0/M_AXI_GP0", + "processing_system7_0_axi_periph/S00_AXI" + ] + }, + "processing_system7_0_axi_periph_M00_AXI": { + "interface_ports": [ + "axi_dma_0/S_AXI_LITE", + "processing_system7_0_axi_periph/M00_AXI" + ] + }, + "processing_system7_0_axi_periph_M01_AXI": { + "interface_ports": [ + "d_axi_i2s_audio_0/AXI_L", + "processing_system7_0_axi_periph/M01_AXI" + ] + }, + "processing_system7_0_axi_periph_M02_AXI": { + "interface_ports": [ + "axi_iic_0/S_AXI", + "processing_system7_0_axi_periph/M02_AXI" + ] + }, + "processing_system7_0_axi_periph_M03_AXI": { + "interface_ports": [ + "axi_gpio_0/S_AXI", + "processing_system7_0_axi_periph/M03_AXI" + ] + } + }, + "nets": { + "SDATA_I_0_1": { + "ports": [ + "SDATA_I", + "d_axi_i2s_audio_0/SDATA_I" + ] + }, + "axi_dma_0_mm2s_introut": { + "ports": [ + "axi_dma_0/mm2s_introut", + "xlconcat_0/In0" + ] + }, + "axi_dma_0_s2mm_introut": { + "ports": [ + "axi_dma_0/s2mm_introut", + "xlconcat_0/In1" + ] + }, + "axi_gpio_0_ip2intc_irpt": { + "ports": [ + "axi_gpio_0/ip2intc_irpt", + "xlconcat_0/In3" + ] + }, + "axi_iic_0_iic2intc_irpt": { + "ports": [ + "axi_iic_0/iic2intc_irpt", + "xlconcat_0/In2" + ] + }, + "d_axi_i2s_audio_0_BCLK_O": { + "ports": [ + "d_axi_i2s_audio_0/BCLK_O", + "BCLK_O" + ] + }, + "d_axi_i2s_audio_0_LRCLK_O": { + "ports": [ + "d_axi_i2s_audio_0/LRCLK_O", + "LRCLK_O" + ] + }, + "d_axi_i2s_audio_0_MCLK_O": { + "ports": [ + "d_axi_i2s_audio_0/MCLK_O", + "MCLK_O" + ] + }, + "d_axi_i2s_audio_0_SDATA_O": { + "ports": [ + "d_axi_i2s_audio_0/SDATA_O", + "SDATA_O" + ] + }, + "processing_system7_0_FCLK_CLK0": { + "ports": [ + "processing_system7_0/FCLK_CLK0", + "axi_dma_0/s_axi_lite_aclk", + "axi_dma_0/m_axi_mm2s_aclk", + "axi_dma_0/m_axi_s2mm_aclk", + "axi_gpio_0/s_axi_aclk", + "axi_iic_0/s_axi_aclk", + "axi_mem_intercon/ACLK", + "axi_mem_intercon/S00_ACLK", + "axi_mem_intercon/S01_ACLK", + "axi_mem_intercon/M00_ACLK", + "processing_system7_0/M_AXI_GP0_ACLK", + "processing_system7_0_axi_periph/ACLK", + "processing_system7_0_axi_periph/S00_ACLK", + "processing_system7_0_axi_periph/M00_ACLK", + "processing_system7_0_axi_periph/M01_ACLK", + "processing_system7_0_axi_periph/M02_ACLK", + "processing_system7_0_axi_periph/M03_ACLK", + "rst_processing_system7_0_100M/slowest_sync_clk", + "processing_system7_0/S_AXI_HP0_ACLK", + "d_axi_i2s_audio_0/CLK_100MHZ_I", + "d_axi_i2s_audio_0/S_AXIS_MM2S_ACLK", + "d_axi_i2s_audio_0/M_AXIS_S2MM_ACLK", + "d_axi_i2s_audio_0/AXI_L_aclk" + ] + }, + "processing_system7_0_FCLK_RESET0_N": { + "ports": [ + "processing_system7_0/FCLK_RESET0_N", + "rst_processing_system7_0_100M/ext_reset_in" + ] + }, + "rst_processing_system7_0_100M_interconnect_aresetn": { + "ports": [ + "rst_processing_system7_0_100M/interconnect_aresetn", + "axi_mem_intercon/ARESETN", + "processing_system7_0_axi_periph/ARESETN" + ] + }, + "rst_processing_system7_0_100M_peripheral_aresetn": { + "ports": [ + "rst_processing_system7_0_100M/peripheral_aresetn", + "axi_dma_0/axi_resetn", + "axi_gpio_0/s_axi_aresetn", + "axi_iic_0/s_axi_aresetn", + "axi_mem_intercon/S00_ARESETN", + "axi_mem_intercon/S01_ARESETN", + "axi_mem_intercon/M00_ARESETN", + "processing_system7_0_axi_periph/S00_ARESETN", + "processing_system7_0_axi_periph/M00_ARESETN", + "processing_system7_0_axi_periph/M01_ARESETN", + "processing_system7_0_axi_periph/M02_ARESETN", + "processing_system7_0_axi_periph/M03_ARESETN", + "d_axi_i2s_audio_0/S_AXIS_MM2S_ARESETN", + "d_axi_i2s_audio_0/M_AXIS_S2MM_ARESETN", + "d_axi_i2s_audio_0/AXI_L_aresetn" + ] + }, + "xlconcat_0_dout": { + "ports": [ + "xlconcat_0/dout", + "processing_system7_0/IRQ_F2P" + ] + } + }, + "addressing": { + "/axi_dma_0": { + "address_spaces": { + "Data_MM2S": { + "segments": { + "SEG_processing_system7_0_HP0_DDR_LOWOCM": { + "address_block": "/processing_system7_0/S_AXI_HP0/HP0_DDR_LOWOCM", + "offset": "0x00000000", + "range": "512M" + } + } + }, + "Data_S2MM": { + "segments": { + "SEG_processing_system7_0_HP0_DDR_LOWOCM": { + "address_block": "/processing_system7_0/S_AXI_HP0/HP0_DDR_LOWOCM", + "offset": "0x00000000", + "range": "512M" + } + } + } + } + }, + "/processing_system7_0": { + "address_spaces": { + "Data": { + "segments": { + "SEG_axi_dma_0_Reg": { + "address_block": "/axi_dma_0/S_AXI_LITE/Reg", + "offset": "0x40400000", + "range": "64K" + }, + "SEG_axi_gpio_0_Reg": { + "address_block": "/axi_gpio_0/S_AXI/Reg", + "offset": "0x41200000", + "range": "64K" + }, + "SEG_axi_iic_0_Reg": { + "address_block": "/axi_iic_0/S_AXI/Reg", + "offset": "0x41600000", + "range": "64K" + }, + "SEG_d_axi_i2s_audio_0_AXI_L_reg": { + "address_block": "/d_axi_i2s_audio_0/AXI_L/AXI_L_reg", + "offset": "0x43C00000", + "range": "64K", + "offset_base_param": "C_AXI_L_BASEADDR", + "offset_high_param": "C_AXI_L_HIGHADDR" + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/design_1.bda b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/design_1.bda new file mode 100644 index 0000000..97ee785 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/design_1.bda @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + 0x41200000 + C_BASEADDR + 0x4120FFFF + C_HIGHADDR + Data + /processing_system7_0 + M_AXI_GP0 + SEG_axi_gpio_0_Reg + xilinx.com:ip:processing_system7:5.5 + both + /axi_gpio_0 + S_AXI + Reg + xilinx.com:ip:axi_gpio:2.0 + register + AC + + + 0x00000000 + C_BASEADDR + 0x1FFFFFFF + C_HIGHADDR + Data_S2MM + /axi_dma_0 + M_AXI_S2MM + SEG_processing_system7_0_HP0_DDR_LOWOCM + xilinx.com:ip:axi_dma:7.1 + both + /processing_system7_0 + S_AXI_HP0 + HP0_DDR_LOWOCM + xilinx.com:ip:processing_system7:5.5 + memory + AC + + + 0x43C00000 + C_AXI_L_BASEADDR + 0x43C0FFFF + C_AXI_L_HIGHADDR + Data + /processing_system7_0 + M_AXI_GP0 + SEG_d_axi_i2s_audio_0_AXI_L_reg + xilinx.com:ip:processing_system7:5.5 + both + /d_axi_i2s_audio_0 + AXI_L + AXI_L_reg + digilentinc.com:user:d_axi_i2s_audio:2.0 + register + AC + + + 2 + design_1 + VR + + + 0x00000000 + C_BASEADDR + 0x1FFFFFFF + C_HIGHADDR + Data_MM2S + /axi_dma_0 + M_AXI_MM2S + SEG_processing_system7_0_HP0_DDR_LOWOCM + xilinx.com:ip:axi_dma:7.1 + both + /processing_system7_0 + S_AXI_HP0 + HP0_DDR_LOWOCM + xilinx.com:ip:processing_system7:5.5 + memory + AC + + + 0x40400000 + C_BASEADDR + 0x4040FFFF + C_HIGHADDR + Data + /processing_system7_0 + M_AXI_GP0 + SEG_axi_dma_0_Reg + xilinx.com:ip:processing_system7:5.5 + both + /axi_dma_0 + S_AXI_LITE + Reg + xilinx.com:ip:axi_dma:7.1 + register + AC + + + 0x41600000 + C_BASEADDR + 0x4160FFFF + C_HIGHADDR + Data + /processing_system7_0 + M_AXI_GP0 + SEG_axi_iic_0_Reg + xilinx.com:ip:processing_system7:5.5 + both + /axi_iic_0 + S_AXI + Reg + xilinx.com:ip:axi_iic:2.1 + register + AC + + + design_1 + BC + + + active + 2 + PM + + + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_auto_pc_0/design_1_auto_pc_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_auto_pc_0/design_1_auto_pc_0.xci new file mode 100644 index 0000000..ad0326b --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_auto_pc_0/design_1_auto_pc_0.xci @@ -0,0 +1,262 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_auto_pc_0 + + + S_AXI:M_AXI + + ARESETN + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 1 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 16 + 8 + 1 + 8 + 1 + 0.0 + AXI3 + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 0 + ACTIVE_LOW + INTERCONNECT + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 8 + 8 + 1 + 8 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 1 + 1 + 1 + 32 + 1 + 1 + 1 + 0 + 1 + 1 + zynq + 0 + 1 + 0 + 2 + 32 + 0 + 0 + 0 + design_1_auto_pc_0 + 32 + 1 + AXI3 + READ_WRITE + 0 + AXI4 + 2 + 0 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 25 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_auto_pc_0 + rtl + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_auto_pc_1/design_1_auto_pc_1.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_auto_pc_1/design_1_auto_pc_1.xci new file mode 100644 index 0000000..a3db3eb --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_auto_pc_1/design_1_auto_pc_1.xci @@ -0,0 +1,260 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_auto_pc_1 + + + S_AXI:M_AXI + + ARESETN + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 8 + 4 + 8 + 4 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 0 + ACTIVE_LOW + INTERCONNECT + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 12 + 0 + 16 + 8 + 4 + 8 + 4 + 0.0 + AXI3 + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 1 + 1 + 1 + 32 + 12 + 1 + 1 + 0 + 1 + 1 + zynq + 0 + 2 + 1 + 2 + 32 + 0 + 0 + 0 + design_1_auto_pc_1 + 32 + 12 + AXI4LITE + READ_WRITE + 0 + AXI3 + 2 + 0 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 25 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_auto_pc_1 + rtl + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_dma_0_0/design_1_axi_dma_0_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_dma_0_0/design_1_axi_dma_0_0.xci new file mode 100644 index 0000000..28a5897 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_dma_0_0/design_1_axi_dma_0_0.xci @@ -0,0 +1,522 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_axi_dma_0_0 + + + 0 + 0 + 1 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 256 + 1 + 2 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 0 + 0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 1 + 1 + 1 + 0 + 0 + undef + 0.0 + 4 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 8 + 1 + 2 + 1 + 0.0 + AXI4 + READ_ONLY + 0 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 8 + 2 + 1 + 1 + 0.0 + AXI4 + WRITE_ONLY + 0 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 1 + 1 + 1 + 0 + 0 + undef + 0.0 + 4 + 0 + 0 + 0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + 10 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 2 + 1 + 2 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 125 + 0 + zynq + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 8 + 32 + 32 + 32 + 32 + 32 + 32 + 32 + 1 + 1 + 0 + 8 + 0 + 23 + 0 + 32 + 32 + design_1_axi_dma_0_0 + 32 + 125 + 0 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 32 + 32 + 32 + 0 + 8 + 1 + 1 + 0 + 8 + 32 + 0 + 23 + 0 + 0 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 26 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_axi_dma_0_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci new file mode 100644 index 0000000..34ae54a --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci @@ -0,0 +1,168 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_axi_gpio_0_0 + + + 1 + 9 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 2 + 1 + 2 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 0 + 1 + 0 + 0 + 0 + 0x00000000 + 0x00000000 + zynq + 32 + 4 + 1 + 0 + 0xFFFFFFFF + 0xFFFFFFFF + 1 + 0 + 0 + 0 + 0x00000000 + 0x00000000 + 32 + 4 + 1 + 0 + 0xFFFFFFFF + 0xFFFFFFFF + design_1_axi_gpio_0_0 + Custom + btns_4bits + true + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 27 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_iic_0_0/design_1_axi_iic_0_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_iic_0_0/design_1_axi_iic_0_0.xci new file mode 100644 index 0000000..51bfadc --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_iic_0_0/design_1_axi_iic_0_0.xci @@ -0,0 +1,164 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_axi_iic_0_0 + + + 1 + 9 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 2 + 1 + 2 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 0 + 0x00 + 0 + zynq + 1 + 100000 + 0 + 0 + 1 + 0 + 100000000 + 0 + 32 + 100.0 + 0x00 + 0 + 1 + 0 + 0 + 1 + 0 + 32 + design_1_axi_iic_0_0 + audio_i2c + 100 + 7_bit + true + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 1 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_axi_iic_0_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_mem_intercon_0/design_1_axi_mem_intercon_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_mem_intercon_0/design_1_axi_mem_intercon_0.xci new file mode 100644 index 0000000..951d563 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_axi_mem_intercon_0/design_1_axi_mem_intercon_0.xci @@ -0,0 +1,363 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_axi_mem_intercon_0 + + + design_1_axi_mem_intercon_0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 32 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator_AppCore + 26 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_axi_mem_intercon_0 + + ../../ipshared + 2021.2 + GLOBAL + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_d_axi_i2s_audio_0_0/design_1_d_axi_i2s_audio_0_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_d_axi_i2s_audio_0_0/design_1_d_axi_i2s_audio_0_0.xci new file mode 100644 index 0000000..d78e9e6 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_d_axi_i2s_audio_0_0/design_1_d_axi_i2s_audio_0_0.xci @@ -0,0 +1,233 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_d_axi_i2s_audio_0_0 + + + 0 + 6 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 1 + 1 + 1 + 0 + 0 + undef + 0.0 + 4 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 1 + 1 + 1 + 0 + 0 + undef + 0.0 + 4 + 0 + 0 + 0 + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 0 + 6 + 32 + 32 + 24 + false + 6 + 0xFFFFFFFF + 32 + 0x00000000 + 32 + 24 + design_1_d_axi_i2s_audio_0_0 + true + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 52 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_d_axi_i2s_audio_0_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_0/design_1_processing_system7_0_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_0/design_1_processing_system7_0_0.xci new file mode 100644 index 0000000..ab33249 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_0/design_1_processing_system7_0_0.xci @@ -0,0 +1,2455 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_processing_system7_0_0 + + + 1 + LEVEL_HIGH + 1 + LEVEL_HIGH + 1 + LEVEL_HIGH + 1 + LEVEL_HIGH + TDM + 8 + false + 11 + 11 + true + + true + 8 + + COMPONENTS + ROW_COLUMN_BANK + Single + 1250 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + 1 + LEVEL_HIGH + 1 + LEVEL_HIGH + + + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + + + + + 0 + 0 + 0.0 + + + + + 0 + 0 + 0.0 + + + + + 0 + 0 + 0.0 + 0 + ACTIVE_LOW + 0 + ACTIVE_LOW + 0 + ACTIVE_LOW + 0 + ACTIVE_LOW + false + + + + 100000000 + 0 + 0 + 0.0 + + 100000000 + 0 + 0 + 0 + 0 + 0 + undef + 0.0 + 0 + 0 + 0 + 0 + 4 + LEVEL_HIGH:LEVEL_HIGH:LEVEL_HIGH:LEVEL_HIGH + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + false + false + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 12 + 0 + 16 + 4 + 4 + 0.0 + AXI3 + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 6 + 0 + 16 + 1 + 1 + 0.0 + AXI3 + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + 1 + 0 + 0 + 0 + + 1 + 100000000 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + + + + 100000000 + 0 + 0 + 0.0 + design_1_processing_system7_0_0 + 650.000000 + 23.8095 + 23.8095 + 10.000000 + 10.096154 + 125.000000 + 10.000000 + 100.000000 + 10.000000 + 10.000000 + 10.000000 + 50 + 200.000000 + 200.000000 + 50.000000 + 10.000000 + 10.000000 + 200.000000 + 108.333336 + 108.333336 + 108.333336 + 108.333336 + 108.333336 + 108.333336 + 50 + 100.000000 + 60 + 60 + 108.333336 + 6:2:1 + 650 + 26 + 0xE0008000 + <Select> + 0 + <Select> + 0xE0008FFF + External + 0 + -1 + 0xE0009000 + <Select> + 0 + <Select> + 0xE0009FFF + External + 0 + -1 + IO PLL + 1 + 1 + 100 + 0 + 100000000 + 10000000 + 10000000 + 10000000 + 0 + 0 + 0 + 0 + 667 + 1300.000 + ARM PLL + 2 + 50 + DDR PLL + 52 + 2 + 10.159 + 21 + 1050.000 + HPR(0)/LPR(32) + 15 + 2 + DDR PLL + 2 + 0 + 0 + 0 + 0 + <Select> + <Select> + <Select> + <Select> + <Select> + <Select> + <Select> + <Select> + 0x00100000 + 0x1FFFFFFF + 2 + 4 + 4 + 32 + <Select> + <Select> + 0xE000B000 + MIO 16 .. 27 + 1 + MIO 52 .. 53 + 0xE000BFFF + IO PLL + 8 + 1 + 1 + 1000 Mbps + 1 + MIO 9 + 0xE000C000 + <Select> + 0 + <Select> + 0xE000CFFF + IO PLL + 1 + 1 + 0 + 1000 Mbps + 0 + <Select> + 1 + Active Low + Share reset pin + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 1 + 0 + 0 + IO PLL + 5 + 2 + IO PLL + 1 + 1 + IO PLL + 1 + 1 + IO PLL + 1 + 1 + TRUE + FALSE + FALSE + FALSE + 100 + 50 + 50 + 50 + 1 + 0 + 0 + 0 + <Select> + <Select> + <Select> + <Select> + <Select> + <Select> + <Select> + <Select> + 0 + 4 + 4 + 0 + 4 + 4 + 0xE000A000 + 0 + <Select> + 64 + 0xE000AFFF + 1 + MIO + 0 + 0xE0004000 + 0 + <Select> + 0xE0004FFF + <Select> + 0 + 0 + <Select> + 0xE0005000 + 0 + <Select> + 0xE0005FFF + <Select> + 0 + 0 + <Select> + 25 + 1 + Active Low + <Select> + None + 0 + 0 + 20 + 1000.000 + 1 + DIRECT + inout + LVCMOS 3.3V + enabled + slow + inout + LVCMOS 3.3V + enabled + slow + inout + LVCMOS 3.3V + enabled + slow + inout + LVCMOS 3.3V + enabled + slow + inout + LVCMOS 3.3V + enabled + slow + in + LVCMOS 3.3V + enabled + slow + out + LVCMOS 3.3V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + out + LVCMOS 3.3V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 3.3V + disabled + slow + out + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 3.3V + disabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + in + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 3.3V + disabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + out + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 1.8V + enabled + slow + inout + LVCMOS 3.3V + disabled + slow + out + LVCMOS 3.3V + disabled + slow + out + LVCMOS 3.3V + disabled + slow + out + LVCMOS 3.3V + disabled + slow + out + LVCMOS 3.3V + enabled + slow + 54 + GPIO#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#Quad SPI Flash#GPIO#Quad SPI Flash#ENET Reset#GPIO#GPIO#GPIO#GPIO#UART 0#UART 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#Enet 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#USB 0#SD 0#SD 0#SD 0#SD 0#SD 0#SD 0#USB Reset#SD 0#GPIO#GPIO#GPIO#GPIO#Enet 0#Enet 0 + gpio[0]#qspi0_ss_b#qspi0_io[0]#qspi0_io[1]#qspi0_io[2]#qspi0_io[3]/HOLD_B#qspi0_sclk#gpio[7]#qspi_fbclk#reset#gpio[10]#gpio[11]#gpio[12]#gpio[13]#rx#tx#tx_clk#txd[0]#txd[1]#txd[2]#txd[3]#tx_ctl#rx_clk#rxd[0]#rxd[1]#rxd[2]#rxd[3]#rx_ctl#data[4]#dir#stp#nxt#data[0]#data[1]#data[2]#data[3]#clk#data[5]#data[6]#data[7]#clk#cmd#data[0]#data[1]#data[2]#data[3]#reset#cd#gpio[48]#gpio[49]#gpio[50]#gpio[51]#mdc#mdio + 0 + 100 + 12 + 0 + 12 + 0 + 10 + 12 + 0 + 12 + 1 + 1 + 11 + 1 + 1 + 11 + 1 + 0 + <Select> + <Select> + 0 + 1 + 1 + 11 + 1 + 11 + 1 + 0 + 1 + 1 + 11 + 1 + 11 + 1 + 0 + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0 + <Select> + <Select> + 0 + 1 + 1 + 11 + 1 + 11 + 1 + 0 + 1 + 1 + 11 + 1 + 11 + 1 + 0 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0.279 + 0.260 + 0.085 + 0.092 + -0.051 + -0.006 + -0.009 + -0.033 + clg400 + IO PLL + 5 + 200 + part0 + 0 + <Select> + 0 + LVCMOS 3.3V + LVCMOS 1.8V + PRODUCTION + 1 + MIO 8 + 0 + <Select> + 1 + MIO 1 .. 6 + 0 + <Select> + 0xFCFFFFFF + IO PLL + 5 + 1 + 200 + MIO 1 .. 6 + 1 + MIO 47 + 0 + <Select> + 0 + <Select> + 1 + MIO 40 .. 45 + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0xE0100000 + 0xE0100FFF + 0xE0101000 + 0xE0101FFF + IO PLL + 20 + 50 + 1 + x4 + NA + NA + NA + NA + NA + NA + NA + IO PLL + 1 + 100 + 0 + 0xE0006000 + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0xE0006FFF + 0 + <Select> + 0xE0007000 + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0xE0007FFF + 0 + <Select> + IO PLL + 1 + 166.666666 + 0 + 31 + 31 + 10 + 3 + 10 + 6 + 10 + 6 + 32 + 100 + 6 + 64 + 10 + 6 + 64 + 10 + 6 + 64 + 10 + 6 + External + 1 + 200 + 12 + 128 + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0 + <Select> + 0 + <Select> + 2 + 0 + 8 + <Select> + 0xE0104000 + CPU_1X + 1 + 133.333333 + CPU_1X + 1 + 133.333333 + CPU_1X + 1 + 133.333333 + 0xE0104fff + 1 + EMIO + 0xE0105000 + CPU_1X + 1 + 133.333333 + CPU_1X + 1 + 133.333333 + CPU_1X + 1 + 133.333333 + 0xE0105fff + 0 + <Select> + 50 + 0xE0000000 + 115200 + 0 + <Select> + 0xE0000FFF + 1 + MIO 14 .. 15 + 0xE0001000 + 115200 + 0 + <Select> + 0xE0001FFF + 0 + <Select> + IO PLL + 10 + 100 + 1 + 525.000000 + 0 + 0 + 3 + 8 + 0.279 + 0.260 + 0.085 + 0.092 + 16 Bit + 7 + 27.95 + 80.4535 + 160 + 27.95 + 80.4535 + 160 + 0 + 80.4535 + 160 + 0 + 80.4535 + 160 + 0 + 10 + 6 + 4096 MBits + 32.14 + 105.056 + 160 + 31.12 + 66.904 + 160 + 0 + 89.1715 + 160 + 0 + 113.63 + 160 + -0.051 + -0.006 + -0.009 + -0.033 + 32.2 + 98.503 + 160 + 31.08 + 68.5855 + 160 + 0 + 90.295 + 160 + 0 + 103.977 + 160 + 16 Bits + Disabled + 1 + 525 + Normal (0-85) + DDR 3 + MT41J256M16 RE-125 + 15 + DDR3_1066F + 1 + 1 + 1 + 40.0 + 35.0 + 48.91 + 7 + 7 + 0 + NA + 0xE0102000 + 0xE0102fff + 1 + 60 + 1 + MIO 46 + MIO 28 .. 39 + 0xE0103000 + 0xE0103fff + 0 + 60 + 0 + <Select> + <Select> + 1 + Active Low + Share reset pin + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 3 + CPU_1X + 1 + 0 + 133.333333 + <Select> + ZedBoard + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 6 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_processing_system7_0_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_axi_periph_0/design_1_processing_system7_0_axi_periph_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_axi_periph_0/design_1_processing_system7_0_axi_periph_0.xci new file mode 100644 index 0000000..83513fe --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_processing_system7_0_axi_periph_0/design_1_processing_system7_0_axi_periph_0.xci @@ -0,0 +1,360 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_processing_system7_0_axi_periph_0 + + + design_1_processing_system7_0_axi_periph_0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 1 + 2 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 32 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator_AppCore + 26 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_processing_system7_0_axi_periph_0 + + ../../ipshared + 2021.2 + GLOBAL + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_rst_processing_system7_0_100M_0/design_1_rst_processing_system7_0_100M_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_rst_processing_system7_0_100M_0/design_1_rst_processing_system7_0_100M_0.xci new file mode 100644 index 0000000..a14577c --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_rst_processing_system7_0_100M_0/design_1_rst_processing_system7_0_100M_0.xci @@ -0,0 +1,101 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_rst_processing_system7_0_100M_0 + + + 0 + ACTIVE_LOW + 0 + + + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 0 + 0 + ACTIVE_LOW + 0 + 0 + 0 + 0 + 0 + 4 + 0 + 4 + zynq + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 4 + 1 + 1 + 1 + 1 + design_1_rst_processing_system7_0_100M_0 + Custom + false + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 13 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_rst_processing_system7_0_100M_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xbar_4/design_1_xbar_4.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xbar_4/design_1_xbar_4.xci new file mode 100644 index 0000000..b1ecfa9 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xbar_4/design_1_xbar_4.xci @@ -0,0 +1,3572 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_xbar_4 + + + M00_AXI:M01_AXI:M02_AXI:M03_AXI:M04_AXI:M05_AXI:M06_AXI:M07_AXI:M08_AXI:M09_AXI:M10_AXI:M11_AXI:M12_AXI:M13_AXI:M14_AXI:M15_AXI:S00_AXI:S01_AXI:S02_AXI:S03_AXI:S04_AXI:S05_AXI:S06_AXI:S07_AXI:S08_AXI:S09_AXI:S10_AXI:S11_AXI:S12_AXI:S13_AXI:S14_AXI:S15_AXI + + ARESETN + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 1 + 0 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 8 + 8 + 1 + 8 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 256 + 2 + 1 + 2 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 0 + ACTIVE_LOW + INTERCONNECT + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 256 + 8 + 1 + 2 + 1 + 0.0 + AXI4 + READ_ONLY + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 256 + 2 + 1 + 8 + 1 + 0.0 + AXI4 + WRITE_ONLY + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 1 + 1 + 1 + 32 + 1 + 0 + 1 + 0 + 1 + 1 + zynq + 0x0000001d + 0x0000000000000000 + 0x00000001 + 0x00000008 + 0x00000000 + 0x00000002 + 0x00000008 + 1 + 1 + 2 + 0 + 0x0000000000000000 + 0x0000000100000000 + 0x0000000200000008 + 0x0000000000000000 + 0x0000000000000000 + 0x0000000800000002 + 1 + 32 + 0 + 0 + 0 + SAMD + design_1_xbar_4 + 32 + 1 + 29 + 0x0000000000000000 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 8 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 8 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 4 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 4 + 1 + 2 + AXI4 + 0 + 0 + 0 + 0x00000000 + 8 + 0 + 0 + 2 + 0 + 0x00000001 + 2 + 0 + 0 + 8 + 0 + 0x00000002 + 2 + 0 + 0 + 2 + 0 + 0x00000003 + 2 + 0 + 0 + 2 + 0 + 0x00000004 + 2 + 0 + 0 + 2 + 0 + 0x00000005 + 2 + 0 + 0 + 2 + 0 + 0x00000006 + 2 + 0 + 0 + 2 + 0 + 0x00000007 + 2 + 0 + 0 + 2 + 0 + 0x00000008 + 2 + 0 + 0 + 2 + 0 + 0x00000009 + 2 + 0 + 0 + 2 + 0 + 0x0000000a + 2 + 0 + 0 + 2 + 0 + 0x0000000b + 2 + 0 + 0 + 2 + 0 + 0x0000000c + 2 + 0 + 0 + 2 + 0 + 0x0000000d + 2 + 0 + 0 + 2 + 0 + 0x0000000e + 2 + 0 + 0 + 2 + 0 + 0x0000000f + 2 + 0 + 0 + 2 + 0 + 0 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 26 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_xbar_4 + rtl + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xbar_5/design_1_xbar_5.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xbar_5/design_1_xbar_5.xci new file mode 100644 index 0000000..e996877 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xbar_5/design_1_xbar_5.xci @@ -0,0 +1,3625 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_xbar_5 + + + M00_AXI:M01_AXI:M02_AXI:M03_AXI:M04_AXI:M05_AXI:M06_AXI:M07_AXI:M08_AXI:M09_AXI:M10_AXI:M11_AXI:M12_AXI:M13_AXI:M14_AXI:M15_AXI:S00_AXI:S01_AXI:S02_AXI:S03_AXI:S04_AXI:S05_AXI:S06_AXI:S07_AXI:S08_AXI:S09_AXI:S10_AXI:S11_AXI:S12_AXI:S13_AXI:S14_AXI:S15_AXI + + ARESETN + design_1_processing_system7_0_0_FCLK_CLK0 + 100000000 + 0 + 0 + 0.0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 2 + 1 + 2 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 2 + 1 + 2 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 2 + 1 + 2 + 1 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 0 + ACTIVE_LOW + INTERCONNECT + 32 + 0 + 0 + 0 + design_1_processing_system7_0_0_FCLK_CLK0 + 32 + 100000000 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + 1 + 1 + 0 + 0 + 1 + 8 + 4 + 8 + 4 + 0.0 + AXI4LITE + READ_WRITE + 0 + 0 + 0 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 0 + 0 + 0 + + 32 + 100000000 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 256 + 1 + 1 + 1 + 1 + 0.0 + AXI4 + READ_WRITE + 0 + 0 + 1 + 0 + 0 + 32 + 1 + 1 + 1 + 32 + 1 + 2 + 1 + 0 + 1 + 0 + zynq + 0x00000010000000100000001000000010 + 0x000000004120000000000000416000000000000043c000000000000040400000 + 0x00000001000000010000000100000001 + 0x00000001000000010000000100000001 + 0x00000000000000000000000000000000 + 0x00000001000000010000000100000001 + 0x00000001000000010000000100000001 + 1 + 4 + 1 + 1 + 0x00000000 + 0x00000000 + 0x00000001 + 0x00000001 + 0x00000000 + 0x00000001 + 1 + 32 + 0 + 0 + 0 + SASD + design_1_xbar_5 + 32 + 0 + 16 + 0x0000000040400000 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 16 + 0x0000000043C00000 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 16 + 0x0000000041600000 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 16 + 0x0000000041200000 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 0xffffffffffffffff + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 4 + 1 + AXI4LITE + 0 + 1 + 0 + 0x00000000 + 1 + 1 + 0 + 1 + 0 + 0x00000001 + 1 + 0 + 0 + 1 + 0 + 0x00000002 + 1 + 0 + 0 + 1 + 0 + 0x00000003 + 1 + 0 + 0 + 1 + 0 + 0x00000004 + 1 + 0 + 0 + 1 + 0 + 0x00000005 + 1 + 0 + 0 + 1 + 0 + 0x00000006 + 1 + 0 + 0 + 1 + 0 + 0x00000007 + 1 + 0 + 0 + 1 + 0 + 0x00000008 + 1 + 0 + 0 + 1 + 0 + 0x00000009 + 1 + 0 + 0 + 1 + 0 + 0x0000000a + 1 + 0 + 0 + 1 + 0 + 0x0000000b + 1 + 0 + 0 + 1 + 0 + 0x0000000c + 1 + 0 + 0 + 1 + 0 + 0x0000000d + 1 + 0 + 0 + 1 + 0 + 0x0000000e + 1 + 0 + 0 + 1 + 0 + 0x0000000f + 1 + 0 + 0 + 1 + 0 + 0 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 26 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_xbar_5 + rtl + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xlconcat_0_0/design_1_xlconcat_0_0.xci b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xlconcat_0_0/design_1_xlconcat_0_0.xci new file mode 100644 index 0000000..6190332 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ip/design_1_xlconcat_0_0/design_1_xlconcat_0_0.xci @@ -0,0 +1,436 @@ + + + xilinx.com + xci + unknown + 1.0 + + + design_1_xlconcat_0_0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 4 + 4 + design_1_xlconcat_0_0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 4 + 4 + zynq + tul.com.tw:pynq-z2:part0:1.0 + + xc7z020 + clg400 + VERILOG + + MIXED + -1 + + + TRUE + TRUE + IP_Integrator + 4 + TRUE + ../../../../../../ARM_DMA.gen/sources_1/bd/design_1/ip/design_1_xlconcat_0_0 + + ../../ipshared + 2021.2 + OUT_OF_CONTEXT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ui/bd_1f5defd0.ui b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ui/bd_1f5defd0.ui new file mode 100644 index 0000000..0673427 --- /dev/null +++ b/ARM_DMA/ARM_DMA.srcs/sources_1/bd/design_1/ui/bd_1f5defd0.ui @@ -0,0 +1,58 @@ +{ + "ActiveEmotionalView":"Default View", + "Default View_ScaleFactor":"0.512871", + "Default View_TopLeft":"-328,0", + "ExpandedHierarchyInLayout":"", + "guistr":"# # String gsaved with Nlview 7.0r4 2019-12-20 bk=1.5203 VDI=41 GEI=36 GUI=JA:10.0 TLS +# -string -flagsOSRD +preplace port DDR -pg 1 -lvl 6 -x 2060 -y 150 -defaultsOSRD +preplace port FIXED_IO -pg 1 -lvl 6 -x 2060 -y 170 -defaultsOSRD +preplace port btns_4bits -pg 1 -lvl 6 -x 2060 -y 440 -defaultsOSRD +preplace port iic_rtl -pg 1 -lvl 6 -x 2060 -y 600 -defaultsOSRD +preplace port port-id_MCLK_O -pg 1 -lvl 6 -x 2060 -y 880 -defaultsOSRD +preplace port port-id_BCLK_O -pg 1 -lvl 6 -x 2060 -y 840 -defaultsOSRD +preplace port port-id_LRCLK_O -pg 1 -lvl 6 -x 2060 -y 860 -defaultsOSRD +preplace port port-id_SDATA_O -pg 1 -lvl 6 -x 2060 -y 900 -defaultsOSRD +preplace port port-id_SDATA_I -pg 1 -lvl 0 -x 0 -y 810 -defaultsOSRD +preplace inst axi_dma_0 -pg 1 -lvl 3 -x 930 -y 440 -defaultsOSRD +preplace inst axi_gpio_0 -pg 1 -lvl 5 -x 1780 -y 450 -defaultsOSRD +preplace inst axi_iic_0 -pg 1 -lvl 5 -x 1780 -y 620 -defaultsOSRD +preplace inst axi_mem_intercon -pg 1 -lvl 4 -x 1340 -y 150 -defaultsOSRD +preplace inst processing_system7_0 -pg 1 -lvl 5 -x 1780 -y 230 -defaultsOSRD +preplace inst processing_system7_0_axi_periph -pg 1 -lvl 2 -x 570 -y 550 -defaultsOSRD +preplace inst rst_processing_system7_0_100M -pg 1 -lvl 1 -x 210 -y 450 -defaultsOSRD +preplace inst xlconcat_0 -pg 1 -lvl 4 -x 1340 -y 430 -defaultsOSRD +preplace inst d_axi_i2s_audio_0 -pg 1 -lvl 5 -x 1780 -y 860 -defaultsOSRD +preplace netloc axi_dma_0_mm2s_introut 1 3 1 1130 400n +preplace netloc axi_dma_0_s2mm_introut 1 3 1 1150 420n +preplace netloc axi_gpio_0_ip2intc_irpt 1 3 3 1160 330 1500J 70 2030 +preplace netloc axi_iic_0_iic2intc_irpt 1 3 3 1170 530 NJ 530 2010 +preplace netloc processing_system7_0_FCLK_CLK0 1 0 6 30 350 410 350 740 290 1160 320 1530 80 2020 +preplace netloc processing_system7_0_FCLK_RESET0_N 1 0 6 20 270 NJ 270 NJ 270 1130J 310 1490J 60 2040 +preplace netloc rst_processing_system7_0_100M_interconnect_aresetn 1 1 3 390 120 NJ 120 N +preplace netloc rst_processing_system7_0_100M_peripheral_aresetn 1 1 4 400 370 730 280 1140 520 1550 +preplace netloc xlconcat_0_dout 1 4 1 1520 270n +preplace netloc d_axi_i2s_audio_0_MCLK_O 1 5 1 NJ 880 +preplace netloc d_axi_i2s_audio_0_BCLK_O 1 5 1 NJ 840 +preplace netloc d_axi_i2s_audio_0_LRCLK_O 1 5 1 NJ 860 +preplace netloc d_axi_i2s_audio_0_SDATA_O 1 5 1 NJ 900 +preplace netloc SDATA_I_0_1 1 0 5 NJ 810 NJ 810 NJ 810 NJ 810 NJ +preplace netloc axi_dma_0_M_AXIS_MM2S 1 3 2 1120 790 NJ +preplace netloc axi_dma_0_M_AXI_MM2S 1 3 1 1110 60n +preplace netloc axi_dma_0_M_AXI_S2MM 1 3 1 1120 80n +preplace netloc axi_gpio_0_GPIO 1 5 1 NJ 440 +preplace netloc axi_mem_intercon_M00_AXI 1 4 1 1520 150n +preplace netloc d_axi_i2s_audio_0_AXI_S2MM 1 2 4 750 320 1130J 340 1500J 370 2020 +preplace netloc processing_system7_0_DDR 1 5 1 NJ 150 +preplace netloc processing_system7_0_FIXED_IO 1 5 1 NJ 170 +preplace netloc processing_system7_0_M_AXI_GP0 1 1 5 420 300 NJ 300 NJ 300 1510J 90 2010 +preplace netloc processing_system7_0_axi_periph_M00_AXI 1 2 1 720 390n +preplace netloc processing_system7_0_axi_periph_M01_AXI 1 2 3 740 570 NJ 570 1510J +preplace netloc processing_system7_0_axi_periph_M02_AXI 1 2 3 720 600 NJ 600 NJ +preplace netloc processing_system7_0_axi_periph_M03_AXI 1 2 3 NJ 580 NJ 580 1540 +preplace netloc axi_iic_0_IIC 1 5 1 NJ 600 +levelinfo -pg 1 0 210 570 930 1340 1780 2060 +pagesize -pg 1 -db -bbox -sgen -110 0 2190 1010 +" +} +0 diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/Debug/ARM_DMA.elf b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/Debug/ARM_DMA.elf new file mode 100755 index 0000000..0f2e7ef Binary files /dev/null and b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/Debug/ARM_DMA.elf differ diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/Debug/ARM_DMA.elf.size b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/Debug/ARM_DMA.elf.size new file mode 100644 index 0000000..11b171c --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/Debug/ARM_DMA.elf.size @@ -0,0 +1,2 @@ + text data bss dec hex filename + 60345 3088 24696 88129 15841 ARM_DMA.elf diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/audio/audio.c b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/audio/audio.c new file mode 100644 index 0000000..b1c2899 --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/audio/audio.c @@ -0,0 +1,783 @@ +/****************************************************************************** + * @file audio.c + * Audio driver. + * + * @authors RoHegbeC + * + * @date 2014-Oct-30 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * + * This program was initially developed to be run from within the BRAM. It is + * constructed to run in a polling mode, in which the program poles the Empty and + * Full signals of the two FIFO's which are implemented in the audio I2S VHDL core. + * In order to have a continuous and stable Sound both when recording and playing + * the user must ensure that DDR cache is enabled. This is only mandatory when the + * program is loaded in to the DDR, if the program is stored in the BRAM then + * the cache is not mandatory. + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date     Changes
+ * ----- ------------ ----------- -----------------------------------------------
+ * 1.00  RoHegbeC 2014-Oct-30 First release
+ *
+ * 
+ * + *****************************************************************************/ + + +#include "audio.h" +#include "../demo.h" + +/************************** Variable Definitions *****************************/ + +extern volatile sDemo_t Demo; + +/****************************************************************************** + * Function to write one byte (8-bits) to one of the registers from the audio + * controller. + * + * @param u8RegAddr is the LSB part of the register address (0x40xx). + * @param u8Data is the data byte to write. + * + * @return XST_SUCCESS if all the bytes have been sent to Controller. + * XST_FAILURE otherwise. + *****************************************************************************/ +XStatus fnAudioWriteToReg(u8 u8RegAddr, u8 u8Data) { + + u8 u8TxData[3]; + u8 u8BytesSent; + + u8TxData[0] = 0x40; + u8TxData[1] = u8RegAddr; + u8TxData[2] = u8Data; + + u8BytesSent = XIic_Send(XPAR_IIC_0_BASEADDR, IIC_SLAVE_ADDR, u8TxData, 3, XIIC_STOP); + + //check if all the bytes where sent + if (u8BytesSent != 3) + { + return XST_FAILURE; + } + + return XST_SUCCESS; +} + +/****************************************************************************** + * Function to read one byte (8-bits) from the register space of audio controller. + * + * @param u8RegAddr is the LSB part of the register address (0x40xx). + * @param u8RxData is the returned value + * + * @return XST_SUCCESS if the desired number of bytes have been read from the controller + * XST_FAILURE otherwise + *****************************************************************************/ +XStatus fnAudioReadFromReg(u8 u8RegAddr, u8 *u8RxData) { + + u8 u8TxData[2]; + u8 u8BytesSent, u8BytesReceived; + + u8TxData[0] = 0x40; + u8TxData[1] = u8RegAddr; + + u8BytesSent = XIic_Send(XPAR_IIC_0_BASEADDR, IIC_SLAVE_ADDR, u8TxData, 2, XIIC_STOP); + //check if all the bytes where sent + if (u8BytesSent != 2) + { + return XST_FAILURE; + } + + u8BytesReceived = XIic_Recv(XPAR_IIC_0_BASEADDR, IIC_SLAVE_ADDR, u8RxData, 1, XIIC_STOP); + //check if there are missing bytes + if (u8BytesReceived != 1) + { + return XST_FAILURE; + } + + return XST_SUCCESS; +} + +/****************************************************************************** + * Configures audio codes's internal PLL. With MCLK = 12.288 MHz it configures the + * PLL for a VCO frequency = 49.152 MHz. + * + * @param none. + * + * @return XST_SUCCESS if PLL is locked + *****************************************************************************/ +XStatus fnAudioPllConfig() { + + u8 u8TxData[8], u8RxData[6]; + int Status; + + Status = fnAudioWriteToReg(R0_CLOCK_CONTROL, 0x0E); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R0_CLOCK_CONTROL (0x0E)"); + } + return XST_FAILURE; + } + + // Write 6 bytes to R1 + // For setting the PLL with a MCLK = 12.288 MHz the datasheet suggests the + // following configuration 0xXXXXXX2001 + u8TxData[0] = 0x40; + u8TxData[1] = 0x02; + u8TxData[2] = 0x00; // byte 1 + u8TxData[3] = 0x7D; // byte 2 + u8TxData[4] = 0x00; // byte 3 + u8TxData[5] = 0x0C; // byte 4 + u8TxData[6] = 0x20; // byte 5 + u8TxData[7] = 0x01; // byte 6 + + Status = XIic_Send(XPAR_IIC_0_BASEADDR, IIC_SLAVE_ADDR, u8TxData, 8, XIIC_STOP); + if (Status != 8) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not send data to R1_PLL_CONTROL (0xXXXXXX2001)"); + } + return XST_FAILURE; + } + // Poll PLL Lock bit + u8TxData[0] = 0x40; + u8TxData[1] = 0x02; + + //Wait for the PLL to lock + do { + XIic_Send(XPAR_IIC_0_BASEADDR, IIC_SLAVE_ADDR, u8TxData, 2, XIIC_STOP); + + XIic_Recv(XPAR_IIC_0_BASEADDR, IIC_SLAVE_ADDR, u8RxData, 6, XIIC_STOP); + if(Demo.u8Verbose) { + xil_printf("\r\nAudio PLL R1 = 0x%x%x%x%x%x%x", u8RxData[0], u8RxData[1], + u8RxData[2], u8RxData[3], u8RxData[4], u8RxData[5]); + } + } + while((u8RxData[5] & 0x02) == 0); + + //Set COREN + Status = fnAudioWriteToReg(R0_CLOCK_CONTROL, 0x0F); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R0_CLOCK_CONTROL (0x0F)"); + } + return XST_FAILURE; + } + + return XST_SUCCESS; +} + +/****************************************************************************** + * Configure the initial settings of the audio controller, the majority of + * these will remain unchanged during the normal functioning of the code. + * In order to generate a correct BCLK and LRCK, which are crucial for the + * correct operating of the controller, the sampling rate must me set in the + * I2S_TRANSFER_CONTROL_REG. The sampling rate options are: + * "000" - 8 KHz + * "001" - 12 KHz + * "010" - 16 KHz + * "011" - 24 KHz + * "100" - 32 KHz + * "101" - 48 KHz + * "110" - 96 KHz + * These options are valid only if the I2S controller is in slave mode. + * When In master mode the ADAU will generate the appropriate BCLK and LRCLK + * internally, and the sampling rates which will be set in the I2S_TRANSFER_CONTROL_REG + * are ignored. + * + * @param none. + * + * @return XST_SUCCESS if the configuration is successful + *****************************************************************************/ +XStatus fnAudioStartupConfig () +{ + + union ubitField uConfigurationVariable; + int Status; + + // Configure the I2S controller for generating a valid sampling rate + uConfigurationVariable.l = Xil_In32(I2S_CLOCK_CONTROL_REG); + uConfigurationVariable.bit.u32bit0 = 1; + uConfigurationVariable.bit.u32bit1 = 0; + uConfigurationVariable.bit.u32bit2 = 1; + Xil_Out32(I2S_CLOCK_CONTROL_REG, uConfigurationVariable.l); + + uConfigurationVariable.l = 0x00000000; + + //STOP_TRANSACTION + uConfigurationVariable.bit.u32bit1 = 1; + Xil_Out32(I2S_TRANSFER_CONTROL_REG, uConfigurationVariable.l); + + //STOP_TRANSACTION + uConfigurationVariable.bit.u32bit1 = 0; + Xil_Out32(I2S_TRANSFER_CONTROL_REG, uConfigurationVariable.l); + + //slave: I2S + Status = fnAudioWriteToReg(R15_SERIAL_PORT_CONTROL_0, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R15_SERIAL_PORT_CONTROL_0 (0x01)"); + } + return XST_FAILURE; + } + //64 bit audio frame(L+R) + Status = fnAudioWriteToReg(R16_SERIAL_PORT_CONTROL_1, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R16_SERIAL_PORT_CONTROL_1 (0x00)"); + } + return XST_FAILURE; + } + //ADC, DAC sampling rate to 48KHz + Status = fnAudioWriteToReg(R17_CONVERTER_CONTROL_0, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R17_CONVERTER_CONTROL_0 (0x00)"); + } + return XST_FAILURE; + } + //ADC, DAC sampling rate to 48KHz + Status = fnAudioWriteToReg(R64_SERIAL_PORT_SAMPLING_RATE, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R64_SERIAL_PORT_SAMPLING_RATE (0x00)"); + } + return XST_FAILURE; + } + //ADC are both connected, normal mic polarity + Status = fnAudioWriteToReg(R19_ADC_CONTROL, 0x13); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R19_ADC_CONTROL (0x13)"); + } + return XST_FAILURE; + } + //DAC are both connected + Status = fnAudioWriteToReg(R36_DAC_CONTROL_0, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R36_DAC_CONTROL_0 (0x03)"); + } + return XST_FAILURE; + } + //Enabling both channels + Status = fnAudioWriteToReg(R35_PLAYBACK_POWER_MANAGEMENT, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R35_PLAYBACK_POWER_MANAGEMENT (0x03)"); + } + return XST_FAILURE; + } + //Serial input [L0,R0] to DAC + Status = fnAudioWriteToReg(R58_SERIAL_INPUT_ROUTE_CONTROL, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R58_SERIAL_INPUT_ROUTE_CONTROL (0x01)"); + } + return XST_FAILURE; + } + //Enable all digital circuits except Codec slew + Status = fnAudioWriteToReg(R65_CLOCK_ENABLE_0, 0x7F); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R65_CLOCK_ENABLE_0 (0x7F)"); + } + return XST_FAILURE; + } + //Turns on CLK0 and CLK1 + Status = fnAudioWriteToReg(R66_CLOCK_ENABLE_1, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R66_CLOCK_ENABLE_1 (0x03)"); + } + return XST_FAILURE; + } + //Mixer5 0dB + Status = fnAudioWriteToReg(R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL (0x03)"); + } + return XST_FAILURE; + } + //Mixer7 enabled + Status = fnAudioWriteToReg(R28_PLAYBACK_LR_MIXER_MONO_OUTPUT_CONTROL, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R28_PLAYBACK_LR_MIXER_MONO_OUTPUT_CONTROL (0x01)"); + } + return XST_FAILURE; + } + //Mixer6 0dB + Status = fnAudioWriteToReg(R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL, 0x09); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL (0x09)"); + } + return XST_FAILURE; + } + //Left output: 0db Line out + Status = fnAudioWriteToReg(R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL, 0xE6); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL (0xE6)"); + } + return XST_FAILURE; + } + //Right output: 0db Line out + Status = fnAudioWriteToReg(R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL, 0xE6); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL (0xE6)"); + } + return XST_FAILURE; + } + //Mono output: -57 dB unmute HP out + Status = fnAudioWriteToReg(R33_PLAYBACK_MONO_OUTPUT_CONTROL, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R33_PLAYBACK_MONO_OUTPUT_CONTROL (0x03)"); + } + return XST_FAILURE; + } + //Mic bias 90% + Status = fnAudioWriteToReg(R10_RECORD_MICROPHONE_BIAS_CONTROL, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R10_RECORD_MICROPHONE_BIAS_CONTROL (0x01)"); + } + return XST_FAILURE; + } + //enable pop and click suppression + Status = fnAudioWriteToReg(R34_PLAYBACK_POP_CLICK_SUPPRESSION, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R34_PLAYBACK_POP_CLICK_SUPPRESSION (0x00)"); + } + return XST_FAILURE; + } + //enable Left headphone and set 0dB + Status = fnAudioWriteToReg(R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL, 0xE7); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL (0xE7)"); + } + return XST_FAILURE; + } + //enable Right headphone and set 0dB + Status = fnAudioWriteToReg(R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL, 0xE7); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL (0xE7)"); + } + return XST_FAILURE; + } + //enable Mixer1, mute left single ended + Status = fnAudioWriteToReg(R4_RECORD_MIXER_LEFT_CONTROL_0, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R4_RECORD_MIXER_LEFT_CONTROL_0 (0x01)"); + } + return XST_FAILURE; + } + //enable MixerAux1, mute left differential input + Status = fnAudioWriteToReg(R5_RECORD_MIXER_LEFT_CONTROL_1, 0x0D); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R5_RECORD_MIXER_LEFT_CONTROL_1 (0x0D)"); + } + return XST_FAILURE; + } + //enable Mixer2, mute right single ende + Status = fnAudioWriteToReg(R6_RECORD_MIXER_RIGHT_CONTROL_0, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R6_RECORD_MIXER_RIGHT_CONTROL_0 (0x01)"); + } + return XST_FAILURE; + } + //enable MixerAux2, mute right differential input + Status = fnAudioWriteToReg(R7_RECORD_MIXER_RIGHT_CONTROL_1, 0x05); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R7_RECORD_MIXER_RIGHT_CONTROL_1 (0x05)"); + } + return XST_FAILURE; + } + //disable Left differential input + Status = fnAudioWriteToReg(R8_LEFT_DIFFERENTIAL_INPUT_VOLUME_CONTROL, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R8_LEFT_DIFFERENTIAL_INPUT_VOLUME_CONTROL (0x03)"); + } + return XST_FAILURE; + } + //disable right differential input + Status = fnAudioWriteToReg(R9_RIGHT_DIFFERENTIAL_INPUT_VOLUME_CONTROL, 0x03); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R9_RIGHT_DIFFERENTIAL_INPUT_VOLUME_CONTROL (0x03)"); + } + return XST_FAILURE; + } + //Enable Mixer3 with the the left DAC channel, mute MixerAux3 + Status = fnAudioWriteToReg(R22_PLAYBACK_MIXER_LEFT_CONTROL_0, 0x21); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R22_PLAYBACK_MIXER_LEFT_CONTROL_0 (0x21)"); + } + return XST_FAILURE; + } + //Mute Right and Left input mixers + Status = fnAudioWriteToReg(R23_PLAYBACK_MIXER_LEFT_CONTROL_1, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R23_PLAYBACK_MIXER_LEFT_CONTROL_1 (0x00)"); + } + return XST_FAILURE; + } + //Enable Mixer4 with the the right DAC channel, mute MixerAux4 + Status = fnAudioWriteToReg(R24_PLAYBACK_MIXER_RIGHT_CONTROL_0, 0x41); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R24_PLAYBACK_MIXER_RIGHT_CONTROL_0 (0x41)"); + } + return XST_FAILURE; + } + //Mute Right and Left input mixers + Status = fnAudioWriteToReg(R25_PLAYBACK_MIXER_RIGHT_CONTROL_1, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R25_PLAYBACK_MIXER_RIGHT_CONTROL_1 (0x00)"); + } + return XST_FAILURE; + } + //Serial output to L0 R0 + Status = fnAudioWriteToReg(R59_SERIAL_OUTPUT_ROUTE_CONTROL, 0x01); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R59_SERIAL_OUTPUT_ROUTE_CONTROL (0x01)"); + } + return XST_FAILURE; + } + //Enable LRCLK and BLCK + Status = fnAudioWriteToReg(R60_SERIAL_DATA_GPIO_CONGIURATION, 0x00); + if (Status == XST_FAILURE) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: could not write R60_SERIAL_DATA_GPIO_CONGIURATION (0x00)"); + } + return XST_FAILURE; + } + + + return XST_SUCCESS; +} + +/****************************************************************************** + * Initialize PLL and Audio controller over the I2C bus + * + * @param none + * + * @return none. + *****************************************************************************/ +XStatus fnInitAudio() +{ + int Status; + + //Set the PLL and wait for Lock + Status = fnAudioPllConfig(); + if (Status != XST_SUCCESS) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: Could not lock PLL"); + } + } + + //Configure the ADAU registers + Status = fnAudioStartupConfig(); + if (Status != XST_SUCCESS) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nError: Failed I2C Configuration"); + } + } + + Demo.fAudioPlayback = 0; + Demo.fAudioRecord = 0; + + return XST_SUCCESS; +} + +/****************************************************************************** + * Configure the the I2S controller to receive data, which will be stored locally + * in a vector. (Mem) + * + * @param u32NrSamples is the number of samples to store. + * + * @return none. + *****************************************************************************/ +void fnAudioRecord(XAxiDma AxiDma, u32 u32NrSamples) +{ + union ubitField uTransferVariable; + + if (Demo.u8Verbose) + { + xil_printf("\r\nEnter Record function"); + } + + uTransferVariable.l = XAxiDma_SimpleTransfer(&AxiDma,(u32) MEM_BASE_ADDR, 5*u32NrSamples, XAXIDMA_DEVICE_TO_DMA); + if (uTransferVariable.l != XST_SUCCESS) + { + if (Demo.u8Verbose) + xil_printf("\n fail @ rec; ERROR: %d", uTransferVariable.l); + } + + // Send number of samples to recorde + Xil_Out32(I2S_PERIOD_COUNT_REG, u32NrSamples); + + // Start i2s initialization sequence + uTransferVariable.l = 0x00000000; + Xil_Out32(I2S_TRANSFER_CONTROL_REG, uTransferVariable.l); + uTransferVariable.bit.u32bit1 = 1; + Xil_Out32(I2S_TRANSFER_CONTROL_REG, uTransferVariable.l); + + // Enable Stream function to send data (S2MM) + Xil_Out32(I2S_STREAM_CONTROL_REG, 0x00000001); + + if (Demo.u8Verbose) + { + xil_printf("\r\nRecording function done"); + } +} + +/****************************************************************************** + * Configure the I2S controller to transmit data, which will be read out from + * the local memory vector (Mem) + * + * @param u32NrSamples is the number of samples to store. + * + * @return none. + *****************************************************************************/ +void fnAudioPlay(XAxiDma AxiDma, u32 u32NrSamples) +{ + union ubitField uTransferVariable; + + if (Demo.u8Verbose) + { + xil_printf("\r\nEnter Playback function"); + } + + // Send number of samples to record + Xil_Out32(I2S_PERIOD_COUNT_REG, u32NrSamples); + // Start i2s initialization sequence + uTransferVariable.l = 0x00000000; + Xil_Out32(I2S_TRANSFER_CONTROL_REG, uTransferVariable.l); + uTransferVariable.bit.u32bit0 = 1; + Xil_Out32(I2S_TRANSFER_CONTROL_REG, uTransferVariable.l); + + + uTransferVariable.l = XAxiDma_SimpleTransfer(&AxiDma,(u32) MEM_BASE_ADDR, 5*u32NrSamples, XAXIDMA_DMA_TO_DEVICE); + if (uTransferVariable.l != XST_SUCCESS) + { + if (Demo.u8Verbose) + xil_printf("\n fail @ play; ERROR: %d", uTransferVariable.l); + } + + // Enable Stream function to send data (MM2S) + Xil_Out32(I2S_STREAM_CONTROL_REG, 0x00000002); + if (Demo.u8Verbose) + { + xil_printf("\r\nPlayback function done"); + } +} + +/****************************************************************************** + * Configure the input path to MIC and disables all other input paths. + * For additional information pleas refer to the ADAU1761 datasheet + * + * @param none + * + * @return none. + *****************************************************************************/ +void fnSetMicInput() +{ + //MX1AUXG = MUTE; MX2AUXG = MUTE; LDBOOST = 0dB; RDBOOST = 0dB + fnAudioWriteToReg(R5_RECORD_MIXER_LEFT_CONTROL_1, 0x08); + fnAudioWriteToReg(R7_RECORD_MIXER_RIGHT_CONTROL_1, 0x08); + if (Demo.u8Verbose) + { + xil_printf("\r\nInput set to MIC"); + } +} + +/****************************************************************************** + * Configure the input path to Line and disables all other input paths + * For additional information pleas refer to the ADAU1761 datasheet + * + * @param none + * + * @return none. + *****************************************************************************/ +void fnSetLineInput() +{ + //MX1AUXG = 0dB; MX2AUXG = 0dB; LDBOOST = MUTE; RDBOOST = MUTE + fnAudioWriteToReg(R5_RECORD_MIXER_LEFT_CONTROL_1, 0x05); + fnAudioWriteToReg(R7_RECORD_MIXER_RIGHT_CONTROL_1, 0x05); + if (Demo.u8Verbose) + { + xil_printf("\r\nInput set to LineIn"); + } +} + +/****************************************************************************** + * Configure the output path to Line and disables all other output paths + * For additional information pleas refer to the ADAU1761 datasheet + * + * @param none + * + * @return none. + *****************************************************************************/ +void fnSetLineOutput() +{ + + //MX3G1 = mute; MX3G2 = mute; MX4G1 = mute; MX4G2 = mute; + fnAudioWriteToReg(R23_PLAYBACK_MIXER_LEFT_CONTROL_1, 0x00); + fnAudioWriteToReg(R25_PLAYBACK_MIXER_RIGHT_CONTROL_1, 0x00); + + //MX5G3 = 0dB; MX5EN = enable; MX6G4 = 0dB; MX6EN = enable + fnAudioWriteToReg(R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL, 0x03); + fnAudioWriteToReg(R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL, 0x09); + + //LHPVOL = 0db; HPEN = disabled; RHPVOL = 0db; HPMODE = enable line output; + fnAudioWriteToReg(R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL, 0xE6); + fnAudioWriteToReg(R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL, 0xE6); + if (Demo.u8Verbose) + { + xil_printf("\r\nOutput set to LineOut"); + } +} + +/****************************************************************************** + * Configure the output path to Headphone and disables all other output paths + * For additional information pleas refer to the ADAU1761 datasheet + * + * @param none + * + * @return none. + *****************************************************************************/ +void fnSetHpOutput() +{ + //MX5G3 = MUTE; MX5EN = MUTE; MX6G4 = MUTE; MX6EN = MUTE + fnAudioWriteToReg(R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL, 0x00); + fnAudioWriteToReg(R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL, 0x00); + + //LHPVOL = 0db; HPEN = enable; RHPVOL = 0db; HPMODE = enable headphone output; + fnAudioWriteToReg(R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL, 0xE7); + fnAudioWriteToReg(R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL, 0xE7); + if (Demo.u8Verbose) + { + xil_printf("\r\nOutput set to HeadPhones"); + } +} diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/audio/audio.h b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/audio/audio.h new file mode 100644 index 0000000..76e48f2 --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/audio/audio.h @@ -0,0 +1,251 @@ +/****************************************************************************** + * @file audio.h + * Audio driver include file. + * + * @authors RoHegbeC + * + * @date 2014-Oct-30 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * + * This program was initially developed to be run from within the BRAM. It is + * constructed to run in a polling mode, in which the program poles the Empty and + * Full signals of the two FIFO's which are implemented in the audio I2S VHDL core. + * In order to have a continuous and stable Sound both when recording and playing + * the user must ensure that DDR cache is enabled. This is only mandatory when the + * program is loaded in to the DDR, if the program is stored in the BRAM then + * the cache is not mandatory. + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date     Changes
+ * ----- ------------ ----------- -----------------------------------------------
+ * 1.00  RoHegbeC 2014-Oct-30 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#ifndef AUDIO_H_ +#define AUDIO_H_ + +#include "xparameters.h" +#include "xil_io.h" +#include "xiic.h" +#include "xil_printf.h" +#include "xil_cache.h" +#include "xstatus.h" +#include "sleep.h" +#include "../dma/dma.h" +#include "../demo.h" + +/************************** Constant Definitions *****************************/ +#define DDR_OFFSET 0x07F00000 + +// Base Addresses +#define SW_ADDR XPAR_SWITCHES_0_BASEADDR +#define AUDIO_CTL_ADDR XPAR_D_AXI_I2S_AUDIO_0_AXI_L_BASEADDR + +//SLave address of the ADAU audio controller +#define IIC_SLAVE_ADDR 0x3B +#define DDR_BASEADDR XPAR_MIG_7SERIES_0_BASEADDR + + +//Bit field construction +struct bits { + u32 u32bit0:1; + u32 u32bit1:1; + u32 u32bit2:1; + u32 u32bit3:1; + u32 u32bit4:1; + u32 u32bit5:1; + u32 u32bit6:1; + u32 u32bit7:1; + u32 u32bit8:1; + u32 u32bit9:1; + u32 u32bit10:1; + u32 u32bit11:1; + u32 u32bit12:1; + u32 u32bit13:1; + u32 u32bit14:1; + u32 u32bit15:1; + u32 u32bit16:1; + u32 u32bit17:1; + u32 u32bit18:1; + u32 u32bit19:1; + u32 u32bit20:1; + u32 u32bit21:1; + u32 u32bit22:1; + u32 u32bit23:1; + u32 u32bit24:1; + u32 u32bit25:1; + u32 u32bit26:1; + u32 u32bit27:1; + u32 u32bit28:1; + u32 u32bit29:1; + u32 u32bit30:1; + u32 u32bit31:1; +}; + +union ubitField{ + u8 rgu8[4]; + u32 l; + struct bits bit; +}; + + +// I2S Status Register Flags +enum i2sStatusFlags { + TX_FIFO_EMPTY = 0, + TX_FIFO_FULL = 1, + RX_FIFO_EMPTY = 16, + RX_FIFO_FULL = 17 +}; + +// I2S Fifo Control Register Bits +enum i2sFifoControlBits { + TX_FIFO_WR_EN = 0, + RX_FIFO_RD_EN = 1, + TX_FIFO_RST = 30, + RX_FIFO_RST = 31 +}; + +// I2S Fifo Transfer Control Register Bits +enum i2sFifoTransferControlBits { + TX_RS = 0, + RX_RS = 1 +}; + +// I2S CLK control register +enum i2sClockControlBits { + SAMPLING_RATE_BIT0 = 0, + SAMPLING_RATE_BIT1 = 1, + SAMPLING_RATE_BIT2 = 2, + SAMPLING_RATE_BIT3 = 3, + MASTER_MODE_ENABLE = 16, +}; + +//Audio controller registers + +//Audio controller registers +enum i2sRegisters { + I2S_RESET_REG = AUDIO_CTL_ADDR, + I2S_TRANSFER_CONTROL_REG = AUDIO_CTL_ADDR + 0x04, + I2S_FIFO_CONTROL_REG = AUDIO_CTL_ADDR + 0x08, + I2S_DATA_IN_REG = AUDIO_CTL_ADDR + 0x0c, + I2S_DATA_OUT_REG = AUDIO_CTL_ADDR + 0x10, + I2S_STATUS_REG = AUDIO_CTL_ADDR + 0x14, + I2S_CLOCK_CONTROL_REG = AUDIO_CTL_ADDR + 0x18, + I2S_PERIOD_COUNT_REG = AUDIO_CTL_ADDR + 0x1C, + I2S_STREAM_CONTROL_REG = AUDIO_CTL_ADDR + 0x20 +}; + + +//ADAU internal register addresses +enum adauRegisterAdresses { + R0_CLOCK_CONTROL = 0x00, + R1_PLL_CONTROL = 0x02, + R2_DIGITAL_MIC_JACK_DETECTION_CONTROL = 0x08, + R3_RECORD_POWER_MANAGEMENT = 0x09, + R4_RECORD_MIXER_LEFT_CONTROL_0 = 0x0A, + R5_RECORD_MIXER_LEFT_CONTROL_1 = 0x0B, + R6_RECORD_MIXER_RIGHT_CONTROL_0 = 0x0C, + R7_RECORD_MIXER_RIGHT_CONTROL_1 = 0x0D, + R8_LEFT_DIFFERENTIAL_INPUT_VOLUME_CONTROL = 0x0E, + R9_RIGHT_DIFFERENTIAL_INPUT_VOLUME_CONTROL = 0x0F, + R10_RECORD_MICROPHONE_BIAS_CONTROL = 0x10, + R11_ALC_CONTROL_0 = 0x11, + R12_ALC_CONTROL_1 = 0x12, + R13_ALC_CONTROL_2 = 0x13, + R14_ALC_CONTROL_3 = 0x14, + R15_SERIAL_PORT_CONTROL_0 = 0x15, + R16_SERIAL_PORT_CONTROL_1 = 0x16, + R17_CONVERTER_CONTROL_0 = 0x17, + R18_CONVERTER_CONTROL_1 = 0x18, + R19_ADC_CONTROL = 0x19, + R20_LEFT_INPUT_DIGITAL_VOLUME = 0x1A, + R21_RIGHT_INPUT_DIGITAL_VOLUME = 0x1B, + R22_PLAYBACK_MIXER_LEFT_CONTROL_0 = 0x1C, + R23_PLAYBACK_MIXER_LEFT_CONTROL_1 = 0x1D, + R24_PLAYBACK_MIXER_RIGHT_CONTROL_0 = 0x1E, + R25_PLAYBACK_MIXER_RIGHT_CONTROL_1 = 0x1F, + R26_PLAYBACK_LR_MIXER_LEFT_LINE_OUTPUT_CONTROL = 0x20, + R27_PLAYBACK_LR_MIXER_RIGHT_LINE_OUTPUT_CONTROL = 0x21, + R28_PLAYBACK_LR_MIXER_MONO_OUTPUT_CONTROL = 0x22, + R29_PLAYBACK_HEADPHONE_LEFT_VOLUME_CONTROL = 0x23, + R30_PLAYBACK_HEADPHONE_RIGHT_VOLUME_CONTROL = 0x24, + R31_PLAYBACK_LINE_OUTPUT_LEFT_VOLUME_CONTROL = 0x25, + R32_PLAYBACK_LINE_OUTPUT_RIGHT_VOLUME_CONTROL = 0x26, + R33_PLAYBACK_MONO_OUTPUT_CONTROL = 0x27, + R34_PLAYBACK_POP_CLICK_SUPPRESSION = 0x28, + R35_PLAYBACK_POWER_MANAGEMENT = 0x29, + R36_DAC_CONTROL_0 = 0x2A, + R37_DAC_CONTROL_1 = 0x2B, + R38_DAC_CONTROL_2 = 0x2C, + R39_SERIAL_PORT_PAD_CONTROL = 0x2D, + R40_CONTROL_PORT_PAD_CONTROL_0 = 0x2F, + R41_CONTROL_PORT_PAD_CONTROL_1 = 0x30, + R42_JACK_DETECT_PIN_CONTROL = 0x31, + R67_DEJITTER_CONTROL = 0x36, + R58_SERIAL_INPUT_ROUTE_CONTROL = 0xF2, + R59_SERIAL_OUTPUT_ROUTE_CONTROL = 0xF3, + R60_SERIAL_DATA_GPIO_CONGIURATION = 0xF4, + R61_DSP_ENABLE = 0xF5, + R62_DSP_RUN = 0xF6, + R63_DSP_SLEW_MODES = 0xF7, + R64_SERIAL_PORT_SAMPLING_RATE = 0xF8, + R65_CLOCK_ENABLE_0 = 0xF9, + R66_CLOCK_ENABLE_1 = 0xFA +}; + +/************************** Variable Definitions *****************************/ + +// general reg +extern u8 u8Verbose; + +/************************** Function Definitions *****************************/ + +XStatus fnAudioWriteToReg(u8 u8RegAddr, u8 u8Data); +XStatus fnAudioReadFromReg(u8 u8RegAddr, u8 *u8RxData); +XStatus fnAudioPllConfig(); +XStatus fnAudioStartupConfig (); +XStatus fnInitAudio(); +void fnAudioRecord(XAxiDma AxiDma, u32 u32NrSamples); +void fnAudioPlay(XAxiDma AxiDma, u32 u32NrSamples); +void fnSetLineInput(); +void fnSetLineOutput(); +void fnSetMicInput(); +void fnSetHpOutput(); + +#endif /* AUDIO_H_ */ diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/demo.c b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/demo.c new file mode 100644 index 0000000..6665a22 --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/demo.c @@ -0,0 +1,399 @@ +/************************************************************************/ +/* */ +/* demo.c -- Zedboard DMA Demo */ +/* */ +/************************************************************************/ +/* Author: Sam Lowe */ +/* Copyright 2015, Digilent Inc. */ +/************************************************************************/ +/* Module Description: */ +/* */ +/* This file contains code for running a demonstration of the */ +/* DMA audio inputs and outputs on the Zedboard. */ +/* */ +/* */ +/************************************************************************/ +/* Notes: */ +/* */ +/* - The DMA max burst size needs to be set to 16 or less */ +/* */ +/************************************************************************/ +/* Revision History: */ +/* */ +/* 8/23/2016(SamL): Created */ +/* */ +/************************************************************************/ + + +#include "demo.h" +volatile sDemo_t Demo; + + + +#include "audio/audio.h" +#include "dma/dma.h" +#include "intc/intc.h" +#include "userio/userio.h" +#include "iic/iic.h" + +/***************************** Include Files *********************************/ + +#include "xaxidma.h" +#include "xparameters.h" +#include "xil_exception.h" +#include "xdebug.h" +#include "xiic.h" +#include "xaxidma.h" + + + +#ifdef XPAR_INTC_0_DEVICE_ID + #include "xintc.h" + #include "microblaze_sleep.h" +#else + #include "xscugic.h" +#include "sleep.h" +#include "xil_cache.h" +#endif + +/************************** Constant Definitions *****************************/ + +/* + * Device hardware build related constants. + */ + +// Audio constants +// Number of seconds to record/playback +#define NR_SEC_TO_REC_PLAY 5 + +// ADC/DAC sampling rate in Hz +//#define AUDIO_SAMPLING_RATE 1000 +#define AUDIO_SAMPLING_RATE 96000 + +// Number of samples to record/playback +#define NR_AUDIO_SAMPLES (NR_SEC_TO_REC_PLAY*AUDIO_SAMPLING_RATE) + +/* Timeout loop counter for reset + */ +#define RESET_TIMEOUT_COUNTER 10000 + +#define TEST_START_VALUE 0x0 + + +/**************************** Type Definitions *******************************/ + + +/***************** Macros (Inline Functions) Definitions *********************/ + + +/************************** Function Prototypes ******************************/ +#if (!defined(DEBUG)) +extern void xil_printf(const char *format, ...); +#endif + + +/************************** Variable Definitions *****************************/ +/* + * Device instance definitions + */ + +static XIic sIic; +static XAxiDma sAxiDma; /* Instance of the XAxiDma */ + +static XGpio sUserIO; + +#ifdef XPAR_INTC_0_DEVICE_ID + static XIntc sIntc; +#else + static XScuGic sIntc; +#endif + +/* Definitions for Fabric interrupts connected to ps7_scugic_0 */ +#define XPAR_FABRIC_AXI_DMA_0_MM2S_INTROUT_INTR 61U +#define XPAR_FABRIC_AXI_DMA_0_S2MM_INTROUT_INTR 62U +#define XPAR_FABRIC_AXI_IIC_0_IIC2INTC_IRPT_INTR 63U +#define XPAR_FABRIC_AXI_GPIO_0_IP2INTC_IRPT_INTR 64U + +// +// Interrupt vector table +#ifdef XPAR_INTC_0_DEVICE_ID +const ivt_t ivt[] = { + //IIC + {XPAR_AXI_INTC_0_AXI_IIC_0_IIC2INTC_IRPT_INTR, (XInterruptHandler)XIic_InterruptHandler, &sIic}, + //DMA Stream to MemoryMap Interrupt handler + {XPAR_AXI_INTC_0_AXI_DMA_0_S2MM_INTROUT_INTR, (XInterruptHandler)fnS2MMInterruptHandler, &sAxiDma}, + //DMA MemoryMap to Stream Interrupt handler + {XPAR_AXI_INTC_0_AXI_DMA_0_MM2S_INTROUT_INTR, (XInterruptHandler)fnMM2SInterruptHandler, &sAxiDma}, + //User I/O (buttons, switches, LEDs) + {XPAR_AXI_INTC_0_AXI_GPIO_0_IP2INTC_IRPT_INTR, (XInterruptHandler)fnUserIOIsr, &sUserIO} +}; +#else +const ivt_t ivt[] = { + //IIC + {XPAR_FABRIC_AXI_IIC_0_IIC2INTC_IRPT_INTR, (Xil_ExceptionHandler)XIic_InterruptHandler, &sIic}, + //DMA Stream to MemoryMap Interrupt handler + {XPAR_FABRIC_AXI_DMA_0_S2MM_INTROUT_INTR, (Xil_ExceptionHandler)fnS2MMInterruptHandler, &sAxiDma}, + //DMA MemoryMap to Stream Interrupt handler + {XPAR_FABRIC_AXI_DMA_0_MM2S_INTROUT_INTR, (Xil_ExceptionHandler)fnMM2SInterruptHandler, &sAxiDma}, + //User I/O (buttons, switches, LEDs) + {XPAR_FABRIC_AXI_GPIO_0_IP2INTC_IRPT_INTR, (Xil_ExceptionHandler)fnUserIOIsr, &sUserIO} +}; +#endif + + +/*****************************************************************************/ +/** +* +* Main function +* +* This function is the main entry of the interrupt test. It does the following: +* Initialize the interrupt controller +* Initialize the IIC controller +* Initialize the User I/O driver +* Initialize the DMA engine +* Initialize the Audio I2S controller +* Enable the interrupts +* Wait for a button event then start selected task +* Wait for task to complete +* +* @param None +* +* @return +* - XST_SUCCESS if example finishes successfully +* - XST_FAILURE if example fails. +* +* @note None. +* +******************************************************************************/ +int main(void) +{ + int Status; + + Demo.u8Verbose = 1; + + //Xil_DCacheDisable(); + + xil_printf("\r\n--- Entering main() --- \r\n"); + + + // + //Initialize the interrupt controller + + Status = fnInitInterruptController(&sIntc); + if(Status != XST_SUCCESS) { + xil_printf("Error initializing interrupts"); + return XST_FAILURE; + } + + + // Initialize IIC controller + Status = fnInitIic(&sIic); + if(Status != XST_SUCCESS) { + xil_printf("Error initializing I2C controller"); + return XST_FAILURE; + } + + // Initialize User I/O driver + Status = fnInitUserIO(&sUserIO); + if(Status != XST_SUCCESS) { + xil_printf("User I/O ERROR"); + return XST_FAILURE; + } + + + //Initialize DMA + Status = fnConfigDma(&sAxiDma); + if(Status != XST_SUCCESS) { + xil_printf("DMA configuration ERROR"); + return XST_FAILURE; + } + + //Initialize Audio I2S + Status = fnInitAudio(); + if(Status != XST_SUCCESS) { + xil_printf("Audio initializing ERROR"); + return XST_FAILURE; + } + + // Enable all interrupts in our interrupt vector table + // Make sure all driver instances using interrupts are initialized first + fnEnableInterrupts(&sIntc, &ivt[0], sizeof(ivt)/sizeof(ivt[0])); + + xil_printf("\r\nInitialization done"); + xil_printf("\r\n"); + xil_printf("\r\nControls:"); + //xil_printf("\r\n BTNL: Play recording on LINE OUT");//L + xil_printf("\r\n LD0: Record from MIC IN");//U + xil_printf("\r\n LD1: Play recording on HPH OUT");//D + xil_printf("\r\n LD2: Record from LINE IN");//R + + //main loop + while(1) { + // Checking the DMA S2MM event flag + if (Demo.fDmaS2MMEvent) + { + xil_printf("\r\nRecording Done..."); + + // Disable Stream function to send data (S2MM) + Xil_Out32(I2S_STREAM_CONTROL_REG, 0x00000000); + Xil_Out32(I2S_TRANSFER_CONTROL_REG, 0x00000000); + //Flush cache + //Flush cache + + //microblaze_flush_dcache(); + //Xil_DCacheInvalidateRange((u32) MEM_BASE_ADDR, 5*NR_AUDIO_SAMPLES); + //microblaze_invalidate_dcache(); + // Reset S2MM event and record flag + Demo.fDmaS2MMEvent = 0; + Demo.fAudioRecord = 0; + } + + // Checking the DMA MM2S event flag + if (Demo.fDmaMM2SEvent) + { + xil_printf("\r\nPlayback Done..."); + + // Disable Stream function to send data (S2MM) + Xil_Out32(I2S_STREAM_CONTROL_REG, 0x00000000); + Xil_Out32(I2S_TRANSFER_CONTROL_REG, 0x00000000); + //Flush cache + ////microblaze_flush_dcache(); + //Xil_DCacheFlushRange((u32) MEM_BASE_ADDR, 5*NR_AUDIO_SAMPLES); + // Reset MM2S event and playback flag + Demo.fDmaMM2SEvent = 0; + Demo.fAudioPlayback = 0; + } + + // Checking the DMA Error event flag + if (Demo.fDmaError) + { + xil_printf("\r\nDma Error..."); + xil_printf("\r\nDma Reset..."); + + + Demo.fDmaError = 0; + Demo.fAudioPlayback = 0; + Demo.fAudioRecord = 0; + } + + // Checking the btn change event + if(0 && Demo.fUserIOEvent) { + char ans[2]="\x00\x00"; + ans[0]=Demo.chBtn; + xil_printf(&ans[0]); + } + if(Demo.fUserIOEvent) { + + switch(Demo.chBtn) { + case 'u': + if (!Demo.fAudioRecord && !Demo.fAudioPlayback) + { + xil_printf("\r\nStart Recording...\r\n"); + fnSetMicInput(); + + fnAudioRecord(sAxiDma,NR_AUDIO_SAMPLES); + Demo.fAudioRecord = 1; + } + else + { + if (Demo.fAudioRecord) + { + xil_printf("\r\nStill Recording...\r\n"); + } + else + { + xil_printf("\r\nStill Playing back...\r\n"); + } + } + break; + case 'd': + if (!Demo.fAudioRecord && !Demo.fAudioPlayback) + { + xil_printf("\r\nStart Playback...\r\n"); + fnSetHpOutput(); + fnAudioPlay(sAxiDma,NR_AUDIO_SAMPLES); + Demo.fAudioPlayback = 1; + } + else + { + if (Demo.fAudioRecord) + { + xil_printf("\r\nStill Recording...\r\n"); + } + else + { + xil_printf("\r\nStill Playing back...\r\n"); + } + } + break; + case 'r': + if (!Demo.fAudioRecord && !Demo.fAudioPlayback) + { + xil_printf("\r\nStart Recording...\r\n"); + fnSetLineInput(); + fnAudioRecord(sAxiDma,NR_AUDIO_SAMPLES); + Demo.fAudioRecord = 1; + } + else + { + if (Demo.fAudioRecord) + { + xil_printf("\r\nStill Recording...\r\n"); + } + else + { + xil_printf("\r\nStill Playing back...\r\n"); + } + } + break; + case 'l': + break; //pynq-z2 has no lineout + /* + if (!Demo.fAudioRecord && !Demo.fAudioPlayback) + { + xil_printf("\r\nStart Playback..."); + fnSetLineOutput(); + fnAudioPlay(sAxiDma,NR_AUDIO_SAMPLES); + Demo.fAudioPlayback = 1; + } + else + { + if (Demo.fAudioRecord) + { + xil_printf("\r\nStill Recording...\r\n"); + } + else + { + xil_printf("\r\nStill Playing back...\r\n"); + } + } + break; + */ + default: + break; + } + + // Reset the user I/O flag + Demo.chBtn = 0; + Demo.fUserIOEvent = 0; + + + } + //usleep(90000); + } + + xil_printf("\r\n--- Exiting main() --- \r\n"); + + + return XST_SUCCESS; + +} + + + + + + + + + diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/demo.h b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/demo.h new file mode 100644 index 0000000..ab59466 --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/demo.h @@ -0,0 +1,118 @@ +/************************************************************************/ +/* */ +/* demo.h -- Zedboard DMA Demo */ +/* */ +/************************************************************************/ +/* Author: Sam Lowe */ +/* Copyright 2015, Digilent Inc. */ +/************************************************************************/ +/* Module Description: */ +/* */ +/* This header file contains code for running a demonstration */ +/* of the DMA audio inputs and outputs on the Zedboard. */ +/* */ +/* */ +/************************************************************************/ +/* Notes: */ +/* */ +/* - The DMA max burst size needs to be set to 16 or less */ +/* */ +/************************************************************************/ +/* Revision History: */ +/* */ +/* 8/23/2016(SamL): Created */ +/* */ +/************************************************************************/ + +#ifndef MAIN_H_ +#define MAIN_H_ + +/***************************** Include Files *********************************/ +#include +#include +#include +#include "xil_io.h" +#include "xstatus.h" +#include "xparameters.h" +#include "xil_cache.h" + + +/************************** Constant Definitions *****************************/ +#define RETURN_ON_FAILURE(x) if ((x) != XST_SUCCESS) return XST_FAILURE; + +#define DMA_DEV_ID XPAR_AXIDMA_0_DEVICE_ID + +#ifdef XPAR_V6DDR_0_S_AXI_BASEADDR +#define DDR_BASE_ADDR XPAR_V6DDR_0_S_AXI_BASEADDR +#elif XPAR_S6DDR_0_S0_AXI_BASEADDR +#define DDR_BASE_ADDR XPAR_S6DDR_0_S0_AXI_BASEADDR +#elif XPAR_AXI_7SDDR_0_S_AXI_BASEADDR +#define DDR_BASE_ADDR XPAR_AXI_7SDDR_0_S_AXI_BASEADDR +#elif XPAR_MIG7SERIES_0_BASEADDR +#define DDR_BASE_ADDR XPAR_MIG7SERIES_0_BASEADDR +#else +#ifdef PLATFORM_ZYNQ +#define DDR_BASE_ADDR XPAR_PS7_DDR_0_S_AXI_BASEADDR +#endif +#endif + +#ifndef DDR_BASE_ADDR +#warning CHECK FOR THE VALID DDR ADDRESS IN XPARAMETERS.H, DEFAULT SET TO 0x010000000 +#define MEM_BASE_ADDR 0x010000000 +#else +#define MEM_BASE_ADDR (DDR_BASE_ADDR + 0x10000000) +#endif + +#ifdef XPAR_INTC_0_DEVICE_ID +#define RX_INTR_ID XPAR_INTC_0_AXIDMA_0_S2MM_INTROUT_VEC_ID +#define TX_INTR_ID XPAR_INTC_0_AXIDMA_0_MM2S_INTROUT_VEC_ID +#else +#define RX_INTR_ID XPAR_FABRIC_AXI_DMA_0_S2MM_INTROUT_INTR +#define TX_INTR_ID XPAR_FABRIC_AXI_DMA_0_MM2S_INTROUT_INTR +#endif + +#define TX_BUFFER_BASE (MEM_BASE_ADDR + 0x00100000) +#define RX_BUFFER_BASE (MEM_BASE_ADDR + 0x00300000) +#define RX_BUFFER_HIGH (MEM_BASE_ADDR + 0x004FFFFF) + +#ifdef XPAR_INTC_0_DEVICE_ID +#define INTC_DEVICE_ID XPAR_INTC_0_DEVICE_ID +#else +//#define INTC_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID +#endif + +#ifdef XPAR_INTC_0_DEVICE_ID + #define INTC XIntc + #define INTC_HANDLER XIntc_InterruptHandler +#else + #define INTC XScuGic + #define INTC_HANDLER XScuGic_InterruptHandler +#endif + + +/**************************** Type Definitions *******************************/ +typedef struct { + u8 u8Verbose; + u8 fUserIOEvent; + u8 fVideoEvent; + u8 fAudioRecord; + u8 fAudioPlayback; + u8 fDmaError; + u8 fDmaS2MMEvent; + u8 fDmaMM2SEvent; + int fDVIClockLock; + char chBtn; + u8 fLinkEvent; + u8 fLinkStatus; + int linkSpeed; + int mac; + XStatus fMacStatus; +} sDemo_t; + +/************************** Function Prototypes ******************************/ + + +// This variable holds the demo related settings +extern volatile sDemo_t Demo; + +#endif /* MAIN_H_ */ diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/dma/dma.c b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/dma/dma.c new file mode 100644 index 0000000..c70c9c9 --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/dma/dma.c @@ -0,0 +1,174 @@ +/* + * dma.c + * + * Created on: Jan 20, 2015 + * Author: ROHegbeC + */ + +#include "dma.h" +#include "../demo.h" + +/************************** Variable Definitions *****************************/ + +extern volatile sDemo_t Demo; +extern XAxiDma_Config *pCfgPtr; + +/****************************************************************************** + * This is the Interrupt Handler from the Stream to the MemoryMap. It is called + * when an interrupt is trigger by the DMA + * + * @param Callback is a pointer to S2MM channel of the DMA engine. + * + * @return none + * + *****************************************************************************/ +void fnS2MMInterruptHandler (void *Callback) +{ + u32 IrqStatus; + int TimeOut; + XAxiDma *AxiDmaInst = (XAxiDma *)Callback; + //Read all the pending DMA interrupts + IrqStatus = XAxiDma_IntrGetIrq(AxiDmaInst, XAXIDMA_DEVICE_TO_DMA); + + //Acknowledge pending interrupts + XAxiDma_IntrAckIrq(AxiDmaInst, IrqStatus, XAXIDMA_DEVICE_TO_DMA); + + //If there are no interrupts we exit the Handler + if (!(IrqStatus & XAXIDMA_IRQ_ALL_MASK)) + { + return; + } + + // If error interrupt is asserted, raise error flag, reset the + // hardware to recover from the error, and return with no further + // processing. + if (IrqStatus & XAXIDMA_IRQ_ERROR_MASK) + { + Demo.fDmaError = 1; + XAxiDma_Reset(AxiDmaInst); + TimeOut = 1000; + while (TimeOut) + { + if(XAxiDma_ResetIsDone(AxiDmaInst)) + { + break; + } + TimeOut -= 1; + } + return; + } + + if ((IrqStatus & XAXIDMA_IRQ_IOC_MASK)) + { + Demo.fDmaS2MMEvent = 1; + } +} + +/****************************************************************************** + * This is the Interrupt Handler from the MemoryMap to the Stream. It is called + * when an interrupt is trigger by the DMA + * + * @param Callback is a pointer to MM2S channel of the DMA engine. + * + * @return none + * + *****************************************************************************/ +void fnMM2SInterruptHandler (void *Callback) +{ + + u32 IrqStatus; + int TimeOut; + XAxiDma *AxiDmaInst = (XAxiDma *)Callback; + + //Read all the pending DMA interrupts + IrqStatus = XAxiDma_IntrGetIrq(AxiDmaInst, XAXIDMA_DMA_TO_DEVICE); + //Acknowledge pending interrupts + XAxiDma_IntrAckIrq(AxiDmaInst, IrqStatus, XAXIDMA_DMA_TO_DEVICE); + //If there are no interrupts we exit the Handler + if (!(IrqStatus & XAXIDMA_IRQ_ALL_MASK)) + { + return; + } + + // If error interrupt is asserted, raise error flag, reset the + // hardware to recover from the error, and return with no further + // processing. + if (IrqStatus & XAXIDMA_IRQ_ERROR_MASK){ + Demo.fDmaError = 1; + XAxiDma_Reset(AxiDmaInst); + TimeOut = 1000; + while (TimeOut) + { + if(XAxiDma_ResetIsDone(AxiDmaInst)) + { + break; + } + TimeOut -= 1; + } + return; + } + if ((IrqStatus & XAXIDMA_IRQ_IOC_MASK)) + { + Demo.fDmaMM2SEvent = 1; + } +} + +/****************************************************************************** + * Function to configure the DMA in Interrupt mode, this implies that the scatter + * gather function is disabled. Prior to calling this function, the user must + * make sure that the Interrupts and the Interrupt Handlers have been configured + * + * @return XST_SUCCESS - if configuration was successful + * XST_FAILURE - when the specification are not met + *****************************************************************************/ +XStatus fnConfigDma(XAxiDma *AxiDma) +{ + int Status; + XAxiDma_Config *pCfgPtr; + + //Make sure the DMA hardware is present in the project + //Ensures that the DMA hardware has been loaded + pCfgPtr = XAxiDma_LookupConfig(XPAR_AXIDMA_0_DEVICE_ID); + if (!pCfgPtr) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nNo config found for %d", XPAR_AXIDMA_0_DEVICE_ID); + } + return XST_FAILURE; + } + + //Initialize DMA + //Reads and sets all the available information + //about the DMA to the AxiDma variable + Status = XAxiDma_CfgInitialize(AxiDma, pCfgPtr); + if (Status != XST_SUCCESS) + { + if (Demo.u8Verbose) + { + xil_printf("\r\nInitialization failed %d"); + } + return XST_FAILURE; + } + + //Ensures that the Scatter Gather mode is not active + if(XAxiDma_HasSg(AxiDma)) + { + if (Demo.u8Verbose) + { + + xil_printf("\r\nDevice configured as SG mode"); + } + return XST_FAILURE; + } + + //Disable all the DMA related Interrupts + XAxiDma_IntrDisable(AxiDma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DEVICE_TO_DMA); + XAxiDma_IntrDisable(AxiDma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DMA_TO_DEVICE); + + //Enable all the DMA Interrupts + XAxiDma_IntrEnable(AxiDma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DEVICE_TO_DMA); + XAxiDma_IntrEnable(AxiDma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DMA_TO_DEVICE); + + return XST_SUCCESS; +} diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/dma/dma.h b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/dma/dma.h new file mode 100644 index 0000000..a79eb9a --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/dma/dma.h @@ -0,0 +1,24 @@ +/* + * dma.h + * + * Created on: Jan 20, 2015 + * Author: ROHegbeC + */ + +#ifndef DMA_H_ +#define DMA_H_ + +#include "xparameters.h" +#include "xil_printf.h" +#include "xaxidma.h" + +/************************** Variable Definitions *****************************/ + + +/************************** Function Definitions *****************************/ + +void fnS2MMInterruptHandler (void *Callback); +void fnMM2SInterruptHandler (void *Callback); +XStatus fnConfigDma(XAxiDma *AxiDma); + +#endif /* DMA_H_ */ diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/iic/iic.c b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/iic/iic.c new file mode 100644 index 0000000..3bc684e --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/iic/iic.c @@ -0,0 +1,195 @@ +/****************************************************************************** + * @file iic.c + * I2C driver initialization and EEPROM read. + * + * @author Elod Gyorgy + * + * @date 2015-Jan-9 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * Contains I2C initialization functions and an asynchronous read of the MAC + * from the on-board EEPROM. + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date     Changes
+ * ----- ------------ ----------- -----------------------------------------------
+ * 1.00  Elod Gyorgy  2015-Jan-9 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#include "xparameters.h" +#include "iic.h" +#include + +#define IIC_DEVICE_ID XPAR_AXI_IIC_0_DEVICE_ID +#define EEPROM_ADDRESS 0x57 //0xAE as 8-bit +#define MAC_MEM_ADDRESS 0xFA + +typedef u8 memAddress_t; //Change to u16, if EEPROM uses 16-bit register address + +static u8 rgbWriteBuf[sizeof(memAddress_t)]; + +static void ReadMACSendHandler(XIic *psIic, int ByteCount); +static void ReadMACReceiveHandler(XIic *psIic, int ByteCount); +static void StatusHandler(XIic *InstancePtr, int Event); + +static macAddress_t *pgMac; +static XStatus *pgfMacStatus; +/* + * IIC controller init function. Uses interrupts which have to be intialized and enabled + * outside of this function. + */ +XStatus fnInitIic(XIic *psIic) +{ + XIic_Config *psConfig; + + // Initialize the IIC driver so that it is ready to use. + psConfig = XIic_LookupConfig(IIC_DEVICE_ID); + if (psConfig == NULL) { + return XST_FAILURE; + } + + + RETURN_ON_FAILURE(XIic_CfgInitialize(psIic, psConfig, + psConfig->BaseAddress)); + + RETURN_ON_FAILURE(XIic_DynamicInitialize(psIic)); + + return XST_SUCCESS; +} + +XStatus fnReadMACAsync(XIic *psIic, macAddress_t *pMac, XStatus *pfMacStatus) +{ + memAddress_t memAddress = MAC_MEM_ADDRESS; + + pgMac = pMac; pgfMacStatus = pfMacStatus; + + memset(pgMac, 0, sizeof(*pgMac)); + *pgfMacStatus = XST_DEVICE_BUSY; + + psIic->Stats.TxErrors = 0; + + // Set the Handlers for transmit and reception. + XIic_SetSendHandler(psIic, psIic, + (XIic_Handler) ReadMACSendHandler); + XIic_SetRecvHandler(psIic, psIic, + (XIic_Handler) ReadMACReceiveHandler); + XIic_SetStatusHandler(psIic, psIic, + (XIic_StatusHandler) StatusHandler); + + // Use repeated start when sending the register address + XIic_SetOptions(psIic, XIic_GetOptions(psIic) | XII_REPEATED_START_OPTION); + + // Start the IIC device. + RETURN_ON_FAILURE(XIic_Start(psIic)); + + // Set the EEPROM slave address + XIic_SetAddress(psIic, XII_ADDR_TO_SEND_TYPE, EEPROM_ADDRESS); + + // 8/16-bit register addressing + if (sizeof(memAddress_t) == 2) + { + rgbWriteBuf[0] = (u8) (memAddress >> 8); + rgbWriteBuf[1] = (u8) memAddress ; + } + else + { + rgbWriteBuf[0] = (u8) memAddress ; + } + + // Send register address + RETURN_ON_FAILURE(XIic_DynMasterSend(psIic, &rgbWriteBuf[0], sizeof(memAddress_t))); + + return XST_SUCCESS; +} + +// This will be called when the Register Address is sent +static void ReadMACSendHandler(XIic *psIic, int ByteCount) +{ + // Turn off repeated start for the read part + XIic_SetOptions(psIic, XIic_GetOptions(psIic) & ~XII_REPEATED_START_OPTION); + + // Read MAC address + if (XST_SUCCESS != XIic_DynMasterRecv(psIic, (u8*)pgMac, sizeof(*pgMac))) + { + *pgfMacStatus = XST_RECV_ERROR; + XIic_Stop(psIic); + } +} + +// This will be called when the MAC Address is read +static void ReadMACReceiveHandler(XIic *psIic, int ByteCount) +{ + *pgfMacStatus = XST_SUCCESS; + //We have finished the transfer + XIic_Stop(psIic); +} + +/*****************************************************************************/ +/** +* This Status handler is called asynchronously from an interrupt +* context and indicates the events that have occurred. +* +* @param InstancePtr is a pointer to the IIC driver instance for which +* the handler is being called for. +* @param Event indicates the condition that has occurred. +* +* @return None. +* +* @note None. +* +******************************************************************************/ +static void StatusHandler(XIic *psIic, int Event) +{ + switch (Event) + { + case XII_BUS_NOT_BUSY_EVENT: + //If the bus was busy when we tried a send and now it seems to be free + if (pgfMacStatus && *pgfMacStatus == XST_SEND_ERROR) + { + fnReadMACAsync(psIic, pgMac, pgfMacStatus); + } + break; + + case XII_ARB_LOST_EVENT: + case XII_SLAVE_NO_ACK_EVENT: + if (pgfMacStatus) *pgfMacStatus = XST_SEND_ERROR; + break; + } +} + + diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/iic/iic.h b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/iic/iic.h new file mode 100644 index 0000000..435136a --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/iic/iic.h @@ -0,0 +1,69 @@ +/****************************************************************************** + * @file iic.h + * I2C driver initialization and EEPROM read. + * + * @author Elod Gyorgy + * + * @date 2015-Jan-9 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * Contains I2C initialization functions and an asynchronous read of the MAC + * from the on-board EEPROM. + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date     Changes
+ * ----- ------------ ----------- -----------------------------------------------
+ * 1.00  Elod Gyorgy  2015-Jan-9 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#ifndef IIC_H_ +#define IIC_H_ + +#include "xiic.h" + +#define RETURN_ON_FAILURE(x) if ((x) != XST_SUCCESS) return XST_FAILURE; + +typedef struct +{ + u8 rgbMac[6]; +} macAddress_t; + +XStatus fnInitIic(XIic *psIic); +XStatus fnReadMACAsync(XIic *psIic, macAddress_t *pMac, XStatus *pfMacReady); + +#endif /* IIC_H_ */ diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/intc/intc.c b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/intc/intc.c new file mode 100644 index 0000000..4f26cce --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/intc/intc.c @@ -0,0 +1,134 @@ +/****************************************************************************** + * @file iic.c + * Interrupt system initialization. + * + * @author Elod Gyorgy + * + * @date 2015-Jan-3 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * Contains interrupt controller initialization function. + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date     Changes
+ * ----- ------------ ----------- -----------------------------------------------
+ * 1.00  Elod Gyorgy  2015-Jan-3 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#include "intc.h" +#include "xparameters.h" + + + + +XStatus fnInitInterruptController(intc *psIntc) +{ + int result = 0; +#ifdef XPAR_XINTC_NUM_INSTANCES + // Init driver instance + RETURN_ON_FAILURE(XIntc_Initialize(psIntc, INTC_DEVICE_ID)); + + // Start interrupt controller + RETURN_ON_FAILURE(XIntc_Start(psIntc, XIN_REAL_MODE)); + + Xil_ExceptionInit(); + // Register the interrupt controller handler with the exception table. + // This is in fact the ISR dispatch routine, which calls our ISRs + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, + (Xil_ExceptionHandler)XIntc_InterruptHandler, + psIntc); + +#endif +#ifdef XPAR_SCUGIC_0_DEVICE_ID + XScuGic_Config *IntcConfig; + + /* + * Initialize the interrupt controller driver so that it is ready to + * use. + */ + IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID); + if (NULL == IntcConfig) { + return XST_FAILURE; + } + + result = XScuGic_CfgInitialize(psIntc, IntcConfig, IntcConfig->CpuBaseAddress); + if (result != XST_SUCCESS) { + return XST_FAILURE; + } + + + +#endif + //Xil_ExceptionEnable(); + + return XST_SUCCESS; +} + +/* + * This function enables interrupts and connects interrupt service routines declared in + * an interrupt vector table + */ +void fnEnableInterrupts(intc *psIntc, const ivt_t *prgsIvt, unsigned int csIVectors) +{ + unsigned int isIVector; + + Xil_AssertVoid(psIntc != NULL); + Xil_AssertVoid(psIntc->IsReady == XIL_COMPONENT_IS_READY); + + + + /* Hook up interrupt service routines from IVT */ + for (isIVector = 0; isIVector < csIVectors; isIVector++) + { +#ifdef __MICROBLAZE__ + XIntc_Connect(psIntc, prgsIvt[isIVector].id, prgsIvt[isIVector].handler, prgsIvt[isIVector].pvCallbackRef); + + /* Enable the interrupt vector at the interrupt controller */ + XIntc_Enable(psIntc, prgsIvt[isIVector].id); +#else + XScuGic_SetPriorityTriggerType(psIntc, prgsIvt[isIVector].id, 0xA0, 0x3); + XScuGic_Connect(psIntc, prgsIvt[isIVector].id, prgsIvt[isIVector].handler, prgsIvt[isIVector].pvCallbackRef); + XScuGic_Enable(psIntc, prgsIvt[isIVector].id); + +#endif + } + Xil_ExceptionInit(); + Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)INTC_HANDLER, psIntc); + Xil_ExceptionEnable(); + +} diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/intc/intc.h b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/intc/intc.h new file mode 100644 index 0000000..470173b --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/intc/intc.h @@ -0,0 +1,88 @@ +/****************************************************************************** + * @file intc.h + * Interrupt system initialization. + * + * @author Elod Gyorgy + * + * @date 2015-Jan-3 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * Contains interrupt controller initialization function. + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date     Changes
+ * ----- ------------ ----------- -----------------------------------------------
+ * 1.00  Elod Gyorgy  2015-Jan-3 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#ifndef INTC_H_ +#define INTC_H_ + +#include "xstatus.h" +#ifdef XPAR_INTC_0_DEVICE_ID + #include "xintc.h" +#else + #include "xscugic.h" +#endif + +#define RETURN_ON_FAILURE(x) if ((x) != XST_SUCCESS) return XST_FAILURE; + +/* + * Structure for interrupt id, handler and callback reference + */ +typedef struct { + u8 id; + XInterruptHandler handler; + void *pvCallbackRef; +} ivt_t; + +#ifdef XPAR_INTC_0_DEVICE_ID + XStatus fnInitInterruptController(XIntc *psIntc); + void fnEnableInterrupts(XIntc *psIntc, const ivt_t *prgsIvt, unsigned int csIVectors); +#define intc XIntc +#define INTC_DEVICE_ID XPAR_INTC_0_DEVICE_ID +#else + XStatus fnInitInterruptController(XScuGic *psIntc); + void fnEnableInterrupts(XScuGic *psIntc, const ivt_t *prgsIvt, unsigned int csIVectors); +#define intc XScuGic +#define INTC_DEVICE_ID XPAR_PS7_SCUGIC_0_DEVICE_ID +#define INTC_HANDLER XScuGic_InterruptHandler +#endif + + +#endif /* INTC_H_ */ diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/userio/userio.c b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/userio/userio.c new file mode 100644 index 0000000..6425bcf --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/userio/userio.c @@ -0,0 +1,190 @@ +/****************************************************************************** + * @file userio.c + * + * @authors Elod Gyorgy + * + * @date 2015-Jan-15 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * + * @note + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date        Changes
+ * ----- ------------ ----------- --------------------------------------------
+ * 1.00  Elod Gyorgy  2015-Jan-15 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#include +#include "xparameters.h" +#include "userio.h" +#include "../demo.h" + +#define USERIO_DEVICE_ID 0 + +extern volatile sDemo_t Demo; + +void fnUpdateLedsFromSwitches(XGpio *psGpio); + +XStatus fnInitUserIO(XGpio *psGpio) +{ + /* Initialize the GPIO driver. If an error occurs then exit */ + RETURN_ON_FAILURE(XGpio_Initialize(psGpio, USERIO_DEVICE_ID)); + + /* + * Perform a self-test on the GPIO. This is a minimal test and only + * verifies that there is not any bus error when reading the data + * register + */ + RETURN_ON_FAILURE(XGpio_SelfTest(psGpio)); + + /* + * Setup direction register so the switches and buttons are inputs and the LED is + * an output of the GPIO + */ + XGpio_SetDataDirection(psGpio, BTN_SW_CHANNEL, BTNS_SWS_MASK); + + fnUpdateLedsFromSwitches(psGpio); + + /* + * Enable the GPIO channel interrupts so that push button can be + * detected and enable interrupts for the GPIO device + */ + XGpio_InterruptEnable(psGpio, BTN_SW_INTERRUPT); + XGpio_InterruptGlobalEnable(psGpio); + + return XST_SUCCESS; +} + +void fnUpdateLedsFromSwitches(XGpio *psGpio) +{ + static u32 dwPrevButtons = 0; + u32 dwBtn; + u32 dwBtnSw; + + dwBtnSw = XGpio_DiscreteRead(psGpio, BTN_SW_CHANNEL); + dwBtn = dwBtnSw & (BTNU_MASK|BTNR_MASK|BTND_MASK|BTNL_MASK|BTNC_MASK); + if (dwBtn==0){//No buttons pressed? + Demo.fUserIOEvent = 0; + dwPrevButtons = dwBtn; + return; + } + // Has anything changed? + if ((dwBtn ^ dwPrevButtons)) + { + + u32 dwChanges = 0; + + + dwChanges = dwBtn ^ dwPrevButtons; + if (dwChanges & BTNU_MASK) { + Demo.chBtn = 'u'; + if(Demo.u8Verbose) { + xil_printf("\r\nBTNU"); + } + } + if (dwChanges & BTNR_MASK) { + Demo.chBtn = 'r'; + if(Demo.u8Verbose) { + xil_printf("\r\nBTNR"); + } + } + if (dwChanges & BTND_MASK) { + Demo.chBtn = 'd'; + if(Demo.u8Verbose) { + xil_printf("\r\nBTND"); + } + } + if (dwChanges & BTNL_MASK) { + Demo.chBtn = 'l'; + if(Demo.u8Verbose) { + xil_printf("\r\nBTNL"); + } + } + if (dwChanges & BTNC_MASK) { + Demo.chBtn = 'c'; + if(Demo.u8Verbose) { + xil_printf("\r\nBTNC"); + } + } + + // Keep values in mind + //dwPrevSwitches = dwSw; + Demo.fUserIOEvent = 1; + dwPrevButtons = dwBtn; + } +} + +/* + * Default interrupt service routine + * Lights up LEDs above active switches. Pressing any of the buttons inverts LEDs. + */ +void fnUserIOIsr(void *pvInst) +{ + XGpio *psGpio = (XGpio*)pvInst; + + /* + * Disable the interrupt + */ + XGpio_InterruptGlobalDisable(psGpio); + + + + + /* + * Check if the interrupt interests us + */ + if ((XGpio_InterruptGetStatus(psGpio) & BTN_SW_INTERRUPT) != + BTN_SW_INTERRUPT) { + XGpio_InterruptGlobalEnable(psGpio); + return; + } + + fnUpdateLedsFromSwitches(psGpio); + + + + /* Clear the interrupt such that it is no longer pending in the GPIO */ + + XGpio_InterruptClear(psGpio, BTN_SW_INTERRUPT); + + /* + * Enable the interrupt + */ + XGpio_InterruptGlobalEnable(psGpio); +} diff --git a/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/userio/userio.h b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/userio/userio.h new file mode 100644 index 0000000..5362606 --- /dev/null +++ b/ARM_DMA/ARM_DMA.vitis/ARM_DMA.files/src/userio/userio.h @@ -0,0 +1,83 @@ +/****************************************************************************** + * @file userio.h + * + * @authors Elod Gyorgy + * + * @date 2015-Jan-15 + * + * @copyright + * (c) 2015 Copyright Digilent Incorporated + * All Rights Reserved + * + * This program is free software; distributed under the terms of BSD 3-clause + * license ("Revised BSD License", "New BSD License", or "Modified BSD License") + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name(s) of the above-listed copyright holder(s) nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + * @desciption + * + * @note + * + *
+ * MODIFICATION HISTORY:
+ *
+ * Ver   Who          Date        Changes
+ * ----- ------------ ----------- --------------------------------------------
+ * 1.00  Elod Gyorgy  2015-Jan-15 First release
+ *
+ * 
+ * + *****************************************************************************/ + +#ifndef USERIO_H_ +#define USERIO_H_ + +#include "xstatus.h" +#include "xgpio.h" + +#define BTN_SW_CHANNEL 1 /* Channel 1 of the GPIO Device */ +#define LED_CHANNEL 2 /* Channel 2 of the GPIO Device */ +#define BTN_SW_INTERRUPT XGPIO_IR_CH1_MASK /* Channel 1 Interrupt Mask */ + +#define BTNC_MASK 0x0010 + +#define BTNU_MASK 0x0001 +#define BTND_MASK 0x0002 +#define BTNR_MASK 0x0004 +#define BTNL_MASK 0x0008 + + + + +//#define SWS_MASK 0x00FF +#define BTNS_SWS_MASK 0x001F + +#define LEDS_MASK 0xFF + +#define RETURN_ON_FAILURE(x) if ((x) != XST_SUCCESS) return XST_FAILURE; + +XStatus fnInitUserIO(XGpio *psGpio); +void fnUserIOIsr(void *pvInst); + +#endif /* USERIO_H_ */ diff --git a/ARM_DMA/ARM_DMA.xpr b/ARM_DMA/ARM_DMA.xpr new file mode 100644 index 0000000..faacfd9 --- /dev/null +++ b/ARM_DMA/ARM_DMA.xpr @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + default_dashboard + + + diff --git a/ARM_DMA/design_1_wrapper.xsa b/ARM_DMA/design_1_wrapper.xsa new file mode 100644 index 0000000..4885496 Binary files /dev/null and b/ARM_DMA/design_1_wrapper.xsa differ diff --git a/ARM_DMA/xdc/pynqz2.xdc b/ARM_DMA/xdc/pynqz2.xdc new file mode 100644 index 0000000..89c77be --- /dev/null +++ b/ARM_DMA/xdc/pynqz2.xdc @@ -0,0 +1,265 @@ +#set_property IOSTANDARD LVCMOS33 [get_ports {btns_4bits_tri_i_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {btns_4bits_tri_i_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {btns_4bits_tri_i_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {btns_4bits_tri_i_3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {leds_4bits_tri_o_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {leds_4bits_tri_o_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {leds_4bits_tri_o_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {leds_4bits_tri_o_3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {sws_2bits_tri_i_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {sws_2bits_tri_i_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {sys_clk}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA4}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA7}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA8}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA9}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JA10}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB4}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB7}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB8}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB9}] +#set_property IOSTANDARD LVCMOS33 [get_ports {JB10}] +#set_property IOSTANDARD LVCMOS33 [get_ports {i2c_scl_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {i2c_sda_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {rgb_led_tri_o_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {rgb_led_tri_o_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {rgb_led_tri_o_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {rgb_led_tri_o_3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {rgb_led_tri_o_4}] +#set_property IOSTANDARD LVCMOS33 [get_ports {rgb_led_tri_o_5}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_4}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_5}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_6}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_7}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_8}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_9}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_10}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_11}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_12}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0_a13_tri_i_13}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_4}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_5}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_6}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_7}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_8}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_9}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_10}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_11}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_12}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_13}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_14}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_15}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_16}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_17}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_18}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_19}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_20}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_21}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_22}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_23}] +#set_property IOSTANDARD LVCMOS33 [get_ports {raspberry_pi_tri_i_24}] +#set_property IOSTANDARD LVCMOS33 [get_ports {spi_miso_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {spi_mosi_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {spi_sclk_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {spi_ss_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_rx_hpd}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_clk_p}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_clk_n}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_data_p_0}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_data_p_1}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_data_p_2}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_data_n_0}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_data_n_1}] +#set_property IOSTANDARD TMDS_33 [get_ports {TMDS_IN_data_n_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_tx_hpd}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_clk_p}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_clk_n}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_data_p_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_data_p_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_data_p_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_data_n_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_data_n_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {TMDS_OUT_data_n_2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_in_ddc_scl}] +#set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_in_ddc_sda}] +#set_property IOSTANDARD LVCMOS33 [get_ports {respberry_sd_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {respberry_sc_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {hdmi_tx_cec}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a2}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a3}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a4}] +#set_property IOSTANDARD LVCMOS33 [get_ports {arduino_a5}] + +#set_property IOSTANDARD LVCMOS33 [get_ports {audio_sd_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {audio_sc_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {audio_adr_0}] +#set_property IOSTANDARD LVCMOS33 [get_ports {audio_adr_1}] +#set_property IOSTANDARD LVCMOS33 [get_ports {audio_clk}] +# +#set_property IOSTANDARD LVCMOS33 [get_ports {bclk_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {wclk_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {sdada_out_i}] +#set_property IOSTANDARD LVCMOS33 [get_ports {sdata_in_i}] + +#set_property PACKAGE_PIN D19 [get_ports {btns_4bits_tri_i_0}] +#set_property PACKAGE_PIN D20 [get_ports {btns_4bits_tri_i_1}] +#set_property PACKAGE_PIN L20 [get_ports {btns_4bits_tri_i_2}] +#set_property PACKAGE_PIN L19 [get_ports {btns_4bits_tri_i_3}] +#set_property PACKAGE_PIN R14 [get_ports {leds_4bits_tri_o_0}] +#set_property PACKAGE_PIN P14 [get_ports {leds_4bits_tri_o_1}] +#set_property PACKAGE_PIN N16 [get_ports {leds_4bits_tri_o_2}] +#set_property PACKAGE_PIN M14 [get_ports {leds_4bits_tri_o_3}] +#set_property PACKAGE_PIN M20 [get_ports {sws_2bits_tri_i_0}] +#set_property PACKAGE_PIN M19 [get_ports {sws_2bits_tri_i_1}] +#set_property PACKAGE_PIN H16 [get_ports {sys_clk}] +#set_property PACKAGE_PIN Y18 [get_ports {JA1}] +#set_property PACKAGE_PIN Y19 [get_ports {JA2}] +#set_property PACKAGE_PIN Y16 [get_ports {JA3}] +#set_property PACKAGE_PIN Y17 [get_ports {JA4}] +#set_property PACKAGE_PIN U18 [get_ports {JA7}] +#set_property PACKAGE_PIN U19 [get_ports {JA8}] +#set_property PACKAGE_PIN W18 [get_ports {JA9}] +#set_property PACKAGE_PIN W19 [get_ports {JA10}] +#set_property PACKAGE_PIN W14 [get_ports {JB1}] +#set_property PACKAGE_PIN Y14 [get_ports {JB2}] +#set_property PACKAGE_PIN T11 [get_ports {JB3}] +#set_property PACKAGE_PIN T10 [get_ports {JB4}] +#set_property PACKAGE_PIN V16 [get_ports {JB7}] +#set_property PACKAGE_PIN W16 [get_ports {JB8}] +#set_property PACKAGE_PIN V12 [get_ports {JB9}] +#set_property PACKAGE_PIN W13 [get_ports {JB10}] +#set_property PACKAGE_PIN P15 [get_ports {i2c_scl_i}] +#set_property PACKAGE_PIN P16 [get_ports {i2c_sda_i}] +#set_property PACKAGE_PIN L15 [get_ports {rgb_led_tri_o_0}] +#set_property PACKAGE_PIN G17 [get_ports {rgb_led_tri_o_1}] +#set_property PACKAGE_PIN N15 [get_ports {rgb_led_tri_o_2}] +#set_property PACKAGE_PIN G14 [get_ports {rgb_led_tri_o_3}] +#set_property PACKAGE_PIN L14 [get_ports {rgb_led_tri_o_4}] +#set_property PACKAGE_PIN M15 [get_ports {rgb_led_tri_o_5}] +#set_property PACKAGE_PIN T14 [get_ports {arduino_a0_a13_tri_i_0}] +#set_property PACKAGE_PIN U12 [get_ports {arduino_a0_a13_tri_i_1}] +#set_property PACKAGE_PIN U13 [get_ports {arduino_a0_a13_tri_i_2}] +#set_property PACKAGE_PIN V13 [get_ports {arduino_a0_a13_tri_i_3}] +#set_property PACKAGE_PIN V15 [get_ports {arduino_a0_a13_tri_i_4}] +#set_property PACKAGE_PIN T15 [get_ports {arduino_a0_a13_tri_i_5}] +#set_property PACKAGE_PIN R16 [get_ports {arduino_a0_a13_tri_i_6}] +#set_property PACKAGE_PIN U17 [get_ports {arduino_a0_a13_tri_i_7}] +#set_property PACKAGE_PIN V17 [get_ports {arduino_a0_a13_tri_i_8}] +#set_property PACKAGE_PIN V18 [get_ports {arduino_a0_a13_tri_i_9}] +#set_property PACKAGE_PIN T16 [get_ports {arduino_a0_a13_tri_i_10}] +#set_property PACKAGE_PIN R17 [get_ports {arduino_a0_a13_tri_i_11}] +#set_property PACKAGE_PIN P18 [get_ports {arduino_a0_a13_tri_i_12}] +#set_property PACKAGE_PIN N17 [get_ports {arduino_a0_a13_tri_i_13}] +#set_property PACKAGE_PIN W18 [get_ports {raspberry_pi_tri_i_0}] +#set_property PACKAGE_PIN W19 [get_ports {raspberry_pi_tri_i_1}] +#set_property PACKAGE_PIN Y18 [get_ports {raspberry_pi_tri_i_2}] +#set_property PACKAGE_PIN Y19 [get_ports {raspberry_pi_tri_i_3}] +#set_property PACKAGE_PIN U18 [get_ports {raspberry_pi_tri_i_4}] +#set_property PACKAGE_PIN U19 [get_ports {raspberry_pi_tri_i_5}] +#set_property PACKAGE_PIN F19 [get_ports {raspberry_pi_tri_i_6}] +#set_property PACKAGE_PIN V10 [get_ports {raspberry_pi_tri_i_7}] +#set_property PACKAGE_PIN V8 [get_ports {raspberry_pi_tri_i_8}] +#set_property PACKAGE_PIN W10 [get_ports {raspberry_pi_tri_i_9}] +#set_property PACKAGE_PIN B20 [get_ports {raspberry_pi_tri_i_10}] +#set_property PACKAGE_PIN W8 [get_ports {raspberry_pi_tri_i_11}] +#set_property PACKAGE_PIN V6 [get_ports {raspberry_pi_tri_i_12}] +#set_property PACKAGE_PIN Y6 [get_ports {raspberry_pi_tri_i_13}] +#set_property PACKAGE_PIN B19 [get_ports {raspberry_pi_tri_i_14}] +#set_property PACKAGE_PIN U7 [get_ports {raspberry_pi_tri_i_15}] +#set_property PACKAGE_PIN C20 [get_ports {raspberry_pi_tri_i_16}] +#set_property PACKAGE_PIN Y8 [get_ports {raspberry_pi_tri_i_17}] +#set_property PACKAGE_PIN A20 [get_ports {raspberry_pi_tri_i_18}] +#set_property PACKAGE_PIN Y9 [get_ports {raspberry_pi_tri_i_19}] +#set_property PACKAGE_PIN U8 [get_ports {raspberry_pi_tri_i_20}] +#set_property PACKAGE_PIN W6 [get_ports {raspberry_pi_tri_i_21}] +#set_property PACKAGE_PIN Y7 [get_ports {raspberry_pi_tri_i_22}] +#set_property PACKAGE_PIN F20 [get_ports {raspberry_pi_tri_i_23}] +#set_property PACKAGE_PIN W9 [get_ports {raspberry_pi_tri_i_24}] +#set_property PACKAGE_PIN W15 [get_ports {spi_miso_i}] +#set_property PACKAGE_PIN T12 [get_ports {spi_mosi_i}] +#set_property PACKAGE_PIN H15 [get_ports {spi_sclk_i}] +#set_property PACKAGE_PIN F16 [get_ports {spi_ss_i}] +#set_property PACKAGE_PIN T19 [get_ports {hdmi_rx_hpd}] +#set_property PACKAGE_PIN N18 [get_ports {TMDS_IN_clk_p}] +#set_property PACKAGE_PIN P19 [get_ports {TMDS_IN_clk_n}] +#set_property PACKAGE_PIN V20 [get_ports {TMDS_IN_data_p_0}] +#set_property PACKAGE_PIN T20 [get_ports {TMDS_IN_data_p_1}] +#set_property PACKAGE_PIN N20 [get_ports {TMDS_IN_data_p_2}] +#set_property PACKAGE_PIN W20 [get_ports {TMDS_IN_data_n_0}] +#set_property PACKAGE_PIN U20 [get_ports {TMDS_IN_data_n_1}] +#set_property PACKAGE_PIN P20 [get_ports {TMDS_IN_data_n_2}] +#set_property PACKAGE_PIN R19 [get_ports {hdmi_tx_hpd}] +#set_property PACKAGE_PIN L16 [get_ports {TMDS_OUT_clk_p}] +#set_property PACKAGE_PIN L17 [get_ports {TMDS_OUT_clk_n}] +#set_property PACKAGE_PIN K17 [get_ports {TMDS_OUT_data_p_0}] +#set_property PACKAGE_PIN K19 [get_ports {TMDS_OUT_data_p_1}] +#set_property PACKAGE_PIN J18 [get_ports {TMDS_OUT_data_p_2}] +#set_property PACKAGE_PIN K18 [get_ports {TMDS_OUT_data_n_0}] +#set_property PACKAGE_PIN J19 [get_ports {TMDS_OUT_data_n_1}] +#set_property PACKAGE_PIN H18 [get_ports {TMDS_OUT_data_n_2}] +#set_property PACKAGE_PIN U14 [get_ports {hdmi_in_ddc_scl}] +#set_property PACKAGE_PIN U15 [get_ports {hdmi_in_ddc_sda}] +#set_property PACKAGE_PIN Y16 [get_ports {respberry_sd_i}] +#set_property PACKAGE_PIN Y17 [get_ports {respberry_sc_i}] +#set_property PACKAGE_PIN G15 [get_ports {hdmi_tx_cec}] +#set_property PACKAGE_PIN Y11 [get_ports {arduino_a0}] +#set_property PACKAGE_PIN Y12 [get_ports {arduino_a1}] +#set_property PACKAGE_PIN W11 [get_ports {arduino_a2}] +#set_property PACKAGE_PIN V11 [get_ports {arduino_a3}] +#set_property PACKAGE_PIN T5 [get_ports {arduino_a4}] +#set_property PACKAGE_PIN U10 [get_ports {arduino_a5}] + +#AU_SDA_R AU_SCL_R ADR0 ADR1 AU_MCLK_R +#set_property PACKAGE_PIN T9 [get_ports {audio_sd_i}] +#set_property PACKAGE_PIN U9 [get_ports {audio_sc_i}] +#set_property PACKAGE_PIN M17 [get_ports {audio_adr_0}] +#set_property PACKAGE_PIN M18 [get_ports {audio_adr_1}] +#set_property PACKAGE_PIN U5 [get_ports {audio_clk}] +#AU_BCLK_R AU_WCLK_R AU_DIN_R AU_DOUT_R +#set_property PACKAGE_PIN R18 [get_ports {bclk_i}] +#set_property PACKAGE_PIN T17 [get_ports {wclk_i}] +#set_property PACKAGE_PIN G18 [get_ports {sdada_out_i}] +#set_property PACKAGE_PIN F17 [get_ports {sdata_in_i}] + +#AU_SDA +#AU_SCL +#ADR0 +#ADR1 +#AU_MCLK + +#AU_BCLK +#AU_WCLK +#AU_DOUT +#AU_DIN + +set_property PACKAGE_PIN G18 [get_ports {SDATA_O}] +set_property PACKAGE_PIN F17 [get_ports {SDATA_I}] +set_property PACKAGE_PIN R18 [get_ports {BCLK_O}] +set_property PACKAGE_PIN T17 [get_ports {LRCLK_O}] +set_property PACKAGE_PIN U5 [get_ports {MCLK_O}] +set_property PACKAGE_PIN U9 [get_ports {iic_rtl_scl_io}] +set_property PACKAGE_PIN T9 [get_ports {iic_rtl_sda_io}] + +set_property IOSTANDARD LVCMOS33 [get_ports {SDATA_O}] +set_property IOSTANDARD LVCMOS33 [get_ports {SDATA_I}] +set_property IOSTANDARD LVCMOS33 [get_ports {BCLK_O}] +set_property IOSTANDARD LVCMOS33 [get_ports {LRCLK_O}] +set_property IOSTANDARD LVCMOS33 [get_ports {MCLK_O}] +set_property IOSTANDARD LVCMOS33 [get_ports {iic_rtl_scl_io}] +set_property IOSTANDARD LVCMOS33 [get_ports {iic_rtl_sda_io}]