Post Go back to editing

Transceiver Toolbox AD9371+ZC706 Timing requirements failed to satisfy

Category: Software
Product Number: AD9371
Software Version: Transceiver Toolbox v23.2.1; MATLAB r2023b Update 9; Vivado 2021.2; Windows platform

I'm using Transceiver Toolbox with Simulink for HDL targeting on zc706+ad9371 on Windows. I found that my design failed to meet the timing requirements, the slack time of 'clk_fpga_0 to mmcm_clk_0_s_1' in 'inter-clock paths' is negative. In order to check whether the problem comes from my own design, I built a simple pass through model with Simulink:

     

With Transceiver Toolbox v23.2.1, I used the HDL workflow advisor to compile the project targeting platform zc706. After finishing all steps, vivado successly generated the BOOT.bin file. But when opening the vivado project, I find that the timing violation still exists, even for this pass through simple project. The vivado outputs are shown here:

    

Eventually, in order to check if this problem exists only in Transceiver Toolbox, I cloned the hdl reference designs from github and compile the zc706+adrv9371x project (direcly using make). This time there is no violation:

It seems that the violation happens with maybe the clock signal of my IP core's AXI lite interface? I tried other implementation strategies, but I got no luck.

So why did this happen and should I solve this problem? If so, How? I've attach my Simulink slx file below, it runs in version r2023b. I understand that it should be easy to reproduce this issue with Transceiver Toolbox.

SimpleTHR.zip

  • Can you verify by running the test scripts provided in the toolbox repo? This script will invoke the entire build: https://github.com/analogdevicesinc/TransceiverToolbox/blob/v23.2.1/test/runSynthTests.m

    To do this simply clone the repo, checkout the v23.2.1 tag, and run that script within MATLAB.

    For AD9371+ZC706 the board string is "adrv9371x_zcu102". All variants pass with timing closure met for the 23.2.1 release and current master branch on our side.

    -Travis

  • Hi Collins, thanks for your reply. I tried to run the test as you suggestted on Windows, but it fails. I've also tried to run it on Linux (Ubuntu 22.04) and the results are the same. MATLAB show errors called "Unrecognized field name "m_name"", soon after that it crashed. I show the video of the run here along with the BSPTestResults.xml file:

    TestRunVideo.zip

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    <testsuites>
      <testsuite errors="3" failures="0" name="BSPTests" skipped="0" tests="3" time="0.64171">
        <testcase classname="BSPTests" name="testMain(configs=AnalogDevices.adrv9371x.zcu102.plugin_rd_rx,SynthesizeDesign=true#ext)" time="0.40911">
          <error>Error occurred in BSPTests/testMain(configs=AnalogDevices.adrv9371x.zcu102.plugin_rd_rx,SynthesizeDesign=true#ext) and it did not run to completion.
        ---------
        Error ID:
        ---------
        'MATLAB:nonExistentField'
        --------------
        Error Details:
        --------------
        Unrecognized field name "m_name".
        
        Error in AnalogDevices.add_io_ports&gt;process (line 43)
                    'InterfaceID',    rx.m_name, ...
        
        Error in AnalogDevices.add_io_ports (line 28)
            process(hRD, root.ports.rx, 'rx');
        
        Error in AnalogDevices.add_io (line 15)
        AnalogDevices.add_io_ports(hRD,lower(project),lower(type),lower(fpga));
        
        Error in AnalogDevices.plugin_rd (line 170)
        AnalogDevices.add_io(hRD,project,board,design);
        
        Error in AnalogDevices.adrv9371x.zcu102.plugin_rd_rx (line 5)
        hRD = AnalogDevices.plugin_rd('adrv9371','ZCU102', 'Rx');
        
        Error in BSPTestsBase/extractConfigs (line 135)
                    h1 = str2func(config);h1 = h1();
        
        Error in BSPTestsBase/testMain (line 180)
                    cfgb = testCase.extractConfigs(configs);</error>
        </testcase>
        <testcase classname="BSPTests" name="testMain(configs=AnalogDevices.adrv9371x.zcu102.plugin_rd_rxtx,SynthesizeDesign=true#ext)" time="0.039375">
          <error>Error occurred in BSPTests/testMain(configs=AnalogDevices.adrv9371x.zcu102.plugin_rd_rxtx,SynthesizeDesign=true#ext) and it did not run to completion.
        ---------
        Error ID:
        ---------
        'MATLAB:nonExistentField'
        --------------
        Error Details:
        --------------
        Unrecognized field name "m_name".
        
        Error in AnalogDevices.add_io_ports&gt;process (line 43)
                    'InterfaceID',    rx.m_name, ...
        
        Error in AnalogDevices.add_io_ports (line 28)
            process(hRD, root.ports.rx, 'rx');
        
        Error in AnalogDevices.add_io (line 15)
        AnalogDevices.add_io_ports(hRD,lower(project),lower(type),lower(fpga));
        
        Error in AnalogDevices.plugin_rd (line 170)
        AnalogDevices.add_io(hRD,project,board,design);
        
        Error in AnalogDevices.adrv9371x.zcu102.plugin_rd_rxtx (line 7)
        hRD = AnalogDevices.plugin_rd('adrv9371','ZCU102', 'Rx &amp; Tx');
        
        Error in BSPTestsBase/extractConfigs (line 135)
                    h1 = str2func(config);h1 = h1();
        
        Error in BSPTestsBase/testMain (line 180)
                    cfgb = testCase.extractConfigs(configs);</error>
        </testcase>
        <testcase classname="BSPTests" name="testMain(configs=AnalogDevices.adrv9371x.zcu102.plugin_rd_tx,SynthesizeDesign=true#ext)" time="0.19323">
          <error>Error occurred in BSPTests/testMain(configs=AnalogDevices.adrv9371x.zcu102.plugin_rd_tx,SynthesizeDesign=true#ext) and it did not run to completion.
        ---------
        Error ID:
        ---------
        'MATLAB:nonExistentField'
        --------------
        Error Details:
        --------------
        Unrecognized field name "m_name".
        
        Error in AnalogDevices.add_io_ports&gt;process (line 43)
                    'InterfaceID',    rx.m_name, ...
        
        Error in AnalogDevices.add_io_ports (line 31)
            process(hRD, root.ports.tx, 'tx');
        
        Error in AnalogDevices.add_io (line 15)
        AnalogDevices.add_io_ports(hRD,lower(project),lower(type),lower(fpga));
        
        Error in AnalogDevices.plugin_rd (line 170)
        AnalogDevices.add_io(hRD,project,board,design);
        
        Error in AnalogDevices.adrv9371x.zcu102.plugin_rd_tx (line 7)
        hRD = AnalogDevices.plugin_rd('adrv9371','ZCU102', 'Tx');
        
        Error in BSPTestsBase/extractConfigs (line 135)
                    h1 = str2func(config);h1 = h1();
        
        Error in BSPTestsBase/testMain (line 180)
                    cfgb = testCase.extractConfigs(configs);</error>
        </testcase>
      </testsuite>
    </testsuites>
    

    I also tried another HDL targeting of my simple pass through model in Ubuntu 22.04, but still the result are the same, timing violation still exists:

    I'm pretty sure that I have installed Transceiver Toolbox properly with all its required dependencies on MATLAB r2023b. Is there anything I missed?

  • Update:

    Since the timing violation in my initial Windows attempt relates to the reset in HDL_DUT's AXI Lite, as shown below in the highlight:

    I changed the configuration parameter of HDL code generation in the simple pass through model. Under global settings, the reset type was suggested to be set to synchronous, and I switched to asynchronous, as shown:

    Then I did another compile on the pass through model, the timing violation still exists, but a bit better than before (-1.5ns to -0.8ns):

    However, this time the violation exists not only in "inter-clock paths", but in **async_default** as well. So I guess it might eventually relate to the setting of MATLAB HDL code generation? I wonder what is the recommended settings for Transceiver Toolbox.

  • Hi, I've found the reason for my `Unrecognized field name "m_name"` problem. It turns out that I must build the Transceiver Toolbox  first and then run the tests. So I've cloned the Toolbox and switched to the v23.2.1 tag. I used

    `make -C CI/scripts/ build`

    to first build the Toolbox. And then I ran

    `make -C CI/scripts/ test_synth BOARD=adrv9371x.zc706.plugin_rd_rxtx`

    to compile the rx&tx variant of zc706+ad9371 test project.

    While the output from the console indicates a passed test and met timing constraints as shown:

    The timing report file `system_top_timing_summary_routed.rpt` in the vivado project clearly says that timing constraints are not met:

    The vivado project in GUI also shows violations of timing constraints:

    I've also tried other variants including both tx-only and rx-only. The timing constraints are also not met. I'm really confused if this happens only on my side or an actual problem with Transceiver Toolbox. What was the MATLAB subversion when you guys tested the HDL workflow? Could it be because I use a MATLAB r2023b update 9 version? Can you share the verilog file generated from the test scripts above and I can check whether they are the same?

    I'm looking forward to your reply.

  • Update for anyone who may be concerned or encounter the same problem:

    I believe I confirmed this is a bug in the Transceiver Toolbox itself. The timing violation comes from the wrong connections of two reset signals, namely axi_cpu_interconnect/M21_ARESETN, and the reset signal for the generated IP core. In the release version, they both connect to the output of the sys_rstgen block. However, this connection will inevitably render a timing violation in the implementation stage for ZC706.

    Actually, one pull request in the Transceiver Toolbox solves this problem: https://github.com/analogdevicesinc/TransceiverToolbox/pull/129. It simply changes the input reset signal from the output of sys_rstgen to the output of ad9371_rx_device_clk_rstgen. After applying the same changes, the timing is fixed for AD9371. However, the pull request has not been merged for 2 years....

    Currently, I've only confirmed this issue for the zc706+ad9371 platform, not sure if it exists in zcu102 as well.