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> 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
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to