Post Go back to editing

FPGA design files for D2390A-A evaluation board and Arrow/Terasic SoCkit Cyclone V FPGA evaluation board

I am using the DC2390A-A evaluation board for the LTC2500-32 ADC with the Arrow/Terasic SoCkit Cyclone V FPGA evaluation board.  I cannot find the design files for the Arrow/Terasic SoCkit evaluation board for use with the DC2390A-A.  I am in need of the design files to program the Cyclone V FPGA of the SoCkit evaluation board so that I can evaluate the LTC2500-32 on the DC2390A-A evaluation board.

I can't even find the pinout information for the DC2390A-A evaluation board!  So at this point, the DC2390A-A evaluation board is useless.

Thank you for any assistance with this issue!

Parents
  • Hi, Hypelnst and ghoover. I have encountered some similar problems.  

    When I booted the SoCkit board using Linear Technology's SD card image, I can see the assigned IP address will appear in the LCD screen using the software of Putty connected by micro_USB. I thought I was close to success.

    Regrettably, when I installed LinearLab Tools follow the directions in the DC2390 demo Manual and  mounted the DC2390 to the SoCkit board via the HSMC connector, I can't find the IP address in LCD screen  after power up the SoCkit board.  In additon, when I run "DC2390_full_datapath_test.py", I receive the following error message: ImportError: No module named llt.utils.save_for_pscope

    Thank you so much!


     

  • I got some progress, however, when  I run "DC2390_full_datapath_test.py", I receive the following error message:

    error: [Errno 10061] 

    And I run "DC2390_hello_world.py" encounter the same problem. I'm confused, I don't understand the meaning of this error.

    PS: The script "check_linear_lab_tools_python_install.py" executes properly.

     

  • Here is what I turned up on a Google search of that error>

    [Errno 10061] No connection could be made because the target machine actively refused it

    My best guess is that the DC2390 is somehow preventing the SoCkit from booting.

    Try disconnecting the DC2390 board and see if the SoCkit board will display its IP address. If it does, that suggests the DC2390 is damaged. If the SoCkit board still doesn't display its IP address, that suggests the SoCkit board is damaged. If the SoCkit board does display its IP address, use an external 12V supply at Vin and GND to power the DC2390. (Do not connect it back to the SoCkit board yet). Measure VREF1, VREF2, +5V, -5V, +2.5V, V+ and V- terminals.

    Test Point

    Min

    Max

    V-

    -15.5V

    -14.5V

    V+

    14.5V

    15.5V

    +2.5

    2.375V

    2.625V

    +5V

    4.75V

    5.25V

    -5V

    -5.25V

    -4.75V

    VREF1

    4.95V

    5.05V

    VREF2

    4.95V

    5.05V

    If everything looks good, then remove power from DC2390, reconnect the DC2390 to the SoCkit board and then apply power to the SoCkit board. After a few moments the SoCkit board should display its IP address. 

  • Yup, that shouldn't happen. I notice that you don't have the DC2390 screwed down to the SoCkit board, with 5mm standoffs. The HSMC connector is not designed to provide a robust physical connection, it needs to be secured. Not that this would directly cause a problem, but consider the case where the 3.3V connections are momentarily broken, it could reset the FPGA. (This would be intermittent, not necessarily occur every time.)

    Do post the results of measuring the testpoint voltages.

    -Mark

  • Please note that there is a jumper on the SoCKit board (JP2) to set the I/O voltage of the HSMC.  This must be set to 3.3V for the DC2390A-A.  Is the setting correct in this case?

  • Thanks for your response, I have measured carefully the testpoint voltages of DC2390A-A, everything looks good. And I have tighten mounting screws using 5mm standoffs between boards. The jumper(JP2) is set to 3.3V.

    When I  power up the SoCkit board again, the SoCkit board display its IP address, but  the FPGA_CONF_D LED don't illuminate.  When I run "DC2390_full_datapath_test.py", I receive the same error message:


    File "C:\Users\guofengzhao\Anaconda2\lib\socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)

    error: [Errno 10061]


  • Do you see something like this when you start DC2390_hello_world?

    runfile('C:/Projects/linearlabtools_bitbucket/linear_lab_tools/python/llt/app_examples/ltc2500_family/DC2390_hello_world.py', args='192.168.1.231', wdir='C:/Projects/linearlabtools_bitbucket/linear_lab_tools/python/llt/app_examples/ltc2500_family')

    If the args= is not what the SoCkit display shows for an IP address, change the else portion of line 60 to match the IP address shown in the SoCkit display.

    Have you attempted step 11 in the DC2390A demo manual?

  • Good advice - step 11 is critical, and if the symlink was not set up properly, it might be the explanation. You should be able to program the FPGA from the command line with the program_fpga script, you can give either the symlink as the argument, or any of the rbf files directly.

  • When I run the script DC2390_hello_world, I see the same error. 

    I have completed the step 11 in the DC2390A demo manual. But nothing changed.

    I try to ping the IP address, the network connect is normal。

  • So the altera_fpga_manager timeout message indicates that something else may be going on, I've never seen that before. A quick internet search pulled up this:

    https://support.criticallink.com/redmine/boards/47/topics/3551

    and a couple of other situations where the DIP switches were not set properly - could you double check those?

    Also, when did you download your SD card image? the DC2390_ABCD image should be revision 1246, yours is showing 1240. Can you re-download the image and give that a try? (I don't suspect this as the cause of the altera_fpga_manager error, though.)

    -Mark

  • I try the new image, I got something as your discription. And I check the configure of the board.

    This time step 11 should be succesfully.

    But the script still failed to execute correctly.

  • I think we are getting close - In the above screenshot, you're pinging 192.168.1.231, but I notice that's from a COM port - are you connected to the SoCkit's USB-UART here? You need to be able to ping the SoCkit from the same machine that the Python script is running on (from Windows CMD prompt or PowerShell prompt.) The 10061 error means that the machine you're trying to talk to isn't listening, which indicates a network issue. Note that the SoCkit will first try to get its IP address via DHCP, so if your network allows it, you could try that (assuming your Windows host is on the same network.) This saves the trouble of having to set the static IP on your host, but the drawback is that the IP address of your SoCkit could change (unless the DHCP server is configured to always give it the same address.)

Reply
  • I think we are getting close - In the above screenshot, you're pinging 192.168.1.231, but I notice that's from a COM port - are you connected to the SoCkit's USB-UART here? You need to be able to ping the SoCkit from the same machine that the Python script is running on (from Windows CMD prompt or PowerShell prompt.) The 10061 error means that the machine you're trying to talk to isn't listening, which indicates a network issue. Note that the SoCkit will first try to get its IP address via DHCP, so if your network allows it, you could try that (assuming your Windows host is on the same network.) This saves the trouble of having to set the static IP on your host, but the drawback is that the IP address of your SoCkit could change (unless the DHCP server is configured to always give it the same address.)

Children
  • I have tried to connected the SoCkit board to the host computer using  USB-Ethernet adapter and set the static IP on the host, when I used Windows CMD to ping the IP address of the SoCkit board, the network connection is normal. 

    So, I want to know how to verify that the SoCkit board is working properly without considering the DC2390A board. Is there a corresponding test script? Such as controlling the LED.

  • The fact that you can ping the board does indeed mean that the network connection is normal, so it really shouldn't be throwing the 10061 error. One thing to try - let's make very sure that the command line argument to the script is being set properly - can you add this line:

    HOST = '192.168.1.231'

    right after the existing HOST= line? You don't even need to comment out the original, as long as this comes after. After this, we'll be sure that your script is pointing to the right machine.

    The next thing to do would be to verify that the daemon that listens for network connections is running - this is started at boot by /etc/rc.local, from the command line, run this command:

    ps aux | grep funcd

    and post the result here. You should see two Python processes running, a mem_funcd and mem_funcd2. These can stop working when commands get corrupted for some reason, but a reboot will start them up again.

    And finally, there is indeed a script that just blinks lights, in the absence of a DC2390. If I recall correctly, all bitfiles have this LED wired to the same register (for this very situation, debugging while taking the connected board out of the equation.) it's at path:

    python\llt\app_examples\Hello_World\SoCkit_hello_world.py

    But I took a look at it and it looks like it may need to be fixed (as some of the scripts earlier in this discussion did.)

    One thing you could try in the meantime - comment out the LTC6954_configure call. Then the first thing the script will do is read the FPGA type and revision, which is a hardcoded value input to an internal register, with no dependence on whether a DC2390 is connected.

    And in fact, after that, the script will blink some lights, which should also work.

    -Mark

  • Thanks.

    First, I tried to add this line (HOST = '192.168.1.231') and comment out the line (LTC6954_configure(client)).

    Second, running ' ps aux | grep funcd' in command line. The result as follow:

     

    Then, I run the script 'DC2390_hello_world' again, nothing different.

    I tried to understand the script statement and found the following statement:

    print ('Okay, now lets blink some lights!!')
    for i in range (0, 10):
    client.sockit_reg_write(LED_BASE, 0x00000001) # The line that actually talks to the FPGA
    sleep(0.5)
    client.sockit_reg_write(LED_BASE, 0x00000000) # The line that actually talks to the FPGA
    sleep(0.5)

    These should be about blinking LED, I run these selection line, return the same error [10061]. Does it means that the register of SoCkit board can't be written?

    In addition, the script 'SoCkit_hello_world.py' can't be run properly, because of the lack of the script 'Sockit' in directory.

  • That is really odd - everything seems to be set up properly. One question does come to mind - what is the host computer's IP address set to? Can you post a screenshot of the ipv4 settings?

  • There's your problem! You need to set the last octet to something OTHER than 231(230, 100, anything really) because 231 is the SoCkit's address. This is noted toward the end of the setup article: https://www.analog.com/en/technical-articles/testing-data-converters-with-the-arrow-altera-sockit-fpga-board.html

    What is happening is that your host computer is trying to talk to IP address 192.168.1.231, which is itself. Same thing with pinging.

    -Mark

  • Thanks you very much, I sorry about that.

    After fixing the problem, I run the script again, it returns the other error:

     

    So what is means? 

  • So looks like that's a timeout error. Is the DC2390 connected? Were you able to comment out the LTC6954_configure call as noted above? That way, the first commands that the script will attempt to execute have no dependence on the DC2390 being connected.

    Also - did you reboot the SoCkit? You shouldn't have to, given that you've confirmed that the network daemons are running, but it wouldn't hurt to do this.

    -Mark

  • Fortunately, I finally successfully executed the script 'DC2390_full_datapath_test_oldclient.py'. It seems to be bad Ethernet connection. 

    I have some doubts about the results of this operation. The voltage value measured by the ADC is only 1/2 of the actual value. I tried to create a new script that uses one of the ADCs to acquire different voltages, and the results show that this is indeed the case. Another problem is how to verify the actual number of bits of the ADC. The following is the measurement result of my measurement of AIN2 + ground (sample rate is 250ksps). RMS voltage: 6.150005247631949e-05, if 10V is used as the full-scale input, there are only 17 bits.

    The test codes are as follow

    # -*- coding: utf-8 -*-
    """
    Created on Thu Nov 28 15:09:07 2019
    
    @author: guofengzhao
    """
    
    '''
    Example application for running tests on the Arrow SoCkit board
    using the LT_soc_framework
    
    Tested with Python 2.7, Anaconda distribution available from Continuum Analytics,
    http://www.continuum.io/
    
    '''
    
    import sys , ctypes
    import numpy as np
    from time import sleep
    from matplotlib import pyplot as plt
    
    # Save data in PScope compatible format
    from llt.utils.save_for_pscope import save_for_pscope
    # this is the module that communicates with the SoCkit
    from llt.common.mem_func_client_2_1 import MemClient
    # Functions and defines specific to this board
    from llt.utils.DC2390_functions import *
    # Functions and defines specific to sockit system
    from llt.utils.sockit_system_functions import *
    
    # Get the host from the command line argument. Can be numeric or hostname.
    HOST = sys.argv[1] if len(sys.argv) >= 2 else '192.168.1.231'
    
    # Enable / disable simple memory bandwidth test using internal digital
    # pattern generator
    mem_bw_test = False
    
    # Set to true to write a downward ramp to DAC lookup table
    test_LUT_write = True
    
    # Timing / data record length
    SYSTEM_CLOCK_DIVIDER = 199 # 50MHz / (n+1), set to 99 for 500ksps, 199 for 250ksps, etc.
    LUT_NCO_DIVIDER = 0xFFFD # 0xFFFF for divide by 1
    NUM_SAMPLES = 8192 #131072 #8192
    
    DEADBEEF = -559038737 # For checking againtst constant test pattern
    
    N = 7 #Number of samples to average (LTC2380-24)
    
    vfs = 2 * 10.0 # Full-scale voltage, VREF * 2 for LTC25xx family
    
    nco_word_width = 32 # A property of the NCO in the FPGA design
    master_clock = 50000000 # Relies on proper configuration of LTC6954 divider
    bin_number = 50 # Number of cycles over the time record for sine signal
    sample_rate = master_clock / (SYSTEM_CLOCK_DIVIDER + 1) # 250ksps for 50M clock, 200 clocks per sample
    
    print('Starting client')
    client = MemClient(host=HOST)
    #First thing's First!! Configure clocks...
    LTC6954_configure(client, 0x04)
    #Read FPGA type and revision
    type_rev_check(client, 0xABCD, 0x1246)
    
    print("Setting up system parameters.\n");
    client.sockit_reg_write(SYSTEM_CLOCK_BASE, SYSTEM_CLOCK_DIVIDER)
    client.sockit_reg_write(SYSTEM_CLOCK_BASE, (LUT_NCO_DIVIDER << 16 | SYSTEM_CLOCK_DIVIDER))
    client.sockit_reg_write(NUM_SAMPLES_BASE, NUM_SAMPLES)
    
    #datapath fields: lut_addr_select, dac_a_select, dac_b_select[1:0], fifo_data_select
    #lut addresses: 0=lut_addr_counter, 1=dac_a_data_signed, 2=0x4000, 3=0xC000
    # DAC A: 
    #	.data0x ( nco_sin_out ),
    #	.data1x ( pid_output ),
    #	.data2x ( 16'h4000 ),
    #	.data3x ( 16'hC000 ),
    # DAC B:
    #	.data0x ( nco_cos_out ),
    #	.data1x ( lut_output ),
    #	.data2x ( 16'hC000 ),
    #	.data3x ( 16'h4000 ),
    # FIFO Data:
    # 0 = ADC A
    # 1 = ADC B
    # 2 = Counters
    # 3 = DEADBEEF
    
    datapath_word_sines = 0x00000001
    
    pltnum = 1
    # Bit fields for control register
    # std_ctrl_wire = {26'bz, lut_write_enable, ltc6954_sync , gpo1, gpo0, en_trig, start };
    
    # Capture a sine wave
    client.sockit_reg_write(DATAPATH_CONTROL_BASE, datapath_word_sines) # Set data multiplexers
    # Capture data - LTC2500 Nyquist data first bit is overrange, followed by MSB
    data = sockit_ltc2500_to_signed32(sockit_capture(client, NUM_SAMPLES, trigger = TRIG_NOW, timeout = 1.0))
    
    data_ndarray = np.array(data)
    data_volts = data_ndarray * (vfs / 2.0**32.0) # Convert to voltage
    datarms = np.std(data_volts)
    datap_p = np.max(data_volts) - np.min(data_volts)
    print("RMS voltage: " + str(datarms))
    print("Peak-to-Peak voltage: " + str(datap_p))
    
    
    plt.figure(pltnum)
    pltnum +=1
    plt.subplot(2, 1, 1)
    plt.title("Basic voltage test")
    plt.plot(data_volts)
    
    
    print("Test done! Enter \"client.shutdown()\" to shut down SoCkit board.")