CALIFORNIA STATE UNIVERSITY, NORTHRIDGE HARDWARE ACCELERATION OF SOLAR IMAGE PROCESSING ON FPGA A graduate project submitted in partial fulfillment of the requirements for the degree of Master of Science in Electrical Engineering By Akhila Hegde December 2015 SIGNATURE PAGE The graduate project of Akhila Hegde is approved: _____________________________________ ___________________ Dr. George Law Date _____________________________________ ___________________ Dr. Ramin Roosta Date _____________________________________ ___________________ Dr. Shahnam Mirzaei, Chair Date California State University, Northridge ii ACKNOWLEDGEMENTS I would like to express my gratitude to Dr. Shahnam Mirzaei for being my graduate advisor at California State University, Northridge. His encouragement and invaluable inputs were helpful in successful completion of the project. I would like to thank Dr. George Law and Dr. Ramin Roosta for their extended support and scholarly advice during the course which was very helpful for this project. My thanks extend to Peter Littlewood for his advice during the course of this project. Lastly, to my husband and to my family, for their encouragement and support. iii TABLE OF CONTENTS SIGNATURE PAGE ii ACKNOWLEDGEMENTS iii LIST OF FIGURES vi viii ABSTRACT 1 2 3 1.1 Background 1 1.2 Existing method of processing data 1 1.3 Objective 4 5 DESIGN DESCRIPTION 2.1 Design Flow and High Level Design 5 2.2 Image Processing 6 2.2.1 Cross Correlation 7 2.2.2 Auto Correlation 9 11 SYSTEM RESOURCES 3.1 Zynq7 11 3.2 Clock 13 3.3 Processor System Reset 13 3.4 Memory Units 13 3.4.1 DDR 14 3.4.2 Quad SPI Flash 15 3.4.3 BRAM 16 3.5 4 1 INTRODUCTION 18 AXI Interfaces 3.5.1 Working of AXI 18 3.5.2 AXI BRAM Controller 19 3.6 DMA Controller 20 3.7 Interrupts 22 3.8 Timer 23 3.9 UART 25 3.10 Hardware 28 3.11 Software Tools 29 IMPLEMENTATION OF THE DESIGN ON FPGA iv 31 5 6 4.1 Project Settings 31 4.2 Block Design 31 4.3 Hardware Setup 35 37 RESULTS AND ANALYSIS 5.1 Reading image data from Host PC to FPGA 37 5.2 Spansion Quad SPI Flash Read/Write 38 5.3 Data Transfer between Flash (PS) and BRAM (PL) 39 5.4 Comparison between DMA and Processor data transfers 41 5.5 Integration of Custom IP 42 5.6 Processing Time 43 45 CONCLUSION REFERENCES 46 APPENDIX A 47 APPENDIX B 50 v LIST OF FIGURES Figure 1-1 Group of Sunspots (Image captured by NASA in July 2010) Figure 1-2 Sunspot image using IDL Figure 1-3: Intensity vs. Wavelength waveform Figure 1-4: Data vector of 255 values Figure 2-1: Design Flow Figure 2-2: High Level Design of System Figure 2-3: Data curve compared with reference curves Figure 2-4: Sample data curve and reference curve Figure 2-5: Cross correlation of sample data curve and reference curve Figure 2-6: Auto Correlation of reference curve Figure 3-1: DQS-Clock Delay Settings Figure 3-2: Board Delay Settings Figure 3-3: Block Diagram of True Dual Port BRAM Figure 3-4: Channel Architecture for read Figure 3-5: Channel architecture for write Figure 3-6: AXI BRAM Controller Module Figure 3-7: Block Diagram of DMA Controller Figure 3-8: Block diagram of Interrupt system Figure 3-9: System view of all timers Figure 3-10: Block diagram of UART module Figure 3-11: Transmitted data stream Figure 3-12: Receiver data stream Figure 3-13: Re synchronized received data Figure 3-14: USB-UART Bridge Interface on Zed Board Figure 3-15: Block Diagram of Zed Board Figure 4-1: Project Settings Figure 4-2: Implemented Block Design Figure 4-3: Zynq Block Design Figure 4-4: Configuration of AXI BRAM Controller Figure 4-5: Configuration of BRAM Memory Generator Figure 4-6: Hardware Setup using Zed Board Figure 5-1: Serial port connection with FPGA (USB-UART) Figure 5-2: Data file read from Host PC and stored in FPGA Flash Figure 5-3: Xilinx Library to use Spansion Flash Figure 5-4: Flash Memory Settings for Zed Board Figure 5-5: Flash write operation Figure 5-6: Flash read operation Figure 5-7: Flash data copied to DDR Memory Figure 5-8: Data transfer from DDR to BRAM using Processor Figure 5-9: Data transfer from DDR to BRAM using DMA Figure 5-10: Comparison of DMA and Processor data transfers Figure 5-11: Data read from Custom IP block vi 1 2 3 3 5 6 7 8 9 10 14 14 17 18 19 20 21 22 24 26 26 27 27 28 29 31 32 33 34 35 36 37 37 38 38 39 39 40 40 41 42 43 LIST OF TABLES Table 3-1: Features of Z7020 SoC Table 3-2: DDR3 Pin Connections Table 3-3: Quad SPI Pin Connections Table 3-4: USB-UART Bridge Interface Connections Table 3-5: Software Listing Table 3-6: IP CORE Listing vii 13 15 16 28 30 30 ABSTRACT Hardware Acceleration of Solar Image Processing on FPGA By Akhila Hegde Master of Science in Electrical Engineering The images of sunspots on the surface of the sun were captured and processed using software. This processed data, based on pre-obtained reference values, was used to forecast the weather conditions. The image processing done using software only was very slow. The aim of this project was to accelerate solar image processing using available FPGA resources. A proof of concept is provided here by implementing a System on chip design on FPGA. This system reads the image data (in the form of intensity vector with 255 values) from the PC, stores the data in the memory, and processes it using the available DSP resources for fast computations. The model provided here can be further extended to achieve processing of solar images of large number of pixels in real time. viii 1 1.1 INTRODUCTION Background Sunspots are the small dark spots seen around the surface of the sun. These spots are due to the phenomena of the photosphere that change invariably in time. They are concentrations of flux (magnetic field) and have lesser surface temperature compared to other regions of photosphere [1] . The emergence and decay of sunspots vary based on the solar cycle. Lifetime of a sunspot may vary from days to months and they decay eventually. Sunspots (shown in Figure 1-1) can be observed using land based telescopes and earth orbiting telescopes. Figure 1-1 Group of Sunspots (Image captured by NASA in July 2010) As the sunspot occurrence is linked to solar activity, this phenomenon is useful in predicting space weather, ionosphere state, satellite communications, etc. So these sunspots are observed for a longer time period and useful data is collected for further applications [2]. 1.2 Existing method of processing data The images of sunspot are observed and captured using telescopes and cameras in the observatory. Each image is of dimension 280 x 229. This image of 280 x 229 is mapped to be a data cube with each point in the image representing a vector of 255 data values in the data cube as shown in Figure 1-2. These values are plotted to get intensity vs. wavelength curve corresponding to each vector. A software named IDL is used to get this vector in the form of waveform which is a plot of intensity versus waveform. Image file in .sav format is input to the program which is executed using IDL.exe. This program “Read_IntensityVector.pro” given in APPENDIX A, decodes the values present in the .sav file and opens the corresponding sunspot image as shown in Figure 1-3 IDL0 window. When the .sav file is read from the IDL, 64,120 blocks are written to the text file. Each block has 255 values. Figure 1-2 Sunspot image using IDL In Figure 1-2, the cube has 3 dimensions. Two dimensions of the cube are the 2-D coordinates of the 280 x 229 image. The third dimension is the projection through that 2D point in terms of wavelength. The red dot highlighted in the image is projected as the red vector in the data cube. So this point in the image is the vector equivalent in the data cube. Once the IDL0 window is open, to obtain the intensity vector for a particular spot, click on that spot on the sunspot image. The selected point on the image is circled in red in Figure 1-3. 2 Corresponding Intensity versus wavelength waveform obtained for the red point in IDL0 is also shown in Figure 1-3. Thus the curve can be obtained for any point on the image. Corresponding waveform Figure 1-3: Intensity vs. Wavelength waveform Sample data vector obtained from the IDL software is shown in Figure 1-4. It is a vector of 255 integer values. Data vector to be processed is written to a text file and given input to the image processing program. Figure 1-4: Data vector of 255 values A set of reference vectors (17,000 approx.) are stored in the system initially. Each reference element used is a vector of 255 values. A data curve is read from the program and some 3 calculations are performed using software instructions. The result is compared with these set of reference values to find the closest match. The current calculation is, ∑ ) )) where D is the data curve and R is the reference curve with 255 values each. X is the result. This calculation is carried out for 17000 reference values. Each data curve is compared with all the reference curves from the reference library. The minimal value, Min_Value (X) is found which the best match is. The corresponding reference value is used for further applications related to forecasting the weather conditions, satellite communications, etc. 1.3 Objective The existing method of image processing explained in Section 1.3 uses only software instructions for processing the images. Hence, the process is slow. It takes approximately 7 hours to process an image of 229 x 228 with 64,120 blocks of data vectors. The objective was to speed up this process of processing the image data. The proposal is presented here to speed up image processing that exploits the hardware characteristics of Avnet Zed board (Zynq Evaluation and Development board) which has a hardcore dual Cortex ARM 9 processor on the Processing System side and DSP resources on the Programmable logic side. The image data is read from the PC and processed using DSP resources. Cross correlation and Auto correlation techniques are used to find the best match. Proof of concept is provided for a small data set that can be further extended for large set of data values. With this implementation, the speed of calculation for a 280 x 229 image was reduced to 3 hours. 4 2 2.1 DESIGN DESCRIPTION Design Flow and High Level Design The system comprises of several blocks that perform different operations to achieve the objective of speeding up the image processing. The design flow of the system consists of following steps: The data vector which is read from the IDL software is stored in a text file. These values are read from the PC and stored in the memory. The reference vectors are stored in the Flash Memory as they are constants and are used every time the image processing is performed. The data curve (255 bytes long) and the reference curve (255 bytes long) are processed and the closest match is found. This reference vector which matches the data vector is displayed. This design flow of the system is shown in Figure 2-1 below: Figure 2-1: Design Flow 5 High level design of the system is shown in Figure 2-2. It consists of various modules in the PS and PL sides of the Zed Board. The Image data is read from the Host PC through UART module. Since reference vectors are constants, they are stored in Flash Memory. The data vectors are stored in on chip memory on the PS side. The reference and data vectors are transferred to PL side by AXI Interconnect block. Data is buffered in Block RAM memory for further processing. The image processor block reads the data from the BRAM module and processes it. The result is written to the BRAM module which is sent to PS side through AXI Interconnect. From the PS, it is sent to the Host PC through UART module. Figure 2-2: High Level Design of System 2.2 Image Processing The data curve has to be compared with all the reference curves in the library. Closest match is found among all the reference vectors and the result is returned to the user application. This idea is shown in Figure 2-3. The data curve represents a point on the solar image of dimensions 280 x 229. Each point on the image is compared with every reference values present in the library. The reference vector which is the closest match is found. The data curve from solar image shown in Figure 2-3 is simulated using Matlab 7.8.0. The data vectors are read from the .sav file using the squeeze function and the waveform is plotted for an arbitrary vector with the x and y coordinates being [100, 100]. The values from 1:255 are plotted for this particular point in the image. Similarly, the waveform can be obtained for any arbitrary 6 point on the image. This data curve is compared with reference curves Ref 1 to Ref n where n is 17000 vectors approximately. Figure 2-3: Data curve compared with reference curves To find the closest match few techniques of Digital Signal Processing are used. Cross Correlation and Auto Correlation are applied on the data curve and reference curve. Signal processing is done in the time domain. A comparator is used to compare all the values obtained as a result of this processing and a maximum value is found. This is the minimal distance of the data vector to the reference vector and hence the respective reference vector is selected as the closest match [3]. 2.2.1 Cross Correlation Cross correlation is a digital signal processing technique used to estimate the degree of correlation between any two signals. It is a measure of how closely two given signals are related. Cross correlation is also referred to as sliding dot product. It measures the similarity between two signals as a function of lag of one signal relative to the other signal. It is similar in nature to convolution of two signals. Cross correlation between two signals x[n] and y[n] is given as: ) ∑ ) ) 7 ) ∑ ) ) where r(x, y) is the result of cross correlation and l is the delay. In this design it is used in the image processing to find the closest match of the data vector with a reference vector. A plot of sample of a data curve and a reference curve is as seen in Figure 2-4. The x coordinate and y coordinate of data vector are [100, 100] and another data vector with x and y coordinates [10, 10] is considered to be a reference vector. Both the curves are plotted using Matlab 7.8.0. The curve with green dotted lines represents the reference curve. The curve with blue line is the data curve. Figure 2-4: Sample data curve and reference curve The two signals shown in Figure 2-4 are cross correlated and the result is shown in Figure 2-5. The maxima which is seen at 280, is a useful factor to be considered for the design here. Since we have to find the highest correlated reference vector, the maxima is stored for further processing. 8 Figure 2-5: Cross correlation of sample data curve and reference curve 2.2.2 Auto Correlation Auto Correlation is another technique in digital signal processing defined as the cross correlation of the signal with itself. The maximum value is obtained when the signal is at zero lag with itself. And the size of the peak will be the signal power. The auto correlation of a signal x[n] is given as: ) ∑ ) ∑ ) ) ) ) where r(x, x) is the result of auto correlation and l is the delay. The auto correlation of a reference cube with x and y coordinates [10, 10] was simulated using Matlab. The result is shown in Figure 2-6. The peak value of auto correlation of reference vector is subtracted from the peak value of the cross correlation of data curve and reference curve. This operation is done for each reference vector. The maximum value found is the closest match. The corresponding reference vector is the result we are looking for. Also, these auto correlation results of all the reference vectors can be stored in the memory along with the reference vectors as they are constants and do not change for any value of data vector. 9 Figure 2-6: Auto Correlation of reference curve The result of auto correlation of reference vector is subtracted from the maximal value of the cross correlation result of data curve and reference curve for normalization. The minimal of the differences is considered to be the closest match [4]. 10 3 3.1 SYSTEM RESOURCES Zynq7 Zynq7 comprises of Processing System (PS) with two processor cores of ARM Cortex A9 [5] and Xilinx programmable logic (PL), which is has features of low power consumption and high performance. It also has high metal gate process technology. It has both on-chip and external memory and consists of several on-board peripherals. Various devices in Zynq7 family help designer to develop a cost effective and high performance applications. During booting, the processors are booted first and then the PL system is booted and configured. This allows a software centric approach. The PL can either be configured during boot process or configured in future. It can be reconfigured completely or used with partial reconfiguration and dynamic reconfiguration. We can configure a portion of PL by using partial reconfiguration (PR). The PL configuration data is referred to as bit stream. The PS side and PL side are operated by different power domains which enable the user of Zynq7 family devices to shut down the PL side only if required for power management. The Zynq-7000 AP contains several blocks which perform major functionalities: Processing System (PS), Interconnect, Programmable Logic (PL), Application processor unit (APU), I/O peripherals (IOP), Memory interface. Processing System (PS) Features [6]: Application Processor Unit (APU): it provides very high performance feature. Dual Core CPUs; ARM Cortex-A9 MP Core Programmable Logic (PL) is from the Xilinx 7 series FPGA technology. To meet the custom configurations and requirements we use the PL. PL resources are: Configurable Logic Block (CLBs) Block RAM (BRAM) (port and widths can be configured) DSP slices with 25x18 multiplier 48-bit pre-adder and Accumulator Analog to digital convertor (XADC) Clock management tile (CMT) 11 The PS and PL are coupled together using various sources if required. The PS I/O uses multiplexed I/O pins. I/O’s from PL domain can be accessed from PS side using extended multiplexed input/output interface known as EMIO. Zynq-7000 AP device has this capability. The system includes high level of security, debugging and testing features. Elements of the board are described with respect to the Processing System. For instance, a general purpose master interface means the PS is the master and slave resides in the PL and the vice versa. Memory Interfaces: Zynq 7000 family includes various memory technologies. DDR Controller DDR Controller Core and Transaction Scheduler Quad-SPI Controller Static Memory Controller (SMC) I/O Peripherals GPIO Gigabit Ethernet Controllers (Two) Two USB Controllers (Host, Device or On The Go) SD/SDIO Controllers (Two) SPI Master and Slave Controllers Two CAN Controllers UART0 and UART1 Controllers I2C Controllers (two) PS MIO I/Os It also has PS-PL interfaces and the AXI Data path switch interconnects. The PS and PL features of Z7020 device used for the project are listed in Table 3-1. 12 Table 3-1: Features of Z7020 SoC 3.2 Clock The Zed Board Z7020 embedded processing platform (EPP) device PS subsystem uses a dedicated 33.3333 MHz clock source (IC18 Fox oscillator 767- 33.333333-12) with series termination. Four PLL-based clocks can be generated in the PS, which can be used by PL system. PL subsystem clock input (bank 13, pin Y9) is supplied by an on-board 100 MHz oscillator (IC17 Fox 767-100-136). 3.3 Processor System Reset Power-on reset (PS_RST/BTN7) is designed so as to erase all the configurations of debugging sessions. The functional logic can be reset without effecting the debug environment using external system reset. System reset erases all memory content (including on-chip memory) due to security concerns. PL section is also reset in system reset. Boot mode strapping pins are not resampled by system reset. 3.4 Memory Units Zynq contains a memory interface unit which is hardened to the Zed board. This unit consists of static memory interface modules and the dynamic memory controller. The memory units present 13 on the PS side are the DDR memory and the Flash memory. Block RAM can be used to buffer the data on the PL side. 3.4.1 DDR Zed Board has two Micron MT41K128M16HA-15E:D DDR3 memory modules. This creates an interface of 32-bit. This DDR3 memory component and the hard memory controller module are connected in the Processor System. The DDR memory controller (multi-protocol) is configured such that a 32-bit wide access is provided to a 512 MB address space. Processor System consists of the DDR controller and its associated PHY. It also includes its own set of dedicated I/O pins. The speeds up to 533 MHz/1066 Mbs are supported for DDR3 memory interface. It uses 1.5V SSTL compatible inputs. Zed Board also utilizes DDR3 termination. The EPP module and DDR3 module are placed close enough to keep traces short and matched. The Settings for DQS to clock delay and DDR3 board delay are shown in Figure 3-1 and Figure 3-2 respectively. Figure 3-1: DQS-Clock Delay Settings Figure 3-2: Board Delay Settings The pin connections for DDR3 module is shown in the Table 3-2. 14 Table 3-2: DDR3 Pin Connections 3.4.2 Quad SPI Flash The 4-bit SPI (Quad SPI) Spansion S25FL256S module available on the Zed Board is used for the design implemented here. The Multi-I/O Flash memory provides a non-volatile storage of data and code. It can also be used to configure the PS and PL sections of the Zed Board during booting. The Spansion provides file system which is Spansion Flash File System [7]. The SPI Flash has following features: Total memory of 256Mbit It supports x4, x2, and x1 It can speed up to 104 MHz. This enables Zynq7 to configure at the rate of 100 MHz It is powered from 3.3V source Vivado Design Suite 14.x and later versions can be used for indirect Flash Programming Boot Mode jumpers share the Quad SPI data and clock pins. The connections of Quad SPI Flash are shown in the Table 3-3. 15 Table 3-3: Quad SPI Pin Connections 3.4.3 BRAM Every design needs memory for storage of buffering data, coefficients, and many other use cases. Complex system needs small, medium and large memory arrays to meet all their requirements, with the concern of power consumption from memory units. Hence FPGA is a primary choice. Various application uses variety of memory units and of different sizes of Xilinx FPGAs to have flexibility and low cost. Xilinx 7 series FPGA is facilitated to create Block RAM that can either made by combining blocks together to make large array or divide to make smaller memory arrays. Xilinx 7 series FPGA uses 6 input look up table (LUT) as small memory arrays and provides the user the most flexible resources to form various size of memory arrays [8]. Different types of configurations of BRAMs are possible in the FPGA of the Zed Board. Every 7 series FPGA has 135 to 1889 dual port block RAMs, each capable of storing 36Kb. 32 Kb is allocated to store data and 4Kb is allocated to parity bits. There are two independent ports in block RAM that share the stored data. Each port can be configured as 32Kx1, 16Kx2, 8Kx4, 4Kx9, 2Kx18, 1Kx36 and 512x72. Each block RAM can be divide into two 18Kb block RAMS. It is formed from splitting 36Kb block RAM into two. Each of the two 18Kb block RAM work exactly like 36Kb block RAM. If user requires larger memory block then two 36Kb blocks can combine to form 64Kx1 dual port RAM without requiring to use additional logic. In Xilinx 7 series FPGA block RAM components can be configured three ways: Single-Port Block RAM o Single read/write port o 36K bit configurations (32Kx1, 16Kx2, 8Kx4, 4Kx9, 2Kx18, 1Kx36) 16 o 18K bit configurations (16Kx1, 8Kx2, 4Kx4, 2Kx9, 1Kx18, 512x36) o Configurable write mode WRITE_FIRST: data written on DIA is available on DOA READ_FIRST: old contents of RAM at ADDRA is presented on DOA NO_CHANGE: the DOA holds its previous value Dual-Port Block RAM o Two separate read/write ports, with different write modes o Two ports can have different widths o No contention avoidance when both the ports access the same address, except when clocked by the same clock and write port being READ_FIRST, the read port gets the old data value Simple Dual-Port block RAM o One read and one write port For the purpose of this design, true dual port Block Ram is used. This Block RAM operates in BRAM Controller Mode. Based on the sized configured, Block RAM are assigned from the pool of BRAM FPGA resources. Figure 3-3: Block Diagram of True Dual Port BRAM 17 3.5 AXI Interfaces AXI stands for Advance Extensible Interface (AXI) protocol. It is mainly targeted for the Xilinx intellectual property (IP). This feature was introduced in Xilinx from the Spartan-6 and vertex-6 devices. AXI is a part of ARM Advance Microcontroller Bus Architecture (AMBA) and was first introduced in 2003. The advanced version of it is AXI4. 3.5.1 Working of AXI Basically AXI is an interface to exchange the information between an AXI master and an AXI slave. The structure called an interconnect block used to connect memory mapped AXI master and slave. . The Interconnect IP for AXI is defined in Xilinx AXI Interconnect Core IP. It consists of five different channels: Read Address Channel, Read Data Channel, Write Data Channel, Write Address Channel and Write Response Channel. This is bidirectional interface between an AXI master and an AXI slave simultaneously, and the size of data can also be different. AXI4 is limited to 256 data transfer of burst transaction. The AXI4-Lite which occupies lesser memory than the AXI4 allows only 1 data transfer per transaction. Channel Architectures of Read and Write are shown in Figure 3-4 and Figure 3-5 respectively. Figure 3-4: Channel Architecture for read 18 Figure 3-5: Channel architecture for write Simultaneous and bidirectional data transfer is possible in AXI4 because it provides separate data and address connection. A single address can burst up to 256 words of data in AXI4. AXI4 protocol has verity of option to achieve very high data throughput. Few of them are data downsizing and upsizing, out of order transaction processing and multiple outstanding addresses. It has different clock for AXI master and slave. AXI protocol supports pipeline stages to maintain timing closure. That means protocol allows the insertion of register slices. The bursting is not supported in AXI4-lite all other features of AXI4 supported by AXI4-lite. AXI4-Stream channel supports burst for unlimited amount of data but AXI4-Stream transfers cannot be reordered like AXI4. 3.5.2 AXI BRAM Controller AXI BRAM controller is soft core IP which are comestible Xilinx Vivado Design Suite, Embedded Development kit. It is design as endpoint AXI slave to communicate with local block RAM by integrating with AXI interconnect and system master devices. Single and burst transactions to block RAM both are supported by the core for better performance. Main module of the AXI BRAM controller and port connections are shown in Figure 3-6. It supports several instantiation mode based on connection and BRAM module. By setting the 19 parameter we can utilize a single port Block RAM module or a dual port Block RAM. All communications performed with AXI master port via five channel AXI interface. Write Address Channel (AW) of the AXI bus used for all write operations. This channel is used to specify the type of write transaction and corresponding address information. The single and burst write operation for the communication uses Write Data Channel (W). The Write Response Channel (B) is used to get handshaking signal or response signal or acknowledgment signal. When AXI master sends a request for a read transfer BRAM controller uses the Read Address Channel (AR) for read operation. The BRAM controller which is an AXI slave responds to the request on Read Address Channel (AR). When the read data is available to be sent back to the AXI master, it is the responsibility of the Read Data Channel (AR) to translate the data and status of the operation. Figure 3-6: AXI BRAM Controller Module 3.6 DMA Controller DMA controller is used while moving large amount of data without processor intervention. It can transfer data from memory which can be anywhere in the system like to/from system memories and PL peripherals. Here DMA Controller works on clock_2x clock frequency and uses 64 bit 20 AXI master interface. Data transfer using DMA and the management of control system related instructions are contained in instruction set of DMA engine [9]. DMA controller can have eight DMA channels and it is configurable. Memory requests are pushed to the appropriate write or read queue by the DMA engine. DMA controller has multichannel FIFO to store data during read and write transaction. It has two sets of status register and control register, each set works in separate modes like one works in secure mode and another works non – secure code moreover this register are accessible through software. The DMA controller block diagram is shown in Figure 3-7. Figure 3-7: Block Diagram of DMA Controller DMA instruction Execution engine: this block controls process program code which includes a DMA transmission. Instruction cache: cache is used to store instruction temporarily and cache performs a look up when any thread requests to fetch an instruction stored in the memory. Read/Write instruction Queues: this queues has been using to as a storage buffer prior to issue transmission on AXI. The controller adds relevant read or wright queue when a channel thread executes load or store instruction. 21 Multi-channel data FIFO: MFIFO is used as a data buffer to store data that it reads or writes during DMA transmission. Interrupt interface: enables efficient communication between DMAC and interrupt controller. PL peripheral DMA interface: PL peripheral request is asynchronous to the DMA and supports the connection of DMA peripherals in PL. 3.7 Interrupts The block diagram of Interrupt system is shown in Figure 3-8. The Zed Board processing system (PS) has two ARM Cortex A9 processors. For interrupts handling it has a pl390 Generic Interrupt Controller (GIC). Structure of the interrupts is closely linked to the ARM architecture and the interrupts from I/O peripherals and the interrupts from the Programmable Logic (PL) side are accepted by the processors. Figure 3-8: Block diagram of Interrupt system There are three types of interrupts as shown in Figure 3-8. They are private peripheral interrupts (PPIs), software generated interrupts (SGIs) and shared peripheral interrupts (SPIs). Both the ARM processors have their own sets of private peripheral interrupts (PPIs). These PPIs can be accessed privately using banked registers. The PPIs comprise of: Global timer Private watchdog timer 22 Private timer FIQ/IRQ from the PL Software generated interrupts are asserted by configuring the register ICDSGIR in the generic interrupt controller. The I/O pins and peripherals on the PS and PL sides generate SPIs. These SPIs and SGIs can be routed to either or both CPUs. The SPIs generated on the PS side can be routed to PL as well. The Generic Interrupt Controller is the centralized module which handles all the interrupts. It comprises of two major modules: Interrupt Controller CPU (ICC) and the Interrupt Controller Distributor (ICD). The two main tasks of GIC are controlling the interrupts and distributing the interrupts to the CPUs. It manages the interrupts sent from the PS and PL to the CPUs. It controls asserting and de asserting of the interrupts. They can also be assigned priorities. Interrupts can be masked by the GIC. This controller has the “ARM Generic Interrupt Controller Architecture” version 1.0. It is non-vectored type. Every interrupt source has a unique interrupt ID assigned to it. The priority and the target CPUs can be configured for every interrupt source. The ICC and ICD have different sets of registers to handle the interrupts. The three main aspects of the interrupts that has to be handled by the GIC are sensitivity, handling and target CPU. The ICDICFR register controls the sensitivity and the handling of the interrupts. The ICDIPTR register handles the target CPUs of the interrupt sources. 3.8 Timer The two Cortex A9 Processors have private 32 bit timer and 32 bit watch dog timer. Both processors use a common 64 bit global timer. All these timers work at half the CPU frequency. Global Timer is a 64 bit increment counter with auto increment property. Global timer always clocks at half the CPU frequency. Private timer and watchdog timer, 32 bit timers, generate an interrupt when their values reach zero. One of the features of private timer is configurable starting value for counter. This timer works in two modes which are single shot or auto reload mode. The interconnections of all the timers of the system are shown in Figure 3-9. 23 Figure 3-9: System view of all timers At system level there are one 24 bit watch dog timer and two 16 bit triple timers / counters. The system watchdog timer and triple timer work on 1/4th or 1/6th of the CPU frequency. These timers can also be clocked by external signal from an MIO pin. Along with two 32 bit CPU private timers, it also has one system watchdog timer which is mostly used to signal catastrophic system failure. SWDT as 24 bit internal counter and it can select input from PL bus clock or from internal or external clock. When a timeout occurs, its output is one or both of reset or interrupts to system. One more feature is programmable timeout and programming output duration on timeout. Example: timeout range is 32760 to 68719476735 clock cycles. System interrupt duration can be programmed for 4, 8, 16 or 32 clock cycles. Signal restart will reload 24 bit counter and restart counting. There are three independent Triple Timer Counters (TTC) counters/timers. All of them have 16 bit pre scales and 16 bit up/down counters. Input clock from internal or external clock or internal PS clock bus can be the input. All the counters have individual interrupts. This interrupt can be on overflow, at regular interval or on matched counting value. Through MIO and to PL it can also generate waveform output (PWM). This counter can count up or down and configurable count for given interval. 24 Triple Timer counter works on two modes interval mode or overflow mode. In interval mode the counter continuously increments or decrements in between 0 to value in internal register. Every time when count passes zero or match register it generates interval interrupt. While in overflow mode the counter counts between 0 and 0xFFFF and direction of counting is determined by DEC bit of counter control register. This will generate interrupt when count value passes match register. 3.9 UART UART- Universal Asynchronous Receiver and Transmitter is a full duplex communication protocol that supports a large range of programmable baud rates. UART controller also has some more features like automatic parity generation and multi-master detection mode. It is designed with two separate paths for transmission and reception. Each path contains a 64- byte FIFO. Serialization and de-serialization of data in TX FIFO and Rx FIFO is done by the controller. Status, interrupt status and modem status register are used to read states of FIFOs, modem signal and other controller function. The UART functions are controlled by mode register and configuration register. The block diagram of UART is shown in Figure 3-10. APB bus is used for communication between the controller and APU. The data which are arrives through system memory stored in Transmit FIFO and the received data will be stored in the Receive FIFO. Control logic selects various operation modes. It contains control register and Mode register. The baud rate generator generates a clocking at proper frequency division (baud rate clock) for transmitter and receiver. It can generate a baud rate of 600, 9600, 28800,115200, 230400, 460800, 921600 using UART ref clock. Maximum data width for the transmit FIFO is 8 bit, we can load data in transmit FIFO by writing the TX FIFO reg. Transmit FIFO is used to store the data from the APB interface until it is loaded into shift register. TX Empty flag will clear and remains low when Transfer FIFO is loaded with data. So the software can write to TX FIFO when this flag goes high after all data has been removed from the register. Interrupt status register shows that TX FIFO is completely full and will not allow any additional data in Transmit FIFO; moreover nearly full flag indicates only one byte available for being loaded in FIFO. 25 Figure 3-10: Block diagram of UART module Receiver FIFO also has eight bit data width. It receives data by receiver serial shift register. RX FIFO has the same characteristics as TX FIFO like receive data full flag and RX FIFO full status register prevent any further data into RX FIFO if it is full. There are 4 operating modes: Normal mode, Automatic echo mode, local loopback mode and remote loopback mode. These modes decide the routing of transmit and receive signals in the controller. Transmission and Reception of data in UART is shown in figures from Figure 3-11 to Figure 3-14. Transmitter module gets data in parallel from TX FIFO and stores it into transmitter shift register to make it serialized. Transmitter shifts out start, data, parity and stop bits as a serial data as shown in Figure 3-11. At every falling edge of TX baud rate enable data is transmitted and it transmits LSB first. Figure 3-11: Transmitted data stream 26 We can adjust number of data bits and number of set bits to transmit using mode register bits CHRL (char length) and NBSTOP respectively. Software can use polling or interrupt methods to transmit data. Number of data bits and number of set bits to transmit can be configured using mode register bits CHRL (char length) and NBSTOP respectively. Software can use polling or interrupt methods to transmit data. UART samples the rxd signal with reference to baud_sample and clock enable. The low level transaction indicates the beginning of start bit as shown in Figure 3-12. It waits for BDIV/2 baud rate clock cycle and sample rxd for three times to get a valid start bit. Figure 3-12: Receiver data stream Re synchronization of baud rate clock enable is needed for next sampling of rxd as shown in Figure 3-13. When baud_rx_rate goes high, last three bits are compared and if two samples have same defined value then its defined as data bits, after this all data is shifted to the shift register and then to the Rx FIFO. Figure 3-13: Re synchronized received data Receiver generates parity error when received parity is not matched with the one in mode register. The receiver also generates framing error when it receives invalid stop bit. If Rx FIFO is full and receiver gets a start bits then it will generate receiver overflow error. 27 The USB-to-UART bridge interface present on the Zed Board is shown in Figure 3-14. It is connected UART1, PS UART peripheral. A host computer is connected using Cypress CY7C64225 USB-to-UART Bridge device. Basic TXD and RXD connections are implemented. The MIO [48:49] are assigned to UART1 PS peripheral. Figure 3-14: USB-UART Bridge Interface on Zed Board The pin connections for Cypress USB-UART Bridge interface is given in Table 3-4. Table 3-4: USB-UART Bridge Interface Connections 3.10 Hardware System on Chip device used for the project is of Xilinx Zynq-7000 series. The board is known as the Zed Board which stands for Zynq Evaluation and Development Board. This board uses Zynq SoC XC7Z020-1CSG484CES EPP which is a combination of dual core Arm Cortex 9 Processor (known as Processing System) and 85,000 Series 7 Programmable Logic Cells (known as PL). PS and PL are interfaced by AXI4 interface which is proprietary of Xilinx. It is a standard interface which is used in the newer generations of IP cores by Xilinx. AXI4 interface is used in the design since this System on chip design requires implementation of the logic on both PS and PL sides [10]. The block diagram of the Zed Board is shown in Figure 3-15. Zed board has a large number of on board peripherals. These peripherals are distributed on PS and PL sides. Few peripherals can 28 be accessed only from the PS and others from the PL. For the purpose of this project, UART, On board oscillators (33.33 MHz clock for PS and 100 MHz clock for PL), QSPI Flash memory and DDR on chip memory are used. The PROG LED indicates whether the board is programmed or not. Figure 3-15: Block Diagram of Zed Board The hardware resources required for this project is the Zed Board Evaluation Kit from Avnet manufacturer. The two micro USB cables are used to program the FPGA and talk to the UART on PS side respectively. 3.11 Software Tools Xilinx Vivado Design Suite 2015.2 is used to implement the design which is targeted for Zynq SoC xc7z020clg484-1 part. The Vivado Design Suite software development kit (sdk) is used to program the PS. IDL software is used to get the data vectors from the solar image. Tera term software, which is a terminal emulator application, is used to transfer the image data from the PC to the Zed Board through Serial Port connections. The software resources and their versions used are listed in Table 3-5: 29 Software Tool Version Vivado Design Suite Web Pack 2015.2 Tera Term 4.88 IDL 5.0 Table 3-5: Software Listing Vhdl Hardware Description Language is used for implementation of this System on Chip design. This design can be implemented in Verilog Hardware Description Language as well. Xilinx IP cores are used from the catalog for the implementation. This is a limitation of the design for porting it to different FPGA technology or to ASIC. IP Cores used (from Xilinx) in the design are listed in Table 3-6. IP Core Version Zynq7 Processing System 5.5 Processor Reset System 5.0 AXI Interconnect 2.1 AXI BRAM Controller 1.0 Block Memory Generator 8.2 Table 3-6: IP CORE Listing A Custom IP is created for the Image Processor so as to integrate the implemented vhdl files with the rest of the system. The Custom IP is a block which is built with the image processing logic so as to run on Programmable Logic clock of 100 MHz. It is connected to the Xilinx IP Cores in the Block Design for the FPGA. A common vhdl wrapper is generated for the entire design and used to Program the FPGA. 30 4 4.1 IMPLEMENTATION OF THE DESIGN ON FPGA Project Settings The proposed design is implemented on the FPGA using Vivado Design Suite 2015.2 tool. Available Xilinx IP cores are added from the IP Catalog as per the requirements of the design. A Custom IP is created and integrated with the Xilinx IP Core to be able to interface implemented PS and PL modules. The project settings are as shown in Figure 4-1. Figure 4-1: Project Settings The project is targeted for Zynq 7020 EPP (xc7z020clg484-1) available on the Zed Board. The target language used for the implementation of the design is VHDL Hardware Description Language. Verilog can also be used to implement this design. Xilinx default library (xil_defaultlib) is the default library for this design. After integrating all the IP cores (Xilinx IP cores and the Custom IP), a vhdl wrapper is generated which is useful for generating the bit stream to program the Zed Board PS and PL FPGA. 4.2 Block Design The Block Design for the project is shown in Figure 4-2. It consists of Zynq7 Processing System, Processor System Reset, AXI Interconnect, AXI BRAM Controller, Block Memory Generator and the Image Processor blocks. The connections between the Xilinx IP Cores can be done automatically by selecting connection automation option. Manual connections have to be done 31 for Custom IP Cores. PS side operates on 33.33 Hz clock. PL operates on 100 MHz clock which is the FCLK_CLK0 in the Block Design. BRAM and Image Processor block reside on the PL side while the others are on PS side. Figure 4-2: Implemented Block Design Processor System Reset block provides a global system reset for the AXI interconnects and the Peripherals. Interconnect_aresetn and peripheral_aresetn are used to reset axi_mem_intercon and axi_bram_ctrl_0. Clock input and reset input for this module is from the Processing System. Zynq7 Processing System is configured as shown in Figure 4-3. The modules used are highlighted in green. In I/O Peripherals UART0 is used to send/receive data to/from Host PC. Quad SPI Flash provides non-volatile data storage capability. Reading the reference vectors from the Host PC every time the device is powered on is cumbersome. As these reference vectors are constant values, they are stored in Quad SPI Flash permanently. This reduces the overhead of dealing with large set of reference vectors every time the device is powered on. Timer module is used to keep track of the time spent for different operations so as to measure the system performance. It also helps find the bottle necks of the design in terms of speed. DMA controller 32 module is used to transfer the data from PS to PL without interrupting the processor. This transfer is faster than the normal transfer of data from PS to PL using the processor. The comparison of time taken between data transfers with and without DMA is discussed in Results and Analysis section of the document. For large data sets DMA is preferred. Figure 4-3: Zynq Block Design Since DMA Controller is operated in Interrupt mode, GIC module is used to handle the interrupt enabling and disabling during the DMA operations. DDR Memory module is used to buffer the data while sending it to PL BRAM memory from PS Flash memory. The AXI Interconnect block provides interface between the PS and PL sides. It acts as an AXI slave with respect to the processor and as an AXI Master with respect to the AXI BRAM Controller. The M00_AXI master port of axi_mem_intercon block is connected to S_AXI slave port of axi_bram_ctrl_0 block. 33 AXI BRAM Controller block is uses AXI4 Protocol. The configurations of this module for the purpose of the project are shown in Figure 4-4. Data width is 32 bits. Memory depth was set to 2048 based on the configuration of the Block Memory Generator block. This is configurable up to 18K. Support AXI Narrow Bursts is set to Manual as this is the necessary configuration for data transfer using DMA controller. Only one port (PORTA) is used. This port is accessed by the Block RAM Generator module to get the PS data. Figure 4-4: Configuration of AXI BRAM Controller Block RAM memory generator module generates the BRAM blocks required by the project. This is on PL side. BRAM FPGA resources are inferred for this block. The configurations of this block are shown in Figure 4-5. The BRAM blocks generated is of type True Dual Port RAM. Dual Port RAM was selected so as to read the data from Port A and Port B for the DSP computations on the PL side. Currently, Port A is used by the BRAM Controller module to write image data from the PS, while data is read from Port B to the PL side. Port A and Port B write and read widths are set to 32 bits. Write Depth is set to 8192 bits. It can be configured from 2 bits to 1048567 bits. The operating mode of the BRAM is Write First mode. 34 Figure 4-5: Configuration of BRAM Memory Generator Image processor block is a Custom IP created for this project and integrated with Xilinx IP Cores. To create a Custom IP, implemented vhdl modules are integrated and synthesized. A wrapper is created after synthesis. Using the Review and Package IP option, the wrapper is packed as an IP and Custom name is given to this IP. If the package was successful the IP appears in Xilinx IP catalog. Custom IP can be used across the projects easily by instantiating from the IP catalog. In this project the Image Processor IP was created and instantiated in the block design. This module comprises of the DSP computation modules behaviorally modeled using VHDL language. The buffered data from the BRAM is read from Port B. The computations on this data are done and the result is stored back to the BRAM. This result is read from the PS through AXI Interface and displayed on the terminal for the user to read. 4.3 Hardware Setup The hardware used for the design is Zed Board Evaluation Kit. The board is interfaced with the host PC using micro USB cables. The hardware setup for this project is shown in Figure 4-6. The 35 power cable of 12 V is connected to the board. A switch next to the power cable has to be in ON position to power on the device. Micro USB cable connected to PROG slot is for programming the FPGA with the generated bit stream. The other micro USB cable is connected to the UART slot. This facilitates the UART communication between the device and the host PC. Figure 4-6: Hardware Setup using Zed Board 36 5 RESULTS AND ANALYSIS The implementation of the proposed design was accomplished in steps. Every new module added to the existing design was tested thoroughly at module level and system level. This helped to design a complex design efficiently. The debugging and testing of the System on Chip was easy. 5.1 Reading image data from Host PC to FPGA First step of the project was to transfer the image data file present on Host PC to FPGA. This was accomplished using Tera term application. Serial port connection is established with the FPGA UART Port as shown in Figure 5-1. Baud rate is set to 115200. Figure 5-1: Serial port connection with FPGA (USB-UART) Once the serial port setup is successful, the file is sent from the Host PC to FPGA using Send File option. For testing purpose, a file named IntegerDataValues.txt shown in Figure 5-2 was sent to the FPGA to store in Flash memory. These data values were successfully read from Flash. Results are presented in section 5.2. Figure 5-2: Data file read from Host PC and stored in FPGA Flash 37 5.2 Spansion Quad SPI Flash Read/Write To use the on board Spansion Flash memory, xilsif library has to be included in the Board Support Package Settings as shown in the Figure 5-3. This library has the functions provided by Xilinx to initialize flash memory, read/write data from/to flash memory. Figure 5-3: Xilinx Library to use Spansion Flash Flash memory settings for Zed Board are shown in Figure 5-4. The value 5 for serial_flash_family indicates it is Spansion Flash. Quad SPI interface is assigned value 3. Figure 5-4: Flash Memory Settings for Zed Board The data from the file given in Figure 5-5 was written to Flash Memory. The result of write operation is shown in Figure 5-6. To verify write operation, read operation was performed. The data written to Flash was successfully read. This verifies the Read/Write operation of Flash Memory. 38 Figure 5-5: Flash write operation Figure 5-6: Flash read operation 5.3 Data Transfer between Flash (PS) and BRAM (PL) The data written to the Flash memory was read after powering off and restarting the Zed Board. This verified the nonvolatile data storage capability of Spansion Flash memory present on Zed Board. The data read from the terminal of Vivado sdk is shown in Figure 5-7. This data is copied 39 to the DDR memory. The data is then transferred from the DDR memory on the PS side to the BRAM memory on the PL side. Figure 5-7: Flash data copied to DDR Memory The data from PS was transferred to PS using two methods, one using DMA and the other using the Processor. Data transfer of 255 bytes using the processor is shown in Figure 5-8. Figure 5-8: Data transfer from DDR to BRAM using Processor 40 This data transfer took 16283 clock cycles. The data written to the BRAM in the PL side was verified by reading the BRAM memory contents. In the second method of data transfer, DMA Controller was used to transfer the data to the BRAM Memory. The GIC interrupt controller was used to handle the interrupts required for DMA operation. The data transfer of 255 values was verified by reading the data written to the BRAM memory as shown in the Figure 5-9. Figure 5-9: Data transfer from DDR to BRAM using DMA These methods verified that a path existed between PS and PL which can be used for transferring large data values from PS to PL. This is required in many applications which do heavy computations because the PL with its rich DSP resources can perform the computations much faster. 5.4 Comparison between DMA and Processor data transfers The two methods of data transfers from DDR memory to BRAM memory using DMA and Processor are compared. Using Processor only, the data transfer of 255 bytes of data took 16283 41 clock cycles. Same data transfer took 1526 clock cycles using DMA Controller. 10 x improvements were seen. The results of comparison between the two methods are shown in Figure 5-10. Hence, the preferred choice for transferring large data would be using DMA Controller. Figure 5-10: Comparison of DMA and Processor data transfers 5.5 Integration of Custom IP Various experimentations were done to find a path between PS and PL domains. The PS system was created using the available Xilinx IP cores for the processing system and the memory modules as per the requirements of the design. For this purpose, a vhdl module was behaviorally modeled and synthesized. A Custom IP core was created with this synthesized design and instantiated in the PS side. It was shown that the Custom IP was able to communicate to PS side and display the data on the terminal. The results of a BRAM IP implemented in vhdl are shown in the Figure 5-11. 42 Figure 5-11: Data read from Custom IP block 5.6 Processing Time The processing time for the solar image processor will be: PS Clock = 33.33 MHz, PL = 100 MHz. The total samples are 17000 * 280 * 230 data vectors. Each data vector is of length 256 bytes. While calculating the processing time on PL side, the factors to be considered are: time to populate the registers (td), time to calculate correlation (tc) and time to fill registers with 0’s (tz). PL logic has to be implemented for a full image such that: PL processing time = (td + tc + tz) * 17000 * 280*230/ 100 MHz PL processing time = (256+256+256) *17000 * 280*230/ 100 MHz PL processing time = (256+256+256) *17000 * 280*230/ 100 MHz 43 PL processing time = 2.33 hours It is seen from Section 5.4 that PS takes 1526 cycles to transfer 256 data values to PL. So for writing the data to PL and reading the data from the BRAM, approximately 0.4 hours can be allocated. The software cycles are not very accurate. So the processing time will be 3 hours (approx.). 44 6 CONCLUSION As per the analysis presented in section 5, the design was implemented and tested using Zed Board hardware successfully. The desired results were obtained. Hence the objective of the project was achieved. Apart from developing a system for producing desired results, different skills were developed during the course of this project which can be used for designing complex systems in the future. Familiarization with different design tools such as Vivado Design Suite, Vivado SDK, Matlab, IDL, Tera term, etc. The process of designing a complete System on Chip design and testing it on the hardware and the challenges seen during the course of the project have enhanced the knowledge and expertise in this field which will be of great importance in the future projects. 45 REFERENCES 1. Moon K. R., Li J.J., Delouille V., Watson F., Hero A.O., “Image patch analysis and clustering of sunspots: A dimensionality reduction approach”, 27-30 Oct. 2014 2. Colak T., Qawahji R., “Automatic Sunspot Classification for Real-Time Forecasting of Solar Activities”, 14-16 June 2007 3. C. T. Johnston, K. T. Gribbon, D. G. Bailey, “Implementing Image Processing Algorithms on FPGAs”, Reasearch gate net publication 4. Ridha Djemal, Didier Demigny and Rached Tourki, “A Real-time Image Processing with a Compact FPGA-based architecture”, Journal of Computer Science 1 (2): 207-214, 2005 5. Rich Nass, "Xilinx puts ARM core into its FPGAs", EE Times April 27, 2010 6. "The Vivado Design Suite accelerates programmable systems integration and implementation by up to 4X.", EDN, Jun 15, 2012. 7. Xiaohu Wang, Zhaoming Huang, “Design and implementation of high speed QSPI memory controller”, 14394679 8. Xinrui Zhang, Jian Wang, Yuan Wang, Dan Chen, Jinmei Lai, “BRAM-based asynchronous FIFO in FPGA with optimized cycle latency”, 13357105 9. Tumeo, A., Monchiero M., Palermo G., Ferrandi F., Sciuto, D., “Lightweight DMA management mechanisms for multiprocessors on FPGA”, 2-4 July 2008 10. Brent Przybus, Xilinx, "Xilinx Redefines Power, Performance, and Design Productivity with Three New 28 nm FPGA Families: Virtex-7, Kintex-7, and Artix-7 Devices." June 21, 2010. 46 APPENDIX A Extracting Solar Image Data Vector 1. Read_IntensityVector.pro ; ; ; ; ; ; ; Engineer: Akhila Hegde Created Date: 06/12/2015 Filename: Read_IntensityVector.pro Software Version Used: IDL 5.0 Description: This file reads the solar image stored in the .sav file format and generates the solar image in a window. When any point on the image is clicked, it displays the intensity vs. wavelength waveform curve for that point on the solar image. pro Read_IntensityVector restore,"..\iDL_images\oct16_5172_map04i.sav" image_size = size (BIG_ARR_I) print, size (BIG_ARR_I) window,0,xsize = image_size(2),ysize = image_size(3) tvscl,big_arr_i(10,*,*) print,big_arr_i(*,5,5) counter = 0 loop: counter = counter + 1 wset,0 cursor,x,y,/device,/up user print,x,y waveform window,1,xsize=500,ysize=500 plot,big_arr_i(*,x,y) waveform if (counter eq 10) then goto, stop goto, loop stop: end 47 ; read solar image .sav file ; store the size of the Image ; print the size of the Image ; open window to display Image ; display image ; get the coordinates of the point the ; clicks on Image to get intensity ; plot the intensity vs. wavelength ; repeat for 10 points 2. Text_IntensityVector.pro ; ; ; ; ; ; ; Engineer: Akhila Hegde Created Date: 06/12/2015 Filename: Text_IntensityVector.pro Software Version Used: IDL 5.0 Description: This file reads the solar image stored in the .sav file format and generates the ASCII equivalent data. It stores these ASCII data to the text file. The data in the text file can be processed later. pro Text_IntensityVector ; read solar image file of .sav format restore,'../iDL_images/oct16_5172_map04i.sav', /VERBOSE ; open the file where solar image data has to be stored in write mode openw, 1, '../iDL_output/ImageData.txt' ; write the data to the text file printf, 1, BIG_ARR_I ;close the file close, 1 end 48 3. Solar Image data written to text file ImageData.txt 49 APPENDIX B Source Code: 50 51 52 53 54 55 56 The Xilinx in-built Library functions are used where ever necessary. SolarImageprocessing_wrapper.vhd 57 58 AXI Memory Interconnect IP Core: --Copyright 1986-2015 Xilinx, Inc. All Rights Reserved. -----------------------------------------------------------------------------------Tool Version: Vivado v.2015.2 (win64) Build 1266856 Fri Jun 26 16:35:25 MDT 2015 --Date : Thu Nov 12 12:35:40 2015 --Host : Akhila running 64-bit major release (build 9200) --Command : generate_target Solar_Image_Processing.bd --Design : Solar_Image_Processing --Purpose : IP block netlist ---------------------------------------------------------------------------------library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VCOMPONENTS.ALL; entity s00_couplers_imp_D51E3L is port ( M_ACLK : in STD_LOGIC; M_ARESETN : in STD_LOGIC_VECTOR ( 0 to 0 ); M_AXI_araddr : out STD_LOGIC_VECTOR ( 12 downto 0 ); M_AXI_arburst : out STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_arcache : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_arid : out STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_arlen : out STD_LOGIC_VECTOR ( 7 downto 0 ); M_AXI_arlock : out STD_LOGIC_VECTOR ( 0 to 0 ); M_AXI_arprot : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_arready : in STD_LOGIC; M_AXI_arsize : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_arvalid : out STD_LOGIC; M_AXI_awaddr : out STD_LOGIC_VECTOR ( 12 downto 0 ); M_AXI_awburst : out STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_awcache : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_awid : out STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_awlen : out STD_LOGIC_VECTOR ( 7 downto 0 ); M_AXI_awlock : out STD_LOGIC_VECTOR ( 0 to 0 ); M_AXI_awprot : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_awready : in STD_LOGIC; M_AXI_awsize : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_awvalid : out STD_LOGIC; M_AXI_bid : in STD_LOGIC_VECTOR ( 11 downto 0 ); 59 M_AXI_bready : out STD_LOGIC; M_AXI_bresp : in STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_bvalid : in STD_LOGIC; M_AXI_rdata : in STD_LOGIC_VECTOR ( 31 downto 0 ); M_AXI_rid : in STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_rlast : in STD_LOGIC; M_AXI_rready : out STD_LOGIC; M_AXI_rresp : in STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_rvalid : in STD_LOGIC; M_AXI_wdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); M_AXI_wlast : out STD_LOGIC; M_AXI_wready : in STD_LOGIC; M_AXI_wstrb : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_wvalid : out STD_LOGIC; S_ACLK : in STD_LOGIC; S_ARESETN : in STD_LOGIC_VECTOR ( 0 to 0 ); S_AXI_araddr : in STD_LOGIC_VECTOR ( 31 downto 0 ); S_AXI_arburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); S_AXI_arcache : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_arid : in STD_LOGIC_VECTOR ( 11 downto 0 ); S_AXI_arlen : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_arlock : in STD_LOGIC_VECTOR ( 1 downto 0 ); S_AXI_arprot : in STD_LOGIC_VECTOR ( 2 downto 0 ); S_AXI_arqos : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_arready : out STD_LOGIC; S_AXI_arsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); S_AXI_arvalid : in STD_LOGIC; S_AXI_awaddr : in STD_LOGIC_VECTOR ( 31 downto 0 ); S_AXI_awburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); S_AXI_awcache : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_awid : in STD_LOGIC_VECTOR ( 11 downto 0 ); S_AXI_awlen : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_awlock : in STD_LOGIC_VECTOR ( 1 downto 0 ); S_AXI_awprot : in STD_LOGIC_VECTOR ( 2 downto 0 ); S_AXI_awqos : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_awready : out STD_LOGIC; S_AXI_awsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); S_AXI_awvalid : in STD_LOGIC; S_AXI_bid : out STD_LOGIC_VECTOR ( 11 downto 0 ); S_AXI_bready : in STD_LOGIC; S_AXI_bresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); S_AXI_bvalid : out STD_LOGIC; S_AXI_rdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); S_AXI_rid : out STD_LOGIC_VECTOR ( 11 downto 0 ); S_AXI_rlast : out STD_LOGIC; S_AXI_rready : in STD_LOGIC; S_AXI_rresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); S_AXI_rvalid : out STD_LOGIC; S_AXI_wdata : in STD_LOGIC_VECTOR ( 31 downto 0 ); S_AXI_wid : in STD_LOGIC_VECTOR ( 11 downto 0 ); S_AXI_wlast : in STD_LOGIC; S_AXI_wready : out STD_LOGIC; S_AXI_wstrb : in STD_LOGIC_VECTOR ( 3 downto 0 ); S_AXI_wvalid : in STD_LOGIC ); end s00_couplers_imp_D51E3L; 60 architecture STRUCTURE of s00_couplers_imp_D51E3L is component test_auto_pc_0 is port ( aclk : in STD_LOGIC; aresetn : in STD_LOGIC; s_axi_awid : in STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_awaddr : in STD_LOGIC_VECTOR ( 31 downto 0 ); s_axi_awlen : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_awsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); s_axi_awburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_awlock : in STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_awcache : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_awprot : in STD_LOGIC_VECTOR ( 2 downto 0 ); s_axi_awqos : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_awvalid : in STD_LOGIC; s_axi_awready : out STD_LOGIC; s_axi_wid : in STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_wdata : in STD_LOGIC_VECTOR ( 31 downto 0 ); s_axi_wstrb : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_wlast : in STD_LOGIC; s_axi_wvalid : in STD_LOGIC; s_axi_wready : out STD_LOGIC; s_axi_bid : out STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_bresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_bvalid : out STD_LOGIC; s_axi_bready : in STD_LOGIC; s_axi_arid : in STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_araddr : in STD_LOGIC_VECTOR ( 31 downto 0 ); s_axi_arlen : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_arsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); s_axi_arburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_arlock : in STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_arcache : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_arprot : in STD_LOGIC_VECTOR ( 2 downto 0 ); s_axi_arqos : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_arvalid : in STD_LOGIC; s_axi_arready : out STD_LOGIC; s_axi_rid : out STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_rdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); s_axi_rresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_rlast : out STD_LOGIC; s_axi_rvalid : out STD_LOGIC; s_axi_rready : in STD_LOGIC; m_axi_awid : out STD_LOGIC_VECTOR ( 11 downto 0 ); m_axi_awaddr : out STD_LOGIC_VECTOR ( 31 downto 0 ); m_axi_awlen : out STD_LOGIC_VECTOR ( 7 downto 0 ); m_axi_awsize : out STD_LOGIC_VECTOR ( 2 downto 0 ); m_axi_awburst : out STD_LOGIC_VECTOR ( 1 downto 0 ); m_axi_awlock : out STD_LOGIC_VECTOR ( 0 to 0 ); m_axi_awcache : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_awprot : out STD_LOGIC_VECTOR ( 2 downto 0 ); m_axi_awregion : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_awqos : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_awvalid : out STD_LOGIC; m_axi_awready : in STD_LOGIC; 61 m_axi_wdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); m_axi_wstrb : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_wlast : out STD_LOGIC; m_axi_wvalid : out STD_LOGIC; m_axi_wready : in STD_LOGIC; m_axi_bid : in STD_LOGIC_VECTOR ( 11 downto 0 ); m_axi_bresp : in STD_LOGIC_VECTOR ( 1 downto 0 ); m_axi_bvalid : in STD_LOGIC; m_axi_bready : out STD_LOGIC; m_axi_arid : out STD_LOGIC_VECTOR ( 11 downto 0 ); m_axi_araddr : out STD_LOGIC_VECTOR ( 31 downto 0 ); m_axi_arlen : out STD_LOGIC_VECTOR ( 7 downto 0 ); m_axi_arsize : out STD_LOGIC_VECTOR ( 2 downto 0 ); m_axi_arburst : out STD_LOGIC_VECTOR ( 1 downto 0 ); m_axi_arlock : out STD_LOGIC_VECTOR ( 0 to 0 ); m_axi_arcache : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_arprot : out STD_LOGIC_VECTOR ( 2 downto 0 ); m_axi_arregion : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_arqos : out STD_LOGIC_VECTOR ( 3 downto 0 ); m_axi_arvalid : out STD_LOGIC; m_axi_arready : in STD_LOGIC; m_axi_rid : in STD_LOGIC_VECTOR ( 11 downto 0 ); m_axi_rdata : in STD_LOGIC_VECTOR ( 31 downto 0 ); m_axi_rresp : in STD_LOGIC_VECTOR ( 1 downto 0 ); m_axi_rlast : in STD_LOGIC; m_axi_rvalid : in STD_LOGIC; m_axi_rready : out STD_LOGIC ); end component test_auto_pc_0; signal S_ACLK_1 : STD_LOGIC; signal S_ARESETN_1 : STD_LOGIC_VECTOR ( 0 to 0 ); signal auto_pc_to_s00_couplers_ARADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal auto_pc_to_s00_couplers_ARBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal auto_pc_to_s00_couplers_ARCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal auto_pc_to_s00_couplers_ARID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal auto_pc_to_s00_couplers_ARLEN : STD_LOGIC_VECTOR ( 7 downto 0 ); signal auto_pc_to_s00_couplers_ARLOCK : STD_LOGIC_VECTOR ( 0 to 0 ); signal auto_pc_to_s00_couplers_ARPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal auto_pc_to_s00_couplers_ARREADY : STD_LOGIC; signal auto_pc_to_s00_couplers_ARSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal auto_pc_to_s00_couplers_ARVALID : STD_LOGIC; signal auto_pc_to_s00_couplers_AWADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal auto_pc_to_s00_couplers_AWBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal auto_pc_to_s00_couplers_AWCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal auto_pc_to_s00_couplers_AWID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal auto_pc_to_s00_couplers_AWLEN : STD_LOGIC_VECTOR ( 7 downto 0 ); signal auto_pc_to_s00_couplers_AWLOCK : STD_LOGIC_VECTOR ( 0 to 0 ); signal auto_pc_to_s00_couplers_AWPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal auto_pc_to_s00_couplers_AWREADY : STD_LOGIC; signal auto_pc_to_s00_couplers_AWSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal auto_pc_to_s00_couplers_AWVALID : STD_LOGIC; signal auto_pc_to_s00_couplers_BID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal auto_pc_to_s00_couplers_BREADY : STD_LOGIC; signal auto_pc_to_s00_couplers_BRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal auto_pc_to_s00_couplers_BVALID : STD_LOGIC; signal auto_pc_to_s00_couplers_RDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); 62 signal auto_pc_to_s00_couplers_RID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal auto_pc_to_s00_couplers_RLAST : STD_LOGIC; signal auto_pc_to_s00_couplers_RREADY : STD_LOGIC; signal auto_pc_to_s00_couplers_RRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal auto_pc_to_s00_couplers_RVALID : STD_LOGIC; signal auto_pc_to_s00_couplers_WDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal auto_pc_to_s00_couplers_WLAST : STD_LOGIC; signal auto_pc_to_s00_couplers_WREADY : STD_LOGIC; signal auto_pc_to_s00_couplers_WSTRB : STD_LOGIC_VECTOR ( 3 downto 0 ); signal auto_pc_to_s00_couplers_WVALID : STD_LOGIC; signal s00_couplers_to_auto_pc_ARADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal s00_couplers_to_auto_pc_ARBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_auto_pc_ARCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_ARID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_auto_pc_ARLEN : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_ARLOCK : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_auto_pc_ARPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_auto_pc_ARQOS : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_ARREADY : STD_LOGIC; signal s00_couplers_to_auto_pc_ARSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_auto_pc_ARVALID : STD_LOGIC; signal s00_couplers_to_auto_pc_AWADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal s00_couplers_to_auto_pc_AWBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_auto_pc_AWCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_AWID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_auto_pc_AWLEN : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_AWLOCK : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_auto_pc_AWPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_auto_pc_AWQOS : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_AWREADY : STD_LOGIC; signal s00_couplers_to_auto_pc_AWSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_auto_pc_AWVALID : STD_LOGIC; signal s00_couplers_to_auto_pc_BID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_auto_pc_BREADY : STD_LOGIC; signal s00_couplers_to_auto_pc_BRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_auto_pc_BVALID : STD_LOGIC; signal s00_couplers_to_auto_pc_RDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal s00_couplers_to_auto_pc_RID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_auto_pc_RLAST : STD_LOGIC; signal s00_couplers_to_auto_pc_RREADY : STD_LOGIC; signal s00_couplers_to_auto_pc_RRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_auto_pc_RVALID : STD_LOGIC; signal s00_couplers_to_auto_pc_WDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal s00_couplers_to_auto_pc_WID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_auto_pc_WLAST : STD_LOGIC; signal s00_couplers_to_auto_pc_WREADY : STD_LOGIC; signal s00_couplers_to_auto_pc_WSTRB : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_auto_pc_WVALID : STD_LOGIC; signal NLW_auto_pc_m_axi_arqos_UNCONNECTED : STD_LOGIC_VECTOR ( 3 downto 0 ); signal NLW_auto_pc_m_axi_arregion_UNCONNECTED : STD_LOGIC_VECTOR ( 3 downto 0 ); signal NLW_auto_pc_m_axi_awqos_UNCONNECTED : STD_LOGIC_VECTOR ( 3 downto 0 ); signal NLW_auto_pc_m_axi_awregion_UNCONNECTED : STD_LOGIC_VECTOR ( 3 downto 0 ); begin M_AXI_araddr(12 downto 0) <= auto_pc_to_s00_couplers_ARADDR(12 downto 0); M_AXI_arburst(1 downto 0) <= auto_pc_to_s00_couplers_ARBURST(1 downto 0); M_AXI_arcache(3 downto 0) <= auto_pc_to_s00_couplers_ARCACHE(3 downto 0); 63 M_AXI_arid(11 downto 0) <= auto_pc_to_s00_couplers_ARID(11 downto 0); M_AXI_arlen(7 downto 0) <= auto_pc_to_s00_couplers_ARLEN(7 downto 0); M_AXI_arlock(0) <= auto_pc_to_s00_couplers_ARLOCK(0); M_AXI_arprot(2 downto 0) <= auto_pc_to_s00_couplers_ARPROT(2 downto 0); M_AXI_arsize(2 downto 0) <= auto_pc_to_s00_couplers_ARSIZE(2 downto 0); M_AXI_arvalid <= auto_pc_to_s00_couplers_ARVALID; M_AXI_awaddr(12 downto 0) <= auto_pc_to_s00_couplers_AWADDR(12 downto 0); M_AXI_awburst(1 downto 0) <= auto_pc_to_s00_couplers_AWBURST(1 downto 0); M_AXI_awcache(3 downto 0) <= auto_pc_to_s00_couplers_AWCACHE(3 downto 0); M_AXI_awid(11 downto 0) <= auto_pc_to_s00_couplers_AWID(11 downto 0); M_AXI_awlen(7 downto 0) <= auto_pc_to_s00_couplers_AWLEN(7 downto 0); M_AXI_awlock(0) <= auto_pc_to_s00_couplers_AWLOCK(0); M_AXI_awprot(2 downto 0) <= auto_pc_to_s00_couplers_AWPROT(2 downto 0); M_AXI_awsize(2 downto 0) <= auto_pc_to_s00_couplers_AWSIZE(2 downto 0); M_AXI_awvalid <= auto_pc_to_s00_couplers_AWVALID; M_AXI_bready <= auto_pc_to_s00_couplers_BREADY; M_AXI_rready <= auto_pc_to_s00_couplers_RREADY; M_AXI_wdata(31 downto 0) <= auto_pc_to_s00_couplers_WDATA(31 downto 0); M_AXI_wlast <= auto_pc_to_s00_couplers_WLAST; M_AXI_wstrb(3 downto 0) <= auto_pc_to_s00_couplers_WSTRB(3 downto 0); M_AXI_wvalid <= auto_pc_to_s00_couplers_WVALID; S_ACLK_1 <= S_ACLK; S_ARESETN_1(0) <= S_ARESETN(0); S_AXI_arready <= s00_couplers_to_auto_pc_ARREADY; S_AXI_awready <= s00_couplers_to_auto_pc_AWREADY; S_AXI_bid(11 downto 0) <= s00_couplers_to_auto_pc_BID(11 downto 0); S_AXI_bresp(1 downto 0) <= s00_couplers_to_auto_pc_BRESP(1 downto 0); S_AXI_bvalid <= s00_couplers_to_auto_pc_BVALID; S_AXI_rdata(31 downto 0) <= s00_couplers_to_auto_pc_RDATA(31 downto 0); S_AXI_rid(11 downto 0) <= s00_couplers_to_auto_pc_RID(11 downto 0); S_AXI_rlast <= s00_couplers_to_auto_pc_RLAST; S_AXI_rresp(1 downto 0) <= s00_couplers_to_auto_pc_RRESP(1 downto 0); S_AXI_rvalid <= s00_couplers_to_auto_pc_RVALID; S_AXI_wready <= s00_couplers_to_auto_pc_WREADY; auto_pc_to_s00_couplers_ARREADY <= M_AXI_arready; auto_pc_to_s00_couplers_AWREADY <= M_AXI_awready; auto_pc_to_s00_couplers_BID(11 downto 0) <= M_AXI_bid(11 downto 0); auto_pc_to_s00_couplers_BRESP(1 downto 0) <= M_AXI_bresp(1 downto 0); auto_pc_to_s00_couplers_BVALID <= M_AXI_bvalid; auto_pc_to_s00_couplers_RDATA(31 downto 0) <= M_AXI_rdata(31 downto 0); auto_pc_to_s00_couplers_RID(11 downto 0) <= M_AXI_rid(11 downto 0); auto_pc_to_s00_couplers_RLAST <= M_AXI_rlast; auto_pc_to_s00_couplers_RRESP(1 downto 0) <= M_AXI_rresp(1 downto 0); auto_pc_to_s00_couplers_RVALID <= M_AXI_rvalid; auto_pc_to_s00_couplers_WREADY <= M_AXI_wready; s00_couplers_to_auto_pc_ARADDR(31 downto 0) <= S_AXI_araddr(31 downto 0); s00_couplers_to_auto_pc_ARBURST(1 downto 0) <= S_AXI_arburst(1 downto 0); s00_couplers_to_auto_pc_ARCACHE(3 downto 0) <= S_AXI_arcache(3 downto 0); s00_couplers_to_auto_pc_ARID(11 downto 0) <= S_AXI_arid(11 downto 0); s00_couplers_to_auto_pc_ARLEN(3 downto 0) <= S_AXI_arlen(3 downto 0); s00_couplers_to_auto_pc_ARLOCK(1 downto 0) <= S_AXI_arlock(1 downto 0); s00_couplers_to_auto_pc_ARPROT(2 downto 0) <= S_AXI_arprot(2 downto 0); s00_couplers_to_auto_pc_ARQOS(3 downto 0) <= S_AXI_arqos(3 downto 0); s00_couplers_to_auto_pc_ARSIZE(2 downto 0) <= S_AXI_arsize(2 downto 0); s00_couplers_to_auto_pc_ARVALID <= S_AXI_arvalid; s00_couplers_to_auto_pc_AWADDR(31 downto 0) <= S_AXI_awaddr(31 downto 0); 64 s00_couplers_to_auto_pc_AWBURST(1 downto 0) <= S_AXI_awburst(1 downto 0); s00_couplers_to_auto_pc_AWCACHE(3 downto 0) <= S_AXI_awcache(3 downto 0); s00_couplers_to_auto_pc_AWID(11 downto 0) <= S_AXI_awid(11 downto 0); s00_couplers_to_auto_pc_AWLEN(3 downto 0) <= S_AXI_awlen(3 downto 0); s00_couplers_to_auto_pc_AWLOCK(1 downto 0) <= S_AXI_awlock(1 downto 0); s00_couplers_to_auto_pc_AWPROT(2 downto 0) <= S_AXI_awprot(2 downto 0); s00_couplers_to_auto_pc_AWQOS(3 downto 0) <= S_AXI_awqos(3 downto 0); s00_couplers_to_auto_pc_AWSIZE(2 downto 0) <= S_AXI_awsize(2 downto 0); s00_couplers_to_auto_pc_AWVALID <= S_AXI_awvalid; s00_couplers_to_auto_pc_BREADY <= S_AXI_bready; s00_couplers_to_auto_pc_RREADY <= S_AXI_rready; s00_couplers_to_auto_pc_WDATA(31 downto 0) <= S_AXI_wdata(31 downto 0); s00_couplers_to_auto_pc_WID(11 downto 0) <= S_AXI_wid(11 downto 0); s00_couplers_to_auto_pc_WLAST <= S_AXI_wlast; s00_couplers_to_auto_pc_WSTRB(3 downto 0) <= S_AXI_wstrb(3 downto 0); s00_couplers_to_auto_pc_WVALID <= S_AXI_wvalid; auto_pc: component test_auto_pc_0 port map ( aclk => S_ACLK_1, aresetn => S_ARESETN_1(0), m_axi_araddr(31 downto 0) => auto_pc_to_s00_couplers_ARADDR(31 downto 0), m_axi_arburst(1 downto 0) => auto_pc_to_s00_couplers_ARBURST(1 downto 0), m_axi_arcache(3 downto 0) => auto_pc_to_s00_couplers_ARCACHE(3 downto 0), m_axi_arid(11 downto 0) => auto_pc_to_s00_couplers_ARID(11 downto 0), m_axi_arlen(7 downto 0) => auto_pc_to_s00_couplers_ARLEN(7 downto 0), m_axi_arlock(0) => auto_pc_to_s00_couplers_ARLOCK(0), m_axi_arprot(2 downto 0) => auto_pc_to_s00_couplers_ARPROT(2 downto 0), m_axi_arqos(3 downto 0) => NLW_auto_pc_m_axi_arqos_UNCONNECTED(3 downto 0), m_axi_arready => auto_pc_to_s00_couplers_ARREADY, m_axi_arregion(3 downto 0) => NLW_auto_pc_m_axi_arregion_UNCONNECTED(3 downto 0), m_axi_arsize(2 downto 0) => auto_pc_to_s00_couplers_ARSIZE(2 downto 0), m_axi_arvalid => auto_pc_to_s00_couplers_ARVALID, m_axi_awaddr(31 downto 0) => auto_pc_to_s00_couplers_AWADDR(31 downto 0), m_axi_awburst(1 downto 0) => auto_pc_to_s00_couplers_AWBURST(1 downto 0), m_axi_awcache(3 downto 0) => auto_pc_to_s00_couplers_AWCACHE(3 downto 0), m_axi_awid(11 downto 0) => auto_pc_to_s00_couplers_AWID(11 downto 0), m_axi_awlen(7 downto 0) => auto_pc_to_s00_couplers_AWLEN(7 downto 0), m_axi_awlock(0) => auto_pc_to_s00_couplers_AWLOCK(0), m_axi_awprot(2 downto 0) => auto_pc_to_s00_couplers_AWPROT(2 downto 0), m_axi_awqos(3 downto 0) => NLW_auto_pc_m_axi_awqos_UNCONNECTED(3 downto 0), m_axi_awready => auto_pc_to_s00_couplers_AWREADY, m_axi_awregion(3 downto 0) => NLW_auto_pc_m_axi_awregion_UNCONNECTED(3 downto 0), m_axi_awsize(2 downto 0) => auto_pc_to_s00_couplers_AWSIZE(2 downto 0), m_axi_awvalid => auto_pc_to_s00_couplers_AWVALID, m_axi_bid(11 downto 0) => auto_pc_to_s00_couplers_BID(11 downto 0), m_axi_bready => auto_pc_to_s00_couplers_BREADY, m_axi_bresp(1 downto 0) => auto_pc_to_s00_couplers_BRESP(1 downto 0), m_axi_bvalid => auto_pc_to_s00_couplers_BVALID, m_axi_rdata(31 downto 0) => auto_pc_to_s00_couplers_RDATA(31 downto 0), m_axi_rid(11 downto 0) => auto_pc_to_s00_couplers_RID(11 downto 0), m_axi_rlast => auto_pc_to_s00_couplers_RLAST, m_axi_rready => auto_pc_to_s00_couplers_RREADY, m_axi_rresp(1 downto 0) => auto_pc_to_s00_couplers_RRESP(1 downto 0), m_axi_rvalid => auto_pc_to_s00_couplers_RVALID, m_axi_wdata(31 downto 0) => auto_pc_to_s00_couplers_WDATA(31 downto 0), m_axi_wlast => auto_pc_to_s00_couplers_WLAST, 65 m_axi_wready => auto_pc_to_s00_couplers_WREADY, m_axi_wstrb(3 downto 0) => auto_pc_to_s00_couplers_WSTRB(3 downto 0), m_axi_wvalid => auto_pc_to_s00_couplers_WVALID, s_axi_araddr(31 downto 0) => s00_couplers_to_auto_pc_ARADDR(31 downto 0), s_axi_arburst(1 downto 0) => s00_couplers_to_auto_pc_ARBURST(1 downto 0), s_axi_arcache(3 downto 0) => s00_couplers_to_auto_pc_ARCACHE(3 downto 0), s_axi_arid(11 downto 0) => s00_couplers_to_auto_pc_ARID(11 downto 0), s_axi_arlen(3 downto 0) => s00_couplers_to_auto_pc_ARLEN(3 downto 0), s_axi_arlock(1 downto 0) => s00_couplers_to_auto_pc_ARLOCK(1 downto 0), s_axi_arprot(2 downto 0) => s00_couplers_to_auto_pc_ARPROT(2 downto 0), s_axi_arqos(3 downto 0) => s00_couplers_to_auto_pc_ARQOS(3 downto 0), s_axi_arready => s00_couplers_to_auto_pc_ARREADY, s_axi_arsize(2 downto 0) => s00_couplers_to_auto_pc_ARSIZE(2 downto 0), s_axi_arvalid => s00_couplers_to_auto_pc_ARVALID, s_axi_awaddr(31 downto 0) => s00_couplers_to_auto_pc_AWADDR(31 downto 0), s_axi_awburst(1 downto 0) => s00_couplers_to_auto_pc_AWBURST(1 downto 0), s_axi_awcache(3 downto 0) => s00_couplers_to_auto_pc_AWCACHE(3 downto 0), s_axi_awid(11 downto 0) => s00_couplers_to_auto_pc_AWID(11 downto 0), s_axi_awlen(3 downto 0) => s00_couplers_to_auto_pc_AWLEN(3 downto 0), s_axi_awlock(1 downto 0) => s00_couplers_to_auto_pc_AWLOCK(1 downto 0), s_axi_awprot(2 downto 0) => s00_couplers_to_auto_pc_AWPROT(2 downto 0), s_axi_awqos(3 downto 0) => s00_couplers_to_auto_pc_AWQOS(3 downto 0), s_axi_awready => s00_couplers_to_auto_pc_AWREADY, s_axi_awsize(2 downto 0) => s00_couplers_to_auto_pc_AWSIZE(2 downto 0), s_axi_awvalid => s00_couplers_to_auto_pc_AWVALID, s_axi_bid(11 downto 0) => s00_couplers_to_auto_pc_BID(11 downto 0), s_axi_bready => s00_couplers_to_auto_pc_BREADY, s_axi_bresp(1 downto 0) => s00_couplers_to_auto_pc_BRESP(1 downto 0), s_axi_bvalid => s00_couplers_to_auto_pc_BVALID, s_axi_rdata(31 downto 0) => s00_couplers_to_auto_pc_RDATA(31 downto 0), s_axi_rid(11 downto 0) => s00_couplers_to_auto_pc_RID(11 downto 0), s_axi_rlast => s00_couplers_to_auto_pc_RLAST, s_axi_rready => s00_couplers_to_auto_pc_RREADY, s_axi_rresp(1 downto 0) => s00_couplers_to_auto_pc_RRESP(1 downto 0), s_axi_rvalid => s00_couplers_to_auto_pc_RVALID, s_axi_wdata(31 downto 0) => s00_couplers_to_auto_pc_WDATA(31 downto 0), s_axi_wid(11 downto 0) => s00_couplers_to_auto_pc_WID(11 downto 0), s_axi_wlast => s00_couplers_to_auto_pc_WLAST, s_axi_wready => s00_couplers_to_auto_pc_WREADY, s_axi_wstrb(3 downto 0) => s00_couplers_to_auto_pc_WSTRB(3 downto 0), s_axi_wvalid => s00_couplers_to_auto_pc_WVALID ); end STRUCTURE; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VCOMPONENTS.ALL; entity test_axi_mem_intercon_0 is port ( ACLK : in STD_LOGIC; ARESETN : in STD_LOGIC_VECTOR ( 0 to 0 ); M00_ACLK : in STD_LOGIC; M00_ARESETN : in STD_LOGIC_VECTOR ( 0 to 0 ); M00_AXI_araddr : out STD_LOGIC_VECTOR ( 12 downto 0 ); M00_AXI_arburst : out STD_LOGIC_VECTOR ( 1 downto 0 ); M00_AXI_arcache : out STD_LOGIC_VECTOR ( 3 downto 0 ); 66 M00_AXI_arid : out STD_LOGIC_VECTOR ( 11 downto 0 ); M00_AXI_arlen : out STD_LOGIC_VECTOR ( 7 downto 0 ); M00_AXI_arlock : out STD_LOGIC_VECTOR ( 0 to 0 ); M00_AXI_arprot : out STD_LOGIC_VECTOR ( 2 downto 0 ); M00_AXI_arready : in STD_LOGIC; M00_AXI_arsize : out STD_LOGIC_VECTOR ( 2 downto 0 ); M00_AXI_arvalid : out STD_LOGIC; M00_AXI_awaddr : out STD_LOGIC_VECTOR ( 12 downto 0 ); M00_AXI_awburst : out STD_LOGIC_VECTOR ( 1 downto 0 ); M00_AXI_awcache : out STD_LOGIC_VECTOR ( 3 downto 0 ); M00_AXI_awid : out STD_LOGIC_VECTOR ( 11 downto 0 ); M00_AXI_awlen : out STD_LOGIC_VECTOR ( 7 downto 0 ); M00_AXI_awlock : out STD_LOGIC_VECTOR ( 0 to 0 ); M00_AXI_awprot : out STD_LOGIC_VECTOR ( 2 downto 0 ); M00_AXI_awready : in STD_LOGIC; M00_AXI_awsize : out STD_LOGIC_VECTOR ( 2 downto 0 ); M00_AXI_awvalid : out STD_LOGIC; M00_AXI_bid : in STD_LOGIC_VECTOR ( 11 downto 0 ); M00_AXI_bready : out STD_LOGIC; M00_AXI_bresp : in STD_LOGIC_VECTOR ( 1 downto 0 ); M00_AXI_bvalid : in STD_LOGIC; M00_AXI_rdata : in STD_LOGIC_VECTOR ( 31 downto 0 ); M00_AXI_rid : in STD_LOGIC_VECTOR ( 11 downto 0 ); M00_AXI_rlast : in STD_LOGIC; M00_AXI_rready : out STD_LOGIC; M00_AXI_rresp : in STD_LOGIC_VECTOR ( 1 downto 0 ); M00_AXI_rvalid : in STD_LOGIC; M00_AXI_wdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); M00_AXI_wlast : out STD_LOGIC; M00_AXI_wready : in STD_LOGIC; M00_AXI_wstrb : out STD_LOGIC_VECTOR ( 3 downto 0 ); M00_AXI_wvalid : out STD_LOGIC; S00_ACLK : in STD_LOGIC; S00_ARESETN : in STD_LOGIC_VECTOR ( 0 to 0 ); S00_AXI_araddr : in STD_LOGIC_VECTOR ( 31 downto 0 ); S00_AXI_arburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); S00_AXI_arcache : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_arid : in STD_LOGIC_VECTOR ( 11 downto 0 ); S00_AXI_arlen : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_arlock : in STD_LOGIC_VECTOR ( 1 downto 0 ); S00_AXI_arprot : in STD_LOGIC_VECTOR ( 2 downto 0 ); S00_AXI_arqos : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_arready : out STD_LOGIC; S00_AXI_arsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); S00_AXI_arvalid : in STD_LOGIC; S00_AXI_awaddr : in STD_LOGIC_VECTOR ( 31 downto 0 ); S00_AXI_awburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); S00_AXI_awcache : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_awid : in STD_LOGIC_VECTOR ( 11 downto 0 ); S00_AXI_awlen : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_awlock : in STD_LOGIC_VECTOR ( 1 downto 0 ); S00_AXI_awprot : in STD_LOGIC_VECTOR ( 2 downto 0 ); S00_AXI_awqos : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_awready : out STD_LOGIC; S00_AXI_awsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); S00_AXI_awvalid : in STD_LOGIC; 67 S00_AXI_bid : out STD_LOGIC_VECTOR ( 11 downto 0 ); S00_AXI_bready : in STD_LOGIC; S00_AXI_bresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); S00_AXI_bvalid : out STD_LOGIC; S00_AXI_rdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); S00_AXI_rid : out STD_LOGIC_VECTOR ( 11 downto 0 ); S00_AXI_rlast : out STD_LOGIC; S00_AXI_rready : in STD_LOGIC; S00_AXI_rresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); S00_AXI_rvalid : out STD_LOGIC; S00_AXI_wdata : in STD_LOGIC_VECTOR ( 31 downto 0 ); S00_AXI_wid : in STD_LOGIC_VECTOR ( 11 downto 0 ); S00_AXI_wlast : in STD_LOGIC; S00_AXI_wready : out STD_LOGIC; S00_AXI_wstrb : in STD_LOGIC_VECTOR ( 3 downto 0 ); S00_AXI_wvalid : in STD_LOGIC ); end test_axi_mem_intercon_0; architecture STRUCTURE of test_axi_mem_intercon_0 is signal S00_ACLK_1 : STD_LOGIC; signal S00_ARESETN_1 : STD_LOGIC_VECTOR ( 0 to 0 ); signal axi_mem_intercon_ACLK_net : STD_LOGIC; signal axi_mem_intercon_ARESETN_net : STD_LOGIC_VECTOR ( 0 to 0 ); signal axi_mem_intercon_to_s00_couplers_ARADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARLEN : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARLOCK : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARQOS : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARREADY : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_ARSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_to_s00_couplers_ARVALID : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_AWADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWLEN : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWLOCK : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWQOS : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWREADY : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_AWSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_to_s00_couplers_AWVALID : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_BID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_to_s00_couplers_BREADY : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_BRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_to_s00_couplers_BVALID : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_RDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_to_s00_couplers_RID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_to_s00_couplers_RLAST : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_RREADY : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_RRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_to_s00_couplers_RVALID : STD_LOGIC; 68 signal axi_mem_intercon_to_s00_couplers_WDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_to_s00_couplers_WID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_to_s00_couplers_WLAST : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_WREADY : STD_LOGIC; signal axi_mem_intercon_to_s00_couplers_WSTRB : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_to_s00_couplers_WVALID : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_ARADDR : STD_LOGIC_VECTOR ( 12 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARLEN : STD_LOGIC_VECTOR ( 7 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARLOCK : STD_LOGIC_VECTOR ( 0 to 0 ); signal s00_couplers_to_axi_mem_intercon_ARPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARREADY : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_ARSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_axi_mem_intercon_ARVALID : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_AWADDR : STD_LOGIC_VECTOR ( 12 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWLEN : STD_LOGIC_VECTOR ( 7 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWLOCK : STD_LOGIC_VECTOR ( 0 to 0 ); signal s00_couplers_to_axi_mem_intercon_AWPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWREADY : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_AWSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal s00_couplers_to_axi_mem_intercon_AWVALID : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_BID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_axi_mem_intercon_BREADY : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_BRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_axi_mem_intercon_BVALID : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_RDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal s00_couplers_to_axi_mem_intercon_RID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal s00_couplers_to_axi_mem_intercon_RLAST : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_RREADY : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_RRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal s00_couplers_to_axi_mem_intercon_RVALID : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_WDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal s00_couplers_to_axi_mem_intercon_WLAST : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_WREADY : STD_LOGIC; signal s00_couplers_to_axi_mem_intercon_WSTRB : STD_LOGIC_VECTOR ( 3 downto 0 ); signal s00_couplers_to_axi_mem_intercon_WVALID : STD_LOGIC; begin M00_AXI_araddr(12 downto 0) <= s00_couplers_to_axi_mem_intercon_ARADDR(12 downto 0); M00_AXI_arburst(1 downto 0) <= s00_couplers_to_axi_mem_intercon_ARBURST(1 downto 0); M00_AXI_arcache(3 downto 0) <= s00_couplers_to_axi_mem_intercon_ARCACHE(3 downto 0); M00_AXI_arid(11 downto 0) <= s00_couplers_to_axi_mem_intercon_ARID(11 downto 0); M00_AXI_arlen(7 downto 0) <= s00_couplers_to_axi_mem_intercon_ARLEN(7 downto 0); M00_AXI_arlock(0) <= s00_couplers_to_axi_mem_intercon_ARLOCK(0); M00_AXI_arprot(2 downto 0) <= s00_couplers_to_axi_mem_intercon_ARPROT(2 downto 0); M00_AXI_arsize(2 downto 0) <= s00_couplers_to_axi_mem_intercon_ARSIZE(2 downto 0); M00_AXI_arvalid <= s00_couplers_to_axi_mem_intercon_ARVALID; M00_AXI_awaddr(12 downto 0) <= s00_couplers_to_axi_mem_intercon_AWADDR(12 downto 0); M00_AXI_awburst(1 downto 0) <= s00_couplers_to_axi_mem_intercon_AWBURST(1 downto 0); M00_AXI_awcache(3 downto 0) <= s00_couplers_to_axi_mem_intercon_AWCACHE(3 downto 0); M00_AXI_awid(11 downto 0) <= s00_couplers_to_axi_mem_intercon_AWID(11 downto 0); M00_AXI_awlen(7 downto 0) <= s00_couplers_to_axi_mem_intercon_AWLEN(7 downto 0); 69 M00_AXI_awlock(0) <= s00_couplers_to_axi_mem_intercon_AWLOCK(0); M00_AXI_awprot(2 downto 0) <= s00_couplers_to_axi_mem_intercon_AWPROT(2 downto 0); M00_AXI_awsize(2 downto 0) <= s00_couplers_to_axi_mem_intercon_AWSIZE(2 downto 0); M00_AXI_awvalid <= s00_couplers_to_axi_mem_intercon_AWVALID; M00_AXI_bready <= s00_couplers_to_axi_mem_intercon_BREADY; M00_AXI_rready <= s00_couplers_to_axi_mem_intercon_RREADY; M00_AXI_wdata(31 downto 0) <= s00_couplers_to_axi_mem_intercon_WDATA(31 downto 0); M00_AXI_wlast <= s00_couplers_to_axi_mem_intercon_WLAST; M00_AXI_wstrb(3 downto 0) <= s00_couplers_to_axi_mem_intercon_WSTRB(3 downto 0); M00_AXI_wvalid <= s00_couplers_to_axi_mem_intercon_WVALID; S00_ACLK_1 <= S00_ACLK; S00_ARESETN_1(0) <= S00_ARESETN(0); S00_AXI_arready <= axi_mem_intercon_to_s00_couplers_ARREADY; S00_AXI_awready <= axi_mem_intercon_to_s00_couplers_AWREADY; S00_AXI_bid(11 downto 0) <= axi_mem_intercon_to_s00_couplers_BID(11 downto 0); S00_AXI_bresp(1 downto 0) <= axi_mem_intercon_to_s00_couplers_BRESP(1 downto 0); S00_AXI_bvalid <= axi_mem_intercon_to_s00_couplers_BVALID; S00_AXI_rdata(31 downto 0) <= axi_mem_intercon_to_s00_couplers_RDATA(31 downto 0); S00_AXI_rid(11 downto 0) <= axi_mem_intercon_to_s00_couplers_RID(11 downto 0); S00_AXI_rlast <= axi_mem_intercon_to_s00_couplers_RLAST; S00_AXI_rresp(1 downto 0) <= axi_mem_intercon_to_s00_couplers_RRESP(1 downto 0); S00_AXI_rvalid <= axi_mem_intercon_to_s00_couplers_RVALID; S00_AXI_wready <= axi_mem_intercon_to_s00_couplers_WREADY; axi_mem_intercon_ACLK_net <= M00_ACLK; axi_mem_intercon_ARESETN_net(0) <= M00_ARESETN(0); axi_mem_intercon_to_s00_couplers_ARADDR(31 downto 0) <= S00_AXI_araddr(31 downto 0); axi_mem_intercon_to_s00_couplers_ARBURST(1 downto 0) <= S00_AXI_arburst(1 downto 0); axi_mem_intercon_to_s00_couplers_ARCACHE(3 downto 0) <= S00_AXI_arcache(3 downto 0); axi_mem_intercon_to_s00_couplers_ARID(11 downto 0) <= S00_AXI_arid(11 downto 0); axi_mem_intercon_to_s00_couplers_ARLEN(3 downto 0) <= S00_AXI_arlen(3 downto 0); axi_mem_intercon_to_s00_couplers_ARLOCK(1 downto 0) <= S00_AXI_arlock(1 downto 0); axi_mem_intercon_to_s00_couplers_ARPROT(2 downto 0) <= S00_AXI_arprot(2 downto 0); axi_mem_intercon_to_s00_couplers_ARQOS(3 downto 0) <= S00_AXI_arqos(3 downto 0); axi_mem_intercon_to_s00_couplers_ARSIZE(2 downto 0) <= S00_AXI_arsize(2 downto 0); axi_mem_intercon_to_s00_couplers_ARVALID <= S00_AXI_arvalid; axi_mem_intercon_to_s00_couplers_AWADDR(31 downto 0) <= S00_AXI_awaddr(31 downto 0); axi_mem_intercon_to_s00_couplers_AWBURST(1 downto 0) <= S00_AXI_awburst(1 downto 0); axi_mem_intercon_to_s00_couplers_AWCACHE(3 downto 0) <= S00_AXI_awcache(3 downto 0); axi_mem_intercon_to_s00_couplers_AWID(11 downto 0) <= S00_AXI_awid(11 downto 0); axi_mem_intercon_to_s00_couplers_AWLEN(3 downto 0) <= S00_AXI_awlen(3 downto 0); axi_mem_intercon_to_s00_couplers_AWLOCK(1 downto 0) <= S00_AXI_awlock(1 downto 0); axi_mem_intercon_to_s00_couplers_AWPROT(2 downto 0) <= S00_AXI_awprot(2 downto 0); axi_mem_intercon_to_s00_couplers_AWQOS(3 downto 0) <= S00_AXI_awqos(3 downto 0); axi_mem_intercon_to_s00_couplers_AWSIZE(2 downto 0) <= S00_AXI_awsize(2 downto 0); axi_mem_intercon_to_s00_couplers_AWVALID <= S00_AXI_awvalid; axi_mem_intercon_to_s00_couplers_BREADY <= S00_AXI_bready; axi_mem_intercon_to_s00_couplers_RREADY <= S00_AXI_rready; axi_mem_intercon_to_s00_couplers_WDATA(31 downto 0) <= S00_AXI_wdata(31 downto 0); axi_mem_intercon_to_s00_couplers_WID(11 downto 0) <= S00_AXI_wid(11 downto 0); axi_mem_intercon_to_s00_couplers_WLAST <= S00_AXI_wlast; axi_mem_intercon_to_s00_couplers_WSTRB(3 downto 0) <= S00_AXI_wstrb(3 downto 0); axi_mem_intercon_to_s00_couplers_WVALID <= S00_AXI_wvalid; s00_couplers_to_axi_mem_intercon_ARREADY <= M00_AXI_arready; s00_couplers_to_axi_mem_intercon_AWREADY <= M00_AXI_awready; s00_couplers_to_axi_mem_intercon_BID(11 downto 0) <= M00_AXI_bid(11 downto 0); s00_couplers_to_axi_mem_intercon_BRESP(1 downto 0) <= M00_AXI_bresp(1 downto 0); 70 s00_couplers_to_axi_mem_intercon_BVALID <= M00_AXI_bvalid; s00_couplers_to_axi_mem_intercon_RDATA(31 downto 0) <= M00_AXI_rdata(31 downto 0); s00_couplers_to_axi_mem_intercon_RID(11 downto 0) <= M00_AXI_rid(11 downto 0); s00_couplers_to_axi_mem_intercon_RLAST <= M00_AXI_rlast; s00_couplers_to_axi_mem_intercon_RRESP(1 downto 0) <= M00_AXI_rresp(1 downto 0); s00_couplers_to_axi_mem_intercon_RVALID <= M00_AXI_rvalid; s00_couplers_to_axi_mem_intercon_WREADY <= M00_AXI_wready; s00_couplers: entity work.s00_couplers_imp_D51E3L port map ( M_ACLK => axi_mem_intercon_ACLK_net, M_ARESETN(0) => axi_mem_intercon_ARESETN_net(0), M_AXI_araddr(12 downto 0) => s00_couplers_to_axi_mem_intercon_ARADDR(12 downto 0), M_AXI_arburst(1 downto 0) => s00_couplers_to_axi_mem_intercon_ARBURST(1 downto 0), M_AXI_arcache(3 downto 0) => s00_couplers_to_axi_mem_intercon_ARCACHE(3 downto 0), M_AXI_arid(11 downto 0) => s00_couplers_to_axi_mem_intercon_ARID(11 downto 0), M_AXI_arlen(7 downto 0) => s00_couplers_to_axi_mem_intercon_ARLEN(7 downto 0), M_AXI_arlock(0) => s00_couplers_to_axi_mem_intercon_ARLOCK(0), M_AXI_arprot(2 downto 0) => s00_couplers_to_axi_mem_intercon_ARPROT(2 downto 0), M_AXI_arready => s00_couplers_to_axi_mem_intercon_ARREADY, M_AXI_arsize(2 downto 0) => s00_couplers_to_axi_mem_intercon_ARSIZE(2 downto 0), M_AXI_arvalid => s00_couplers_to_axi_mem_intercon_ARVALID, M_AXI_awaddr(12 downto 0) => s00_couplers_to_axi_mem_intercon_AWADDR(12 downto 0), M_AXI_awburst(1 downto 0) => s00_couplers_to_axi_mem_intercon_AWBURST(1 downto 0), M_AXI_awcache(3 downto 0) => s00_couplers_to_axi_mem_intercon_AWCACHE(3 downto 0), M_AXI_awid(11 downto 0) => s00_couplers_to_axi_mem_intercon_AWID(11 downto 0), M_AXI_awlen(7 downto 0) => s00_couplers_to_axi_mem_intercon_AWLEN(7 downto 0), M_AXI_awlock(0) => s00_couplers_to_axi_mem_intercon_AWLOCK(0), M_AXI_awprot(2 downto 0) => s00_couplers_to_axi_mem_intercon_AWPROT(2 downto 0), M_AXI_awready => s00_couplers_to_axi_mem_intercon_AWREADY, M_AXI_awsize(2 downto 0) => s00_couplers_to_axi_mem_intercon_AWSIZE(2 downto 0), M_AXI_awvalid => s00_couplers_to_axi_mem_intercon_AWVALID, M_AXI_bid(11 downto 0) => s00_couplers_to_axi_mem_intercon_BID(11 downto 0), M_AXI_bready => s00_couplers_to_axi_mem_intercon_BREADY, M_AXI_bresp(1 downto 0) => s00_couplers_to_axi_mem_intercon_BRESP(1 downto 0), M_AXI_bvalid => s00_couplers_to_axi_mem_intercon_BVALID, M_AXI_rdata(31 downto 0) => s00_couplers_to_axi_mem_intercon_RDATA(31 downto 0), M_AXI_rid(11 downto 0) => s00_couplers_to_axi_mem_intercon_RID(11 downto 0), M_AXI_rlast => s00_couplers_to_axi_mem_intercon_RLAST, M_AXI_rready => s00_couplers_to_axi_mem_intercon_RREADY, M_AXI_rresp(1 downto 0) => s00_couplers_to_axi_mem_intercon_RRESP(1 downto 0), M_AXI_rvalid => s00_couplers_to_axi_mem_intercon_RVALID, M_AXI_wdata(31 downto 0) => s00_couplers_to_axi_mem_intercon_WDATA(31 downto 0), M_AXI_wlast => s00_couplers_to_axi_mem_intercon_WLAST, M_AXI_wready => s00_couplers_to_axi_mem_intercon_WREADY, M_AXI_wstrb(3 downto 0) => s00_couplers_to_axi_mem_intercon_WSTRB(3 downto 0), M_AXI_wvalid => s00_couplers_to_axi_mem_intercon_WVALID, S_ACLK => S00_ACLK_1, S_ARESETN(0) => S00_ARESETN_1(0), S_AXI_araddr(31 downto 0) => axi_mem_intercon_to_s00_couplers_ARADDR(31 downto 0), S_AXI_arburst(1 downto 0) => axi_mem_intercon_to_s00_couplers_ARBURST(1 downto 0), S_AXI_arcache(3 downto 0) => axi_mem_intercon_to_s00_couplers_ARCACHE(3 downto 0), S_AXI_arid(11 downto 0) => axi_mem_intercon_to_s00_couplers_ARID(11 downto 0), S_AXI_arlen(3 downto 0) => axi_mem_intercon_to_s00_couplers_ARLEN(3 downto 0), S_AXI_arlock(1 downto 0) => axi_mem_intercon_to_s00_couplers_ARLOCK(1 downto 0), S_AXI_arprot(2 downto 0) => axi_mem_intercon_to_s00_couplers_ARPROT(2 downto 0), S_AXI_arqos(3 downto 0) => axi_mem_intercon_to_s00_couplers_ARQOS(3 downto 0), 71 S_AXI_arready => axi_mem_intercon_to_s00_couplers_ARREADY, S_AXI_arsize(2 downto 0) => axi_mem_intercon_to_s00_couplers_ARSIZE(2 downto 0), S_AXI_arvalid => axi_mem_intercon_to_s00_couplers_ARVALID, S_AXI_awaddr(31 downto 0) => axi_mem_intercon_to_s00_couplers_AWADDR(31 downto 0), S_AXI_awburst(1 downto 0) => axi_mem_intercon_to_s00_couplers_AWBURST(1 downto 0), S_AXI_awcache(3 downto 0) => axi_mem_intercon_to_s00_couplers_AWCACHE(3 downto 0), S_AXI_awid(11 downto 0) => axi_mem_intercon_to_s00_couplers_AWID(11 downto 0), S_AXI_awlen(3 downto 0) => axi_mem_intercon_to_s00_couplers_AWLEN(3 downto 0), S_AXI_awlock(1 downto 0) => axi_mem_intercon_to_s00_couplers_AWLOCK(1 downto 0), S_AXI_awprot(2 downto 0) => axi_mem_intercon_to_s00_couplers_AWPROT(2 downto 0), S_AXI_awqos(3 downto 0) => axi_mem_intercon_to_s00_couplers_AWQOS(3 downto 0), S_AXI_awready => axi_mem_intercon_to_s00_couplers_AWREADY, S_AXI_awsize(2 downto 0) => axi_mem_intercon_to_s00_couplers_AWSIZE(2 downto 0), S_AXI_awvalid => axi_mem_intercon_to_s00_couplers_AWVALID, S_AXI_bid(11 downto 0) => axi_mem_intercon_to_s00_couplers_BID(11 downto 0), S_AXI_bready => axi_mem_intercon_to_s00_couplers_BREADY, S_AXI_bresp(1 downto 0) => axi_mem_intercon_to_s00_couplers_BRESP(1 downto 0), S_AXI_bvalid => axi_mem_intercon_to_s00_couplers_BVALID, S_AXI_rdata(31 downto 0) => axi_mem_intercon_to_s00_couplers_RDATA(31 downto 0), S_AXI_rid(11 downto 0) => axi_mem_intercon_to_s00_couplers_RID(11 downto 0), S_AXI_rlast => axi_mem_intercon_to_s00_couplers_RLAST, S_AXI_rready => axi_mem_intercon_to_s00_couplers_RREADY, S_AXI_rresp(1 downto 0) => axi_mem_intercon_to_s00_couplers_RRESP(1 downto 0), S_AXI_rvalid => axi_mem_intercon_to_s00_couplers_RVALID, S_AXI_wdata(31 downto 0) => axi_mem_intercon_to_s00_couplers_WDATA(31 downto 0), S_AXI_wid(11 downto 0) => axi_mem_intercon_to_s00_couplers_WID(11 downto 0), S_AXI_wlast => axi_mem_intercon_to_s00_couplers_WLAST, S_AXI_wready => axi_mem_intercon_to_s00_couplers_WREADY, S_AXI_wstrb(3 downto 0) => axi_mem_intercon_to_s00_couplers_WSTRB(3 downto 0), S_AXI_wvalid => axi_mem_intercon_to_s00_couplers_WVALID ); end STRUCTURE; library IEEE; use IEEE.STD_LOGIC_1164.ALL; library UNISIM; use UNISIM.VCOMPONENTS.ALL; entity test is port ( DDR_addr : inout STD_LOGIC_VECTOR ( 14 downto 0 ); DDR_ba : inout STD_LOGIC_VECTOR ( 2 downto 0 ); DDR_cas_n : inout STD_LOGIC; DDR_ck_n : inout STD_LOGIC; DDR_ck_p : inout STD_LOGIC; DDR_cke : inout STD_LOGIC; DDR_cs_n : inout STD_LOGIC; DDR_dm : inout STD_LOGIC_VECTOR ( 3 downto 0 ); DDR_dq : inout STD_LOGIC_VECTOR ( 31 downto 0 ); DDR_dqs_n : inout STD_LOGIC_VECTOR ( 3 downto 0 ); DDR_dqs_p : inout STD_LOGIC_VECTOR ( 3 downto 0 ); DDR_odt : inout STD_LOGIC; DDR_ras_n : inout STD_LOGIC; DDR_reset_n : inout STD_LOGIC; DDR_we_n : inout STD_LOGIC; FIXED_IO_ddr_vrn : inout STD_LOGIC; FIXED_IO_ddr_vrp : inout STD_LOGIC; FIXED_IO_mio : inout STD_LOGIC_VECTOR ( 53 downto 0 ); 72 FIXED_IO_ps_clk : inout STD_LOGIC; FIXED_IO_ps_porb : inout STD_LOGIC; FIXED_IO_ps_srstb : inout STD_LOGIC ); attribute CORE_GENERATION_INFO : string; attribute CORE_GENERATION_INFO of test : entity is "test,IP_Integrator,{x_ipProduct=Vivado 2015.2,x_ipVendor=xilinx.com,x_ipLibrary=BlockDiagram,x_ipName=test,x_ipVersion=1.00.a,x_ipLanguage=VH DL,numBlks=8,numReposBlks=6,numNonXlnxBlks=0,numHierBlks=2,maxHierDepth=0,da_axi4_cnt=1,da_bram_ cntlr_cnt=1,da_ps7_cnt=1,synth_mode=Global}"; attribute HW_HANDOFF : string; attribute HW_HANDOFF of test : entity is "test.hwdef"; end test; architecture STRUCTURE of test is component test_processing_system7_0_0 is port ( TTC0_WAVE0_OUT : out STD_LOGIC; TTC0_WAVE1_OUT : out STD_LOGIC; TTC0_WAVE2_OUT : out STD_LOGIC; M_AXI_GP0_ARVALID : out STD_LOGIC; M_AXI_GP0_AWVALID : out STD_LOGIC; M_AXI_GP0_BREADY : out STD_LOGIC; M_AXI_GP0_RREADY : out STD_LOGIC; M_AXI_GP0_WLAST : out STD_LOGIC; M_AXI_GP0_WVALID : out STD_LOGIC; M_AXI_GP0_ARID : out STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_GP0_AWID : out STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_GP0_WID : out STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_GP0_ARBURST : out STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_GP0_ARLOCK : out STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_GP0_ARSIZE : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_GP0_AWBURST : out STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_GP0_AWLOCK : out STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_GP0_AWSIZE : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_GP0_ARPROT : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_GP0_AWPROT : out STD_LOGIC_VECTOR ( 2 downto 0 ); M_AXI_GP0_ARADDR : out STD_LOGIC_VECTOR ( 31 downto 0 ); M_AXI_GP0_AWADDR : out STD_LOGIC_VECTOR ( 31 downto 0 ); M_AXI_GP0_WDATA : out STD_LOGIC_VECTOR ( 31 downto 0 ); M_AXI_GP0_ARCACHE : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_ARLEN : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_ARQOS : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_AWCACHE : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_AWLEN : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_AWQOS : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_WSTRB : out STD_LOGIC_VECTOR ( 3 downto 0 ); M_AXI_GP0_ACLK : in STD_LOGIC; M_AXI_GP0_ARREADY : in STD_LOGIC; M_AXI_GP0_AWREADY : in STD_LOGIC; M_AXI_GP0_BVALID : in STD_LOGIC; M_AXI_GP0_RLAST : in STD_LOGIC; M_AXI_GP0_RVALID : in STD_LOGIC; M_AXI_GP0_WREADY : in STD_LOGIC; M_AXI_GP0_BID : in STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_GP0_RID : in STD_LOGIC_VECTOR ( 11 downto 0 ); M_AXI_GP0_BRESP : in STD_LOGIC_VECTOR ( 1 downto 0 ); 73 M_AXI_GP0_RRESP : in STD_LOGIC_VECTOR ( 1 downto 0 ); M_AXI_GP0_RDATA : in STD_LOGIC_VECTOR ( 31 downto 0 ); FCLK_CLK0 : out STD_LOGIC; FCLK_RESET0_N : out STD_LOGIC; MIO : inout STD_LOGIC_VECTOR ( 53 downto 0 ); DDR_CAS_n : inout STD_LOGIC; DDR_CKE : inout STD_LOGIC; DDR_Clk_n : inout STD_LOGIC; DDR_Clk : inout STD_LOGIC; DDR_CS_n : inout STD_LOGIC; DDR_DRSTB : inout STD_LOGIC; DDR_ODT : inout STD_LOGIC; DDR_RAS_n : inout STD_LOGIC; DDR_WEB : inout STD_LOGIC; DDR_BankAddr : inout STD_LOGIC_VECTOR ( 2 downto 0 ); DDR_Addr : inout STD_LOGIC_VECTOR ( 14 downto 0 ); DDR_VRN : inout STD_LOGIC; DDR_VRP : inout STD_LOGIC; DDR_DM : inout STD_LOGIC_VECTOR ( 3 downto 0 ); DDR_DQ : inout STD_LOGIC_VECTOR ( 31 downto 0 ); DDR_DQS_n : inout STD_LOGIC_VECTOR ( 3 downto 0 ); DDR_DQS : inout STD_LOGIC_VECTOR ( 3 downto 0 ); PS_SRSTB : inout STD_LOGIC; PS_CLK : inout STD_LOGIC; PS_PORB : inout STD_LOGIC ); end component test_processing_system7_0_0; component test_axi_bram_ctrl_0_0 is port ( s_axi_aclk : in STD_LOGIC; s_axi_aresetn : in STD_LOGIC; s_axi_awid : in STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_awaddr : in STD_LOGIC_VECTOR ( 12 downto 0 ); s_axi_awlen : in STD_LOGIC_VECTOR ( 7 downto 0 ); s_axi_awsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); s_axi_awburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_awlock : in STD_LOGIC; s_axi_awcache : in STD_LOGIC_VECTOR ( 3 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 ( 31 downto 0 ); s_axi_wstrb : in STD_LOGIC_VECTOR ( 3 downto 0 ); s_axi_wlast : in STD_LOGIC; s_axi_wvalid : in STD_LOGIC; s_axi_wready : out STD_LOGIC; s_axi_bid : out STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_bresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_bvalid : out STD_LOGIC; s_axi_bready : in STD_LOGIC; s_axi_arid : in STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_araddr : in STD_LOGIC_VECTOR ( 12 downto 0 ); s_axi_arlen : in STD_LOGIC_VECTOR ( 7 downto 0 ); s_axi_arsize : in STD_LOGIC_VECTOR ( 2 downto 0 ); s_axi_arburst : in STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_arlock : in STD_LOGIC; 74 s_axi_arcache : in STD_LOGIC_VECTOR ( 3 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_rid : out STD_LOGIC_VECTOR ( 11 downto 0 ); s_axi_rdata : out STD_LOGIC_VECTOR ( 31 downto 0 ); s_axi_rresp : out STD_LOGIC_VECTOR ( 1 downto 0 ); s_axi_rlast : out STD_LOGIC; s_axi_rvalid : out STD_LOGIC; s_axi_rready : in STD_LOGIC; bram_rst_a : out STD_LOGIC; bram_clk_a : out STD_LOGIC; bram_en_a : out STD_LOGIC; bram_we_a : out STD_LOGIC_VECTOR ( 3 downto 0 ); bram_addr_a : out STD_LOGIC_VECTOR ( 12 downto 0 ); bram_wrdata_a : out STD_LOGIC_VECTOR ( 31 downto 0 ); bram_rddata_a : in STD_LOGIC_VECTOR ( 31 downto 0 ) ); end component test_axi_bram_ctrl_0_0; component test_rst_processing_system7_0_100M_0 is port ( slowest_sync_clk : in STD_LOGIC; ext_reset_in : in STD_LOGIC; aux_reset_in : in STD_LOGIC; mb_debug_sys_rst : in STD_LOGIC; dcm_locked : in STD_LOGIC; mb_reset : out STD_LOGIC; bus_struct_reset : out STD_LOGIC_VECTOR ( 0 to 0 ); peripheral_reset : out STD_LOGIC_VECTOR ( 0 to 0 ); interconnect_aresetn : out STD_LOGIC_VECTOR ( 0 to 0 ); peripheral_aresetn : out STD_LOGIC_VECTOR ( 0 to 0 ) ); end component test_rst_processing_system7_0_100M_0; component test_axi_bram_ctrl_0_bram_0 is port ( clka : in STD_LOGIC; rsta : in STD_LOGIC; ena : in STD_LOGIC; wea : in STD_LOGIC_VECTOR ( 3 downto 0 ); addra : in STD_LOGIC_VECTOR ( 31 downto 0 ); dina : in STD_LOGIC_VECTOR ( 31 downto 0 ); douta : out STD_LOGIC_VECTOR ( 31 downto 0 ); clkb : in STD_LOGIC; rstb : in STD_LOGIC; enb : in STD_LOGIC; web : in STD_LOGIC_VECTOR ( 3 downto 0 ); addrb : in STD_LOGIC_VECTOR ( 31 downto 0 ); dinb : in STD_LOGIC_VECTOR ( 31 downto 0 ); doutb : out STD_LOGIC_VECTOR ( 31 downto 0 ) ); end component test_axi_bram_ctrl_0_bram_0; component test_Image_Processor_0_0 is port ( clock : in STD_LOGIC; resetn : in STD_LOGIC; datain : in STD_LOGIC_VECTOR ( 31 downto 0 ); 75 enable : out STD_LOGIC; we : out STD_LOGIC_VECTOR ( 3 downto 0 ); address : out STD_LOGIC_VECTOR ( 16 downto 0 ); dataout : out STD_LOGIC_VECTOR ( 31 downto 0 ) ); end component test_Image_Processor_0_0; signal GND_1 : STD_LOGIC; signal Image_Processor_0_address : STD_LOGIC_VECTOR ( 16 downto 0 ); signal Image_Processor_0_dataout : STD_LOGIC_VECTOR ( 31 downto 0 ); signal Image_Processor_0_enable : STD_LOGIC; signal Image_Processor_0_we : STD_LOGIC_VECTOR ( 3 downto 0 ); signal VCC_1 : STD_LOGIC; signal axi_bram_ctrl_0_BRAM_PORTA_ADDR : STD_LOGIC_VECTOR ( 12 downto 0 ); signal axi_bram_ctrl_0_BRAM_PORTA_CLK : STD_LOGIC; signal axi_bram_ctrl_0_BRAM_PORTA_DIN : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_bram_ctrl_0_BRAM_PORTA_DOUT : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_bram_ctrl_0_BRAM_PORTA_EN : STD_LOGIC; signal axi_bram_ctrl_0_BRAM_PORTA_RST : STD_LOGIC; signal axi_bram_ctrl_0_BRAM_PORTA_WE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_bram_ctrl_0_bram_doutb : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_M00_AXI_ARADDR : STD_LOGIC_VECTOR ( 12 downto 0 ); signal axi_mem_intercon_M00_AXI_ARBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_M00_AXI_ARCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_M00_AXI_ARID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_M00_AXI_ARLEN : STD_LOGIC_VECTOR ( 7 downto 0 ); signal axi_mem_intercon_M00_AXI_ARLOCK : STD_LOGIC_VECTOR ( 0 to 0 ); signal axi_mem_intercon_M00_AXI_ARPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_M00_AXI_ARREADY : STD_LOGIC; signal axi_mem_intercon_M00_AXI_ARSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_M00_AXI_ARVALID : STD_LOGIC; signal axi_mem_intercon_M00_AXI_AWADDR : STD_LOGIC_VECTOR ( 12 downto 0 ); signal axi_mem_intercon_M00_AXI_AWBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_M00_AXI_AWCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_M00_AXI_AWID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_M00_AXI_AWLEN : STD_LOGIC_VECTOR ( 7 downto 0 ); signal axi_mem_intercon_M00_AXI_AWLOCK : STD_LOGIC_VECTOR ( 0 to 0 ); signal axi_mem_intercon_M00_AXI_AWPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_M00_AXI_AWREADY : STD_LOGIC; signal axi_mem_intercon_M00_AXI_AWSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal axi_mem_intercon_M00_AXI_AWVALID : STD_LOGIC; signal axi_mem_intercon_M00_AXI_BID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_M00_AXI_BREADY : STD_LOGIC; signal axi_mem_intercon_M00_AXI_BRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_M00_AXI_BVALID : STD_LOGIC; signal axi_mem_intercon_M00_AXI_RDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_M00_AXI_RID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal axi_mem_intercon_M00_AXI_RLAST : STD_LOGIC; signal axi_mem_intercon_M00_AXI_RREADY : STD_LOGIC; signal axi_mem_intercon_M00_AXI_RRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal axi_mem_intercon_M00_AXI_RVALID : STD_LOGIC; signal axi_mem_intercon_M00_AXI_WDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal axi_mem_intercon_M00_AXI_WLAST : STD_LOGIC; signal axi_mem_intercon_M00_AXI_WREADY : STD_LOGIC; signal axi_mem_intercon_M00_AXI_WSTRB : STD_LOGIC_VECTOR ( 3 downto 0 ); signal axi_mem_intercon_M00_AXI_WVALID : STD_LOGIC; signal processing_system7_0_DDR_ADDR : STD_LOGIC_VECTOR ( 14 downto 0 ); 76 signal processing_system7_0_DDR_BA : STD_LOGIC_VECTOR ( 2 downto 0 ); signal processing_system7_0_DDR_CAS_N : STD_LOGIC; signal processing_system7_0_DDR_CKE : STD_LOGIC; signal processing_system7_0_DDR_CK_N : STD_LOGIC; signal processing_system7_0_DDR_CK_P : STD_LOGIC; signal processing_system7_0_DDR_CS_N : STD_LOGIC; signal processing_system7_0_DDR_DM : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_DDR_DQ : STD_LOGIC_VECTOR ( 31 downto 0 ); signal processing_system7_0_DDR_DQS_N : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_DDR_DQS_P : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_DDR_ODT : STD_LOGIC; signal processing_system7_0_DDR_RAS_N : STD_LOGIC; signal processing_system7_0_DDR_RESET_N : STD_LOGIC; signal processing_system7_0_DDR_WE_N : STD_LOGIC; signal processing_system7_0_FCLK_CLK0 : STD_LOGIC; signal processing_system7_0_FCLK_RESET0_N : STD_LOGIC; signal processing_system7_0_FIXED_IO_DDR_VRN : STD_LOGIC; signal processing_system7_0_FIXED_IO_DDR_VRP : STD_LOGIC; signal processing_system7_0_FIXED_IO_MIO : STD_LOGIC_VECTOR ( 53 downto 0 ); signal processing_system7_0_FIXED_IO_PS_CLK : STD_LOGIC; signal processing_system7_0_FIXED_IO_PS_PORB : STD_LOGIC; signal processing_system7_0_FIXED_IO_PS_SRSTB : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_ARADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARLEN : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARLOCK : STD_LOGIC_VECTOR ( 1 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARQOS : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARREADY : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_ARSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal processing_system7_0_M_AXI_GP0_ARVALID : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_AWADDR : STD_LOGIC_VECTOR ( 31 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWBURST : STD_LOGIC_VECTOR ( 1 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWCACHE : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWLEN : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWLOCK : STD_LOGIC_VECTOR ( 1 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWPROT : STD_LOGIC_VECTOR ( 2 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWQOS : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWREADY : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_AWSIZE : STD_LOGIC_VECTOR ( 2 downto 0 ); signal processing_system7_0_M_AXI_GP0_AWVALID : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_BID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal processing_system7_0_M_AXI_GP0_BREADY : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_BRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal processing_system7_0_M_AXI_GP0_BVALID : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_RDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal processing_system7_0_M_AXI_GP0_RID : STD_LOGIC_VECTOR ( 11 downto 0 ); signal processing_system7_0_M_AXI_GP0_RLAST : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_RREADY : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_RRESP : STD_LOGIC_VECTOR ( 1 downto 0 ); signal processing_system7_0_M_AXI_GP0_RVALID : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_WDATA : STD_LOGIC_VECTOR ( 31 downto 0 ); signal processing_system7_0_M_AXI_GP0_WID : STD_LOGIC_VECTOR ( 11 downto 0 ); 77 signal processing_system7_0_M_AXI_GP0_WLAST : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_WREADY : STD_LOGIC; signal processing_system7_0_M_AXI_GP0_WSTRB : STD_LOGIC_VECTOR ( 3 downto 0 ); signal processing_system7_0_M_AXI_GP0_WVALID : STD_LOGIC; signal rst_processing_system7_0_100M_interconnect_aresetn : STD_LOGIC_VECTOR ( 0 to 0 ); signal rst_processing_system7_0_100M_peripheral_aresetn : STD_LOGIC_VECTOR ( 0 to 0 ); signal NLW_axi_bram_ctrl_0_bram_addrb_UNCONNECTED : STD_LOGIC_VECTOR ( 31 downto 17 ); signal NLW_processing_system7_0_TTC0_WAVE0_OUT_UNCONNECTED : STD_LOGIC; signal NLW_processing_system7_0_TTC0_WAVE1_OUT_UNCONNECTED : STD_LOGIC; signal NLW_processing_system7_0_TTC0_WAVE2_OUT_UNCONNECTED : STD_LOGIC; signal NLW_rst_processing_system7_0_100M_mb_reset_UNCONNECTED : STD_LOGIC; signal NLW_rst_processing_system7_0_100M_bus_struct_reset_UNCONNECTED : STD_LOGIC_VECTOR ( 0 to 0 ); signal NLW_rst_processing_system7_0_100M_peripheral_reset_UNCONNECTED : STD_LOGIC_VECTOR ( 0 to 0 ); attribute BMM_INFO_ADDRESS_SPACE : string; attribute BMM_INFO_ADDRESS_SPACE of axi_bram_ctrl_0 : label is "byte 0x40000000 32 > test axi_bram_ctrl_0_bram"; attribute KEEP_HIERARCHY : string; attribute KEEP_HIERARCHY of axi_bram_ctrl_0 : label is "yes"; attribute BMM_INFO_PROCESSOR : string; attribute BMM_INFO_PROCESSOR of processing_system7_0 : label is "ARM > test axi_bram_ctrl_0"; attribute KEEP_HIERARCHY of processing_system7_0 : label is "yes"; begin GND: unisim.vcomponents.GND port map ( G => GND_1 ); Image_Processor_0: component test_Image_Processor_0_0 port map ( address(16 downto 0) => Image_Processor_0_address(16 downto 0), clock => processing_system7_0_FCLK_CLK0, datain(31 downto 0) => axi_bram_ctrl_0_bram_doutb(31 downto 0), dataout(31 downto 0) => Image_Processor_0_dataout(31 downto 0), enable => Image_Processor_0_enable, resetn => processing_system7_0_FCLK_RESET0_N, we(3 downto 0) => Image_Processor_0_we(3 downto 0) ); VCC: unisim.vcomponents.VCC port map ( P => VCC_1 ); axi_bram_ctrl_0: component test_axi_bram_ctrl_0_0 port map ( bram_addr_a(12 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_ADDR(12 downto 0), bram_clk_a => axi_bram_ctrl_0_BRAM_PORTA_CLK, bram_en_a => axi_bram_ctrl_0_BRAM_PORTA_EN, bram_rddata_a(31 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_DOUT(31 downto 0), bram_rst_a => axi_bram_ctrl_0_BRAM_PORTA_RST, bram_we_a(3 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_WE(3 downto 0), bram_wrdata_a(31 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_DIN(31 downto 0), s_axi_aclk => processing_system7_0_FCLK_CLK0, s_axi_araddr(12 downto 0) => axi_mem_intercon_M00_AXI_ARADDR(12 downto 0), s_axi_arburst(1 downto 0) => axi_mem_intercon_M00_AXI_ARBURST(1 downto 0), s_axi_arcache(3 downto 0) => axi_mem_intercon_M00_AXI_ARCACHE(3 downto 0), s_axi_aresetn => rst_processing_system7_0_100M_peripheral_aresetn(0), 78 s_axi_arid(11 downto 0) => axi_mem_intercon_M00_AXI_ARID(11 downto 0), s_axi_arlen(7 downto 0) => axi_mem_intercon_M00_AXI_ARLEN(7 downto 0), s_axi_arlock => axi_mem_intercon_M00_AXI_ARLOCK(0), s_axi_arprot(2 downto 0) => axi_mem_intercon_M00_AXI_ARPROT(2 downto 0), s_axi_arready => axi_mem_intercon_M00_AXI_ARREADY, s_axi_arsize(2 downto 0) => axi_mem_intercon_M00_AXI_ARSIZE(2 downto 0), s_axi_arvalid => axi_mem_intercon_M00_AXI_ARVALID, s_axi_awaddr(12 downto 0) => axi_mem_intercon_M00_AXI_AWADDR(12 downto 0), s_axi_awburst(1 downto 0) => axi_mem_intercon_M00_AXI_AWBURST(1 downto 0), s_axi_awcache(3 downto 0) => axi_mem_intercon_M00_AXI_AWCACHE(3 downto 0), s_axi_awid(11 downto 0) => axi_mem_intercon_M00_AXI_AWID(11 downto 0), s_axi_awlen(7 downto 0) => axi_mem_intercon_M00_AXI_AWLEN(7 downto 0), s_axi_awlock => axi_mem_intercon_M00_AXI_AWLOCK(0), s_axi_awprot(2 downto 0) => axi_mem_intercon_M00_AXI_AWPROT(2 downto 0), s_axi_awready => axi_mem_intercon_M00_AXI_AWREADY, s_axi_awsize(2 downto 0) => axi_mem_intercon_M00_AXI_AWSIZE(2 downto 0), s_axi_awvalid => axi_mem_intercon_M00_AXI_AWVALID, s_axi_bid(11 downto 0) => axi_mem_intercon_M00_AXI_BID(11 downto 0), s_axi_bready => axi_mem_intercon_M00_AXI_BREADY, s_axi_bresp(1 downto 0) => axi_mem_intercon_M00_AXI_BRESP(1 downto 0), s_axi_bvalid => axi_mem_intercon_M00_AXI_BVALID, s_axi_rdata(31 downto 0) => axi_mem_intercon_M00_AXI_RDATA(31 downto 0), s_axi_rid(11 downto 0) => axi_mem_intercon_M00_AXI_RID(11 downto 0), s_axi_rlast => axi_mem_intercon_M00_AXI_RLAST, s_axi_rready => axi_mem_intercon_M00_AXI_RREADY, s_axi_rresp(1 downto 0) => axi_mem_intercon_M00_AXI_RRESP(1 downto 0), s_axi_rvalid => axi_mem_intercon_M00_AXI_RVALID, s_axi_wdata(31 downto 0) => axi_mem_intercon_M00_AXI_WDATA(31 downto 0), s_axi_wlast => axi_mem_intercon_M00_AXI_WLAST, s_axi_wready => axi_mem_intercon_M00_AXI_WREADY, s_axi_wstrb(3 downto 0) => axi_mem_intercon_M00_AXI_WSTRB(3 downto 0), s_axi_wvalid => axi_mem_intercon_M00_AXI_WVALID ); axi_bram_ctrl_0_bram: component test_axi_bram_ctrl_0_bram_0 port map ( addra(31) => GND_1, addra(30) => GND_1, addra(29) => GND_1, addra(28) => GND_1, addra(27) => GND_1, addra(26) => GND_1, addra(25) => VCC_1, addra(24) => GND_1, addra(23) => GND_1, addra(22) => GND_1, addra(21) => GND_1, addra(20) => GND_1, addra(19) => GND_1, addra(18) => GND_1, addra(17) => GND_1, addra(16) => GND_1, addra(15) => GND_1, addra(14) => GND_1, addra(13) => GND_1, addra(12 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_ADDR(12 downto 0), addrb(31 downto 17) => NLW_axi_bram_ctrl_0_bram_addrb_UNCONNECTED(31 downto 17), 79 addrb(16 downto 0) => Image_Processor_0_address(16 downto 0), clka => axi_bram_ctrl_0_BRAM_PORTA_CLK, clkb => processing_system7_0_FCLK_CLK0, dina(31 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_DIN(31 downto 0), dinb(31 downto 0) => Image_Processor_0_dataout(31 downto 0), douta(31 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_DOUT(31 downto 0), doutb(31 downto 0) => axi_bram_ctrl_0_bram_doutb(31 downto 0), ena => axi_bram_ctrl_0_BRAM_PORTA_EN, enb => Image_Processor_0_enable, rsta => axi_bram_ctrl_0_BRAM_PORTA_RST, rstb => processing_system7_0_FCLK_RESET0_N, wea(3 downto 0) => axi_bram_ctrl_0_BRAM_PORTA_WE(3 downto 0), web(3 downto 0) => Image_Processor_0_we(3 downto 0) ); axi_mem_intercon: entity work.test_axi_mem_intercon_0 port map ( ACLK => processing_system7_0_FCLK_CLK0, ARESETN(0) => rst_processing_system7_0_100M_interconnect_aresetn(0), M00_ACLK => processing_system7_0_FCLK_CLK0, M00_ARESETN(0) => rst_processing_system7_0_100M_peripheral_aresetn(0), M00_AXI_araddr(12 downto 0) => axi_mem_intercon_M00_AXI_ARADDR(12 downto 0), M00_AXI_arburst(1 downto 0) => axi_mem_intercon_M00_AXI_ARBURST(1 downto 0), M00_AXI_arcache(3 downto 0) => axi_mem_intercon_M00_AXI_ARCACHE(3 downto 0), M00_AXI_arid(11 downto 0) => axi_mem_intercon_M00_AXI_ARID(11 downto 0), M00_AXI_arlen(7 downto 0) => axi_mem_intercon_M00_AXI_ARLEN(7 downto 0), M00_AXI_arlock(0) => axi_mem_intercon_M00_AXI_ARLOCK(0), M00_AXI_arprot(2 downto 0) => axi_mem_intercon_M00_AXI_ARPROT(2 downto 0), M00_AXI_arready => axi_mem_intercon_M00_AXI_ARREADY, M00_AXI_arsize(2 downto 0) => axi_mem_intercon_M00_AXI_ARSIZE(2 downto 0), M00_AXI_arvalid => axi_mem_intercon_M00_AXI_ARVALID, M00_AXI_awaddr(12 downto 0) => axi_mem_intercon_M00_AXI_AWADDR(12 downto 0), M00_AXI_awburst(1 downto 0) => axi_mem_intercon_M00_AXI_AWBURST(1 downto 0), M00_AXI_awcache(3 downto 0) => axi_mem_intercon_M00_AXI_AWCACHE(3 downto 0), M00_AXI_awid(11 downto 0) => axi_mem_intercon_M00_AXI_AWID(11 downto 0), M00_AXI_awlen(7 downto 0) => axi_mem_intercon_M00_AXI_AWLEN(7 downto 0), M00_AXI_awlock(0) => axi_mem_intercon_M00_AXI_AWLOCK(0), M00_AXI_awprot(2 downto 0) => axi_mem_intercon_M00_AXI_AWPROT(2 downto 0), M00_AXI_awready => axi_mem_intercon_M00_AXI_AWREADY, M00_AXI_awsize(2 downto 0) => axi_mem_intercon_M00_AXI_AWSIZE(2 downto 0), M00_AXI_awvalid => axi_mem_intercon_M00_AXI_AWVALID, M00_AXI_bid(11 downto 0) => axi_mem_intercon_M00_AXI_BID(11 downto 0), M00_AXI_bready => axi_mem_intercon_M00_AXI_BREADY, M00_AXI_bresp(1 downto 0) => axi_mem_intercon_M00_AXI_BRESP(1 downto 0), M00_AXI_bvalid => axi_mem_intercon_M00_AXI_BVALID, M00_AXI_rdata(31 downto 0) => axi_mem_intercon_M00_AXI_RDATA(31 downto 0), M00_AXI_rid(11 downto 0) => axi_mem_intercon_M00_AXI_RID(11 downto 0), M00_AXI_rlast => axi_mem_intercon_M00_AXI_RLAST, M00_AXI_rready => axi_mem_intercon_M00_AXI_RREADY, M00_AXI_rresp(1 downto 0) => axi_mem_intercon_M00_AXI_RRESP(1 downto 0), M00_AXI_rvalid => axi_mem_intercon_M00_AXI_RVALID, M00_AXI_wdata(31 downto 0) => axi_mem_intercon_M00_AXI_WDATA(31 downto 0), M00_AXI_wlast => axi_mem_intercon_M00_AXI_WLAST, M00_AXI_wready => axi_mem_intercon_M00_AXI_WREADY, M00_AXI_wstrb(3 downto 0) => axi_mem_intercon_M00_AXI_WSTRB(3 downto 0), M00_AXI_wvalid => axi_mem_intercon_M00_AXI_WVALID, S00_ACLK => processing_system7_0_FCLK_CLK0, 80 S00_ARESETN(0) => rst_processing_system7_0_100M_peripheral_aresetn(0), S00_AXI_araddr(31 downto 0) => processing_system7_0_M_AXI_GP0_ARADDR(31 downto 0), S00_AXI_arburst(1 downto 0) => processing_system7_0_M_AXI_GP0_ARBURST(1 downto 0), S00_AXI_arcache(3 downto 0) => processing_system7_0_M_AXI_GP0_ARCACHE(3 downto 0), S00_AXI_arid(11 downto 0) => processing_system7_0_M_AXI_GP0_ARID(11 downto 0), S00_AXI_arlen(3 downto 0) => processing_system7_0_M_AXI_GP0_ARLEN(3 downto 0), S00_AXI_arlock(1 downto 0) => processing_system7_0_M_AXI_GP0_ARLOCK(1 downto 0), S00_AXI_arprot(2 downto 0) => processing_system7_0_M_AXI_GP0_ARPROT(2 downto 0), S00_AXI_arqos(3 downto 0) => processing_system7_0_M_AXI_GP0_ARQOS(3 downto 0), S00_AXI_arready => processing_system7_0_M_AXI_GP0_ARREADY, S00_AXI_arsize(2 downto 0) => processing_system7_0_M_AXI_GP0_ARSIZE(2 downto 0), S00_AXI_arvalid => processing_system7_0_M_AXI_GP0_ARVALID, S00_AXI_awaddr(31 downto 0) => processing_system7_0_M_AXI_GP0_AWADDR(31 downto 0), S00_AXI_awburst(1 downto 0) => processing_system7_0_M_AXI_GP0_AWBURST(1 downto 0), S00_AXI_awcache(3 downto 0) => processing_system7_0_M_AXI_GP0_AWCACHE(3 downto 0), S00_AXI_awid(11 downto 0) => processing_system7_0_M_AXI_GP0_AWID(11 downto 0), S00_AXI_awlen(3 downto 0) => processing_system7_0_M_AXI_GP0_AWLEN(3 downto 0), S00_AXI_awlock(1 downto 0) => processing_system7_0_M_AXI_GP0_AWLOCK(1 downto 0), S00_AXI_awprot(2 downto 0) => processing_system7_0_M_AXI_GP0_AWPROT(2 downto 0), S00_AXI_awqos(3 downto 0) => processing_system7_0_M_AXI_GP0_AWQOS(3 downto 0), S00_AXI_awready => processing_system7_0_M_AXI_GP0_AWREADY, S00_AXI_awsize(2 downto 0) => processing_system7_0_M_AXI_GP0_AWSIZE(2 downto 0), S00_AXI_awvalid => processing_system7_0_M_AXI_GP0_AWVALID, S00_AXI_bid(11 downto 0) => processing_system7_0_M_AXI_GP0_BID(11 downto 0), S00_AXI_bready => processing_system7_0_M_AXI_GP0_BREADY, S00_AXI_bresp(1 downto 0) => processing_system7_0_M_AXI_GP0_BRESP(1 downto 0), S00_AXI_bvalid => processing_system7_0_M_AXI_GP0_BVALID, S00_AXI_rdata(31 downto 0) => processing_system7_0_M_AXI_GP0_RDATA(31 downto 0), S00_AXI_rid(11 downto 0) => processing_system7_0_M_AXI_GP0_RID(11 downto 0), S00_AXI_rlast => processing_system7_0_M_AXI_GP0_RLAST, S00_AXI_rready => processing_system7_0_M_AXI_GP0_RREADY, S00_AXI_rresp(1 downto 0) => processing_system7_0_M_AXI_GP0_RRESP(1 downto 0), S00_AXI_rvalid => processing_system7_0_M_AXI_GP0_RVALID, S00_AXI_wdata(31 downto 0) => processing_system7_0_M_AXI_GP0_WDATA(31 downto 0), S00_AXI_wid(11 downto 0) => processing_system7_0_M_AXI_GP0_WID(11 downto 0), S00_AXI_wlast => processing_system7_0_M_AXI_GP0_WLAST, S00_AXI_wready => processing_system7_0_M_AXI_GP0_WREADY, S00_AXI_wstrb(3 downto 0) => processing_system7_0_M_AXI_GP0_WSTRB(3 downto 0), S00_AXI_wvalid => processing_system7_0_M_AXI_GP0_WVALID ); processing_system7_0: component test_processing_system7_0_0 port map ( DDR_Addr(14 downto 0) => DDR_addr(14 downto 0), DDR_BankAddr(2 downto 0) => DDR_ba(2 downto 0), DDR_CAS_n => DDR_cas_n, DDR_CKE => DDR_cke, DDR_CS_n => DDR_cs_n, DDR_Clk => DDR_ck_p, DDR_Clk_n => DDR_ck_n, DDR_DM(3 downto 0) => DDR_dm(3 downto 0), DDR_DQ(31 downto 0) => DDR_dq(31 downto 0), DDR_DQS(3 downto 0) => DDR_dqs_p(3 downto 0), DDR_DQS_n(3 downto 0) => DDR_dqs_n(3 downto 0), DDR_DRSTB => DDR_reset_n, DDR_ODT => DDR_odt, DDR_RAS_n => DDR_ras_n, 81 DDR_VRN => FIXED_IO_ddr_vrn, DDR_VRP => FIXED_IO_ddr_vrp, DDR_WEB => DDR_we_n, FCLK_CLK0 => processing_system7_0_FCLK_CLK0, FCLK_RESET0_N => processing_system7_0_FCLK_RESET0_N, MIO(53 downto 0) => FIXED_IO_mio(53 downto 0), M_AXI_GP0_ACLK => processing_system7_0_FCLK_CLK0, M_AXI_GP0_ARADDR(31 downto 0) => processing_system7_0_M_AXI_GP0_ARADDR(31 downto 0), M_AXI_GP0_ARBURST(1 downto 0) => processing_system7_0_M_AXI_GP0_ARBURST(1 downto 0), M_AXI_GP0_ARCACHE(3 downto 0) => processing_system7_0_M_AXI_GP0_ARCACHE(3 downto 0), M_AXI_GP0_ARID(11 downto 0) => processing_system7_0_M_AXI_GP0_ARID(11 downto 0), M_AXI_GP0_ARLEN(3 downto 0) => processing_system7_0_M_AXI_GP0_ARLEN(3 downto 0), M_AXI_GP0_ARLOCK(1 downto 0) => processing_system7_0_M_AXI_GP0_ARLOCK(1 downto 0), M_AXI_GP0_ARPROT(2 downto 0) => processing_system7_0_M_AXI_GP0_ARPROT(2 downto 0), M_AXI_GP0_ARQOS(3 downto 0) => processing_system7_0_M_AXI_GP0_ARQOS(3 downto 0), M_AXI_GP0_ARREADY => processing_system7_0_M_AXI_GP0_ARREADY, M_AXI_GP0_ARSIZE(2 downto 0) => processing_system7_0_M_AXI_GP0_ARSIZE(2 downto 0), M_AXI_GP0_ARVALID => processing_system7_0_M_AXI_GP0_ARVALID, M_AXI_GP0_AWADDR(31 downto 0) => processing_system7_0_M_AXI_GP0_AWADDR(31 downto 0), M_AXI_GP0_AWBURST(1 downto 0) => processing_system7_0_M_AXI_GP0_AWBURST(1 downto 0), M_AXI_GP0_AWCACHE(3 downto 0) => processing_system7_0_M_AXI_GP0_AWCACHE(3 downto 0), M_AXI_GP0_AWID(11 downto 0) => processing_system7_0_M_AXI_GP0_AWID(11 downto 0), M_AXI_GP0_AWLEN(3 downto 0) => processing_system7_0_M_AXI_GP0_AWLEN(3 downto 0), M_AXI_GP0_AWLOCK(1 downto 0) => processing_system7_0_M_AXI_GP0_AWLOCK(1 downto 0), M_AXI_GP0_AWPROT(2 downto 0) => processing_system7_0_M_AXI_GP0_AWPROT(2 downto 0), M_AXI_GP0_AWQOS(3 downto 0) => processing_system7_0_M_AXI_GP0_AWQOS(3 downto 0), M_AXI_GP0_AWREADY => processing_system7_0_M_AXI_GP0_AWREADY, M_AXI_GP0_AWSIZE(2 downto 0) => processing_system7_0_M_AXI_GP0_AWSIZE(2 downto 0), M_AXI_GP0_AWVALID => processing_system7_0_M_AXI_GP0_AWVALID, M_AXI_GP0_BID(11 downto 0) => processing_system7_0_M_AXI_GP0_BID(11 downto 0), M_AXI_GP0_BREADY => processing_system7_0_M_AXI_GP0_BREADY, M_AXI_GP0_BRESP(1 downto 0) => processing_system7_0_M_AXI_GP0_BRESP(1 downto 0), M_AXI_GP0_BVALID => processing_system7_0_M_AXI_GP0_BVALID, M_AXI_GP0_RDATA(31 downto 0) => processing_system7_0_M_AXI_GP0_RDATA(31 downto 0), M_AXI_GP0_RID(11 downto 0) => processing_system7_0_M_AXI_GP0_RID(11 downto 0), M_AXI_GP0_RLAST => processing_system7_0_M_AXI_GP0_RLAST, M_AXI_GP0_RREADY => processing_system7_0_M_AXI_GP0_RREADY, M_AXI_GP0_RRESP(1 downto 0) => processing_system7_0_M_AXI_GP0_RRESP(1 downto 0), M_AXI_GP0_RVALID => processing_system7_0_M_AXI_GP0_RVALID, M_AXI_GP0_WDATA(31 downto 0) => processing_system7_0_M_AXI_GP0_WDATA(31 downto 0), M_AXI_GP0_WID(11 downto 0) => processing_system7_0_M_AXI_GP0_WID(11 downto 0), M_AXI_GP0_WLAST => processing_system7_0_M_AXI_GP0_WLAST, M_AXI_GP0_WREADY => processing_system7_0_M_AXI_GP0_WREADY, M_AXI_GP0_WSTRB(3 downto 0) => processing_system7_0_M_AXI_GP0_WSTRB(3 downto 0), M_AXI_GP0_WVALID => processing_system7_0_M_AXI_GP0_WVALID, PS_CLK => FIXED_IO_ps_clk, PS_PORB => FIXED_IO_ps_porb, PS_SRSTB => FIXED_IO_ps_srstb, TTC0_WAVE0_OUT => NLW_processing_system7_0_TTC0_WAVE0_OUT_UNCONNECTED, TTC0_WAVE1_OUT => NLW_processing_system7_0_TTC0_WAVE1_OUT_UNCONNECTED, TTC0_WAVE2_OUT => NLW_processing_system7_0_TTC0_WAVE2_OUT_UNCONNECTED ); rst_processing_system7_0_100M: component test_rst_processing_system7_0_100M_0 port map ( aux_reset_in => VCC_1, bus_struct_reset(0) => NLW_rst_processing_system7_0_100M_bus_struct_reset_UNCONNECTED(0), 82 dcm_locked => VCC_1, ext_reset_in => processing_system7_0_FCLK_RESET0_N, interconnect_aresetn(0) => rst_processing_system7_0_100M_interconnect_aresetn(0), mb_debug_sys_rst => GND_1, mb_reset => NLW_rst_processing_system7_0_100M_mb_reset_UNCONNECTED, peripheral_aresetn(0) => rst_processing_system7_0_100M_peripheral_aresetn(0), peripheral_reset(0) => NLW_rst_processing_system7_0_100M_peripheral_reset_UNCONNECTED(0), slowest_sync_clk => processing_system7_0_FCLK_CLK0 ); end STRUCTURE; The IP Core was used from the vivado IP Catalog in Vivado Design Suite which is from Xilinx. 83