Xilinx / open-nic-shell

AMD OpenNIC Shell includes the HDL source files
Apache License 2.0
94 stars 63 forks source link

Issue building OpenNIC on U55C #51

Open vaniaprkl opened 10 months ago

vaniaprkl commented 10 months ago

Hi, I was trying to build OpenNic targeting the U55C board using Vivado 2022.1 version and seeing this strange issue. I was hoping to get both ports going with DPDK driver so I gave the following build command with -num_phys_func 2 -num_cmac_port 2 stated in DPDK build suggestion.

../script$ vivado -mode batch -source build.tcl -tclargs -board au55c -tag build1 -synth_ip 1 -impl 1 -post_impl 1 -max_pkt_len 9000 -num_phys_func 2 -num_cmac_port 2

am I sending in wrong parameters for a 2 port 100G OpenNIC pipeline?

WARNING: [Vivado 12-818] No files matched '/disk2/opennic/open-nic-shell-u55c/open-nic-shell/build/au55c_build1/vivado_ip/clk_wiz_50Mhz/clk_wiz_50Mhz.xci'
WARNING: [Vivado 12-818] No files matched '/disk2/opennic/open-nic-shell-u55c/open-nic-shell/build/au55c_build1/vivado_ip/clk_wiz_50Mhz/clk_wiz_50Mhz.xci'
expected floating-point number but got "Unable to get value from speedsfile for keyword MM"
ERROR: [IP_Flow 19-3476] Tcl error in create_gui procedure for IP 'clk_wiz_50Mhz'. expected floating-point number but got "Unable to get value from speedsfile for keyword MM"
ERROR: [IP_Flow 19-3428] Failed to create Customization object clk_wiz_50Mhz
CRITICAL WARNING: [IP_Flow 19-5622] Failed to create IP instance 'clk_wiz_50Mhz'. Failed to customize IP instance 'clk_wiz_50Mhz'. Failed to load customization data
ERROR: [Common 17-69] Command failed: Create IP failed with errors

    while executing
"source ${ip_tcl_dir}/${ip}.tcl"
    invoked from within
"if {[file exists "${ip_tcl_dir}/${ip}_${board}.tcl"]} {
            source ${ip_tcl_dir}/${ip}_${board}.tcl
        } elseif {[file exists "${ip_tcl_d..."
    ("foreach" body line 30)
    invoked from within
"foreach ip $ips {
        # Pre-save IP name and its build directory to a global dictionary
        dict append ip_dict $ip ${ip_build_dir}/${ip}

   ..."
    ("dict for" body line 17)
    invoked from within
"dict for {module module_dir} $module_dict {
    set ip_tcl_dir ${module_dir}/vivado_ip

    # Check the existence of "$ip_tcl_dir" and "${ip_tcl_dir}/..."
    (file "build.tcl" line 255)
wnew commented 10 months ago

Hi @vaniaprkl

I have just built successfully using the command you provided with both vivado 22.1 and 23.1

A response to this post seems to think it could be that you havent installed the Ultrascale+ MPSoC support: https://support.xilinx.com/s/question/0D52E00006xpnUeSAI/issue-in-adding-clocking-wizard-ip-in-design?language=en_US

This should be a checkbox option when you install Vivado.

vaniaprkl commented 10 months ago

Hi wnew, Thanks for running the build test and responding quickly.

I reinstalled vivado ml standard 2022.1 with all the checkboxes ticked and it still failed. Screen of the install options attached. Going to test out 2023.1 next.

Screenshot 2023-08-23 at 9 22 39 AM

vaniaprkl commented 10 months ago

Hi @wnew 2023.1 works !! so it is something to do with 2022.1 environment.

so I loaded the .mcs that the build created using hardware manager && "add configuration memory" and also put it through a cold reboot cycle. The hardware device 04:00.0 came back after the cold reboot as this:

04:00.0 Network controller: Xilinx Corporation Device 903f
    Subsystem: Xilinx Corporation Device 0007
    Physical Slot: 3
    Flags: fast devsel, IRQ 5, NUMA node 0
    Memory at c5800000 (64-bit, non-prefetchable) [disabled] [size=256K]
    Memory at c5400000 (64-bit, non-prefetchable) [disabled] [size=4M]
    Capabilities: [40] Power Management version 3
    Capabilities: [60] MSI-X: Enable- Count=10 Masked-
    Capabilities: [70] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Capabilities: [1c0] Secondary PCI Express
    Capabilities: [1f0] Virtual Channel

Does this look right? I'm hoping to get this loaded against the DPDK drivers but the bringup there (https://github.com/Xilinx/open-nic-dpdk Section7 ) mentions this need to show up at a memory controller.

wnew commented 10 months ago

Good news, that is strange to me why it would only work in 2023.1 but maybe someone else can provide insights to that.

The one issue you might have with a 2023.1 build is the changed to the register mapping between the QDMA IP versions.

See @cneely-amd's answer to my question here: https://github.com/Xilinx/open-nic-shell/discussions/46

wnew commented 10 months ago

If you are interested in assisting a port to 2023.1 I am busy trying to figure out the difference in the mapping and we would need to update the driver.

Re the DPDK drivers I am only starting to look at those now.

vaniaprkl commented 10 months ago

Thanks @wnew for your feedback. I am trying to get opennic running with 2022.1 since Xilinx recommended it as per their response to you. Might decide to go 2023 only if they are not able to provide a fix... hoping they'll.

cneely-amd commented 9 months ago

Hi @vaniaprkl

Sorry for the delayed reply. I experimentally ran the build for U55C version through Vivado this afternoon using Vivado 2021.2.1 and with also making one modification to src/system_config/vivado_ip/clk_wiz_50Mhz.tcl.

For the modification, I edited the Tcl to remove "-version 6.0", for example, like the following:

set clk_wiz_50Mhz clk_wiz_50Mhz
#create_ip -name clk_wiz -vendor xilinx.com -library ip -version 6.0 -module_name $clk_wiz_50Mhz -dir ${ip_build_dir}
create_ip -name clk_wiz -vendor xilinx.com -library ip -module_name $clk_wiz_50Mhz -dir ${ip_build_dir}

set_property -dict {
    CONFIG.PRIMITIVE {Auto} 

I only did one run to test this, and it looks like it is working. My Vivado run has finished place_design and is on route_design as I'm writing this reply without receiving any errors.

Best regards, --Chris

cneely-amd commented 9 months ago

My post above was using: vivado -mode batch -source build.tcl -tclargs -board au55c to generate the project.