Success. So there were a couple issues I’ll document here for completeness. There was a comment about having local IP mentioned, so I went down that route.
I made a copy of the axi_fft and Makefile in a rfnoc_myblock/lib/ip directory. From there I created a new Vivado project and loaded the XCI file and updated the IP to match the E310 part number. So now that IP is configured for the xc7z020clg484-1. I then went into the ~/rfnoc/src/uhd-fpga/usrp3/tools/make/viv_sim_preamble.mak and change the PART_ID to be xc7z020/clg484/-1 And now the axi_fft IP is located and simulation completes perfectly. Thanks for your help guys. Rich > On Sep 18, 2018, at 7:39 AM, Rich Maes via USRP-users > <usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com>> wrote: > > Hello Jon, > Thanks for your help. Certainly seeing a change in behavior now. The > axi_fft.xci is being referenced in the Adding IP phase, but ultimately the > same error occurs. I think, if I understand what the log says, that the IP > is locked and cannot be rebuilt for my device which is different. I am > simulating for the E310 and so the device is configured for xc7z020clg484-1. > That may be the root of the issue, but it begs how I am able to synthesize > for the E310 apparently using the same IP. Do I need to regenerate IP > manually? I have verified that the IP isn’t “read-only” in the build-ip > directory or in the original usrp3/lib/ip directory. > > BUILDER: Adding Verilog : > /home/parallels/rfnoc/src/uhd-fpga/usrp3/lib/rfnoc/dds_freq_tune.v > BUILDER: Adding Verilog : > /home/parallels/rfnoc/src/uhd-fpga/usrp3/lib/rfnoc/dds_timed.v > BUILDER: Adding IP : > /home/parallels/rfnoc/src/rfnoc-nd_fft/rfnoc/testbenches/noc_block_fftddc_tb/build-ip/xc7k410tffg900-2/axi_fft/axi_fft.xci > INFO: [IP_Flow 19-234] Refreshing IP repositories > INFO: [IP_Flow 19-1704] No user IP repositories specified > INFO: [IP_Flow 19-2313] Loaded Vivado IP repository > '/opt/Xilinx/Vivado/2017.4/data/ip'. > > > Later on however, this appears in the log. The device directory is NOT the > same directory as what I am currently building for. > > INFO: [Vivado 12-5698] Checking validity of IPs in the design for the 'XSim' > simulator... > WARNING: [Runs 36-337] The following IPs are either missing output products > or output products are not up-to-date for Simulation target. Since these IPs > are locked, no update to the output products can be done. > Please select 'Report IP Status' from the 'Tools/Report' menu or run Tcl > command 'report_ip_status' for more information. > /home/parallels/rfnoc/src/rfnoc-nd_fft/rfnoc/testbenches/noc_block_fftddc_tb/build-ip/xc7k410tffg900-2/axi_fft/axi_fft.xci > and later still > > WARNING: [SIM-utils-52] IP component XML file does not exist: > '/home/parallels/rfnoc/src/rfnoc-nd_fft/rfnoc/testbenches/noc_block_fftddc_tb/build-ip/xc7k410tffg900-2/axi_fft/axi_fft.xml' > > ERROR: [VRFC 10-2063] Module <axi_fft> not found while processing module > instance <inst_axi_fft> > [/home/parallels/rfnoc/src/rfnoc-nd_fft/rfnoc/fpga-src/noc_block_fftddc.v:262] > ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) > in library work failed. > > >> On Sep 14, 2018, at 11:53 AM, Jon Pendlum <jon.pend...@gmail.com >> <mailto:jon.pend...@gmail.com>> wrote: >> >> I see now. Simulation is a bit different than building images. To prevent >> building every IP for every simulation, the exact IP you want to use needs >> to be added to the test bench Makefile. It is pretty easy. Add the following >> to the test bench Makefile in rfnoc/testbenches/<your block>/Makefile: >> >> LIB_IP_DIR = $(BASE_DIR)/../lib/ip >> include $(LIB_IP_DIR)/axi_fft/Makefile.inc >> DESIGN_SRCS += $(abspath \ >> $(LIB_IP_AXI_FFT_SRCS) \ >> ) >> >> If you are curious where this comes from, take a look at >> usrp3/lib/rfnoc/noc_block_fft_tb/Makefile in the FPGA repo. I can see how it >> is confusing and it needs to be documented somewhere. >> >> As for using your own version of the axi_fft IP, you will need to copy it >> locally to the IP directory. It is usually easiest to import or create the >> IP in Vivado, configure as needed, generate the IP output products, and copy >> over the .xci file. >> >> Jonathon >> >> On Sat, Sep 15, 2018 at 3:32 AM Rich Maes <r...@idearockets.com >> <mailto:r...@idearockets.com>> wrote: >> I did follow that Getting Started guide and produce the text book >> rfnoc_tutorial OOT module and simulated it without issue. >> >> Then next thing I did was to create a second OOT module and name it nd_fft. >> So the same generic OOT module with a different name. That too simulated >> without issue. >> >> So now what I wanted to do was to take the stock FFT and place it into my >> new module. So I took the RTL and the test. I then tried to simulate and >> the error that came back was that module axi_fft was unresolved. So the top >> level model did build, but the underlying IP was not in the search path. >> >> Based on what you are saying, I kind of expected that the axi_fft should >> have been in the default search path already. Would you say that was >> unexpected behavior for the standard OOT module? >> >> I will look at your bullets below and provide feedback tonight. I see what >> you are saying about modifying the .xci. Am I supposed to copy the axi_fft >> IP to this ejk43/rfnoc-ootexample path to make it local? I am guessing that >> bullet 2, could be a path back to the original IP so I don’t have to copy >> it. >> >> >> >>> On Sep 14, 2018, at 8:20 AM, Jon Pendlum <jon.pend...@gmail.com >>> <mailto:jon.pend...@gmail.com>> wrote: >>> >>> Hi Rich, >>> >>> The standard Ettus in-tree Vivado IP, which includes the axi_fft, is >>> automatically included. You do not need to do anything. Have you went >>> through the RFNoC getting started guide >>> (https://kb.ettus.com/Getting_Started_with_RFNoC_Development >>> <https://kb.ettus.com/Getting_Started_with_RFNoC_Development>)? I think >>> that will help you understand the FPGA build process. The key concept to >>> understand is that building the FPGA is separate from building your OOT >>> module. The FPGA build Makefile exists in the Ettus FPGA repo and pulls in >>> files from that repo. That is why you do not need to include any Ettus >>> in-tree files, the Makefile will include them automatically. >>> >>> When you get to the point of adding your custom IP, you need to do these >>> things: >>> 1) Use this IP as a template on how to add your IP: >>> https://github.com/ejk43/rfnoc-ootexample/blob/master/rfnoc/ip/complex_to_magphase_oot/ >>> >>> <https://github.com/ejk43/rfnoc-ootexample/blob/master/rfnoc/ip/complex_to_magphase_oot/>. >>> It is usually as simple as adding your .xci file and some renaming. >>> 2) Add your IP to this file: >>> https://github.com/ejk43/rfnoc-ootexample/blob/master/rfnoc/ip/Makefile.inc >>> <https://github.com/ejk43/rfnoc-ootexample/blob/master/rfnoc/ip/Makefile.inc> >>> 3) Make sure you have this line: >>> https://github.com/ejk43/rfnoc-ootexample/blob/master/rfnoc/Makefile.inc#L6 >>> <https://github.com/ejk43/rfnoc-ootexample/blob/master/rfnoc/Makefile.inc#L6> >>> 4) Use uhd_image_build_gui to import your OOT module and build your >>> bitstream. See the RFNoC getting started guide. >>> >>> >>> Jonathon >>> >>> On Fri, Sep 14, 2018 at 10:40 PM Rich Maes via USRP-users >>> <usrp-users@lists.ettus.com <mailto:usrp-users@lists.ettus.com>> wrote: >>> So I have looked at the ejk43/rfnoc-ootexample and I have been trying to >>> apply what I think I am seeing. Truth in advertising, I an FPGA engineer, >>> and I don’t usually get into Makefiles or CMakeLists.txt very much. >>> >>> I think the correct thing to do is to modify the CMakeLists.txt so that >>> when cmake is run, the the new Makefiles are generated with the correct >>> content. >>> >>> All I want to do, I believe right now is pull in the axi_fft IP. My next >>> will be to follow the advice of one of the respondents and build the IP >>> local to the OOT module, but I am still not certain how I am suppose to >>> reference it correctly. Just trying to get a list of what needs to be >>> touched to get the standard OOT to look an IP directory. >>> >>> What I have done is this: >>> >>> modify this line to include FFT >>> set(GR_REQUIRED_COMPONENTS RUNTIME FFT) >>> >>> and then later, I included this chunk in my >>> ~/rfnoc/src/rfnoc-nd_fft/CMakeLists.txt file >>> >>> ######################################################################## >>> # Setup CPack components >>> ######################################################################## >>> include(GrPackage) >>> CPACK_SET(CPACK_COMPONENT_GROUP_FFT_DESCRIPTION "GNU Radio FFT Blocks") >>> >>> CPACK_COMPONENT("fft_runtime" >>> GROUP "FFT" >>> DISPLAY_NAME "Runtime" >>> DESCRIPTION "Runtime" >>> DEPENDS "runtime_runtime" >>> ) >>> >>> CPACK_COMPONENT("fft_devel" >>> GROUP "FFT" >>> DISPLAY_NAME "Development" >>> DESCRIPTION "C++ headers, package config, import libraries" >>> DEPENDS "runtime_devel" >>> ) >>> >>> CPACK_COMPONENT("fft_python" >>> GROUP "FFT" >>> DISPLAY_NAME "Python" >>> DESCRIPTION "Python modules for runtime; GRC xml files" >>> DEPENDS "runtime_python;fft_runtime" >>> ) >>> >>> CPACK_COMPONENT("fft_swig" >>> GROUP "FFT" >>> DISPLAY_NAME "SWIG" >>> DESCRIPTION "SWIG development .i files" >>> DEPENDS "runtime_swig;fft_python;fft_devel" >>> ) >>> >>> ######################################################################## >>> # Add subdirectories >>> ######################################################################## >>> add_subdirectory(include/gnuradio/fft) >>> add_subdirectory(lib) >>> if(ENABLE_PYTHON) >>> add_subdirectory(swig) >>> add_subdirectory(python/fft) >>> add_subdirectory(grc) >>> endif(ENABLE_PYTHON) >>> add_subdirectory(docs) >>> >>> ######################################################################## >>> # Create Pkg Config File >>> ######################################################################## >>> configure_file( >>> ${CMAKE_CURRENT_SOURCE_DIR}/gnuradio-fft.pc.in >>> <http://gnuradio-fft.pc.in/> >>> ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-fft.pc >>> @ONLY) >>> >>> install( >>> FILES ${CMAKE_CURRENT_BINARY_DIR}/gnuradio-fft.pc >>> DESTINATION ${GR_LIBRARY_DIR}/pkgconfig >>> COMPONENT "fft_devel" >>> ) >>> >>> >>> >>> I also added this because cmake complained that it could not find >>> GnuradioConfig.cmake >>> >>> install(FILES ../../../../src/gnuradio/GnuradioConfig.cmake >>> DESTINATION ${CMAKE_MODULES_DIR}/gnu_radio >>> ) >>> >>> >>> >>> _______________________________________________ >>> USRP-users mailing list >>> USRP-users@lists.ettus.com <mailto:USRP-users@lists.ettus.com> >>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com >>> <http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com> >> > > _______________________________________________ > USRP-users mailing list > USRP-users@lists.ettus.com <mailto:USRP-users@lists.ettus.com> > http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com