Programming over Fibre

From MCEWiki
Revision as of 11:53, 27 April 2010 by 142.103.235.238 (talk) (Possible Solutions)

Using Remote Configuration

  • Load Clock Card v5.0.6+ Firmware in the Clock Card Factory Configuration Device (.pof file). Clock Card firmware descriptions are available here.
  • Flip the SW1p1 "BB_EN" Dip Switch on the Clock Card to 'OPEN'.
  • Get the version of JAM Player software from SVN that is compatible with the version of Clock Card firmware you just loaded in the Factory Configuration Device:
~/jp_25/mce_jam/trunk : SVN revision 16 is compatible with cc_v0500006.
  • Compile the SVN software with the following commands:
make clean
make
  • Use the following commands on a MAS PC to program the MCE:
sudo ./jam -u -v -f8000000 -aread_idcode read_idcode.jam                     // For Querying ID Codes
sudo ./jam -u -v -f800000 -aprogram -dDO_VERIFY=0 cc_xfpga_rc_pof.jam        // For Programming EPC16's
sudo ./jam -u -v -f8000000 -aconfigure cc_xfpga_rc_sof.jam                   // For Configuring FPGA's
sudo ./jam -u -v -f8000000 -aconfigure cc_rcd_jic.jam                        // For Programming EPCS64's (Step 1 of 2)
sudo ./jam -u -v -f100000 -aprogram -dDO_VERIFY=0 cc_rcd_jic.jam             // For Programming EPCS64's (Step 2 of 2)
  • The read_idcode.jam file is included in SVN as a test script to help you determine whether you have set up the system correctly. If you can run it, then you are ready to re-configure FPGA's, EPC16's and EPCS64's. For these devices, you will need to generate .jam files that are specifically suited to your system. You will need Quartus II software to do this. Instructions on generating .jam files are here. If you do not have access to this software, send the output of the read_idcode.jam script to UBC, and configuration .jam files will be generated for you.

System Snapshot Prior to Implementation

  • Note that to enable remote configuration, SW1p1 must be switched to "OPEN."
  • Make sure that any scope probes on the JTAG lines are set to 1MOhm input resistance.

MCE Hardware

Card Schematics:

Clock Card Firmware

  • Bug:
    • There is a problem with the Clock Card firmware. With the .tcl assignment # cmp add_assignment $top_name "" jtag_sel LOCATION "Pin_B19" and the pin driven by logic, the Clock Card firmware does not configure upon power up.
    • With the .tck assignments removed for jtag_sel and crc_error, the Clock Card reconfigures.
    • With the jtag_sel pin reassigned in the .tcl file, but driven by the assignment jtag_sel <= '0';, the Clock Card reconfigures fine.
    • With the jtag_sel functionality re-instated, things seem to work fine.. What?? Did the problem have to do with crc_error?


  • Rev. 5.0.3 FPGA Resource Usage (clk_card.fit.rpt):
+--------------------------------------------------------------------------+
; Fitter Summary                                                           ;
+--------------------------+-----------------------------------------------+
; Fitter Status            ; Successful - Mon Jan 25 20:10:18 2010         ;
; Quartus II Version       ; 9.0 Build 235 06/17/2009 SP 2 SJ Full Version ;
; Revision Name            ; clk_card                                      ;
; Top-level Entity Name    ; clk_card                                      ;
; Family                   ; Stratix                                       ;
; Device                   ; EP1S30F780C5                                  ;
; Timing Models            ; Final                                         ;
; Total logic elements     ; 18,095 / 32,470 ( 56 % )                      ;
; Total pins               ; 255 / 598 ( 43 % )                            ;
; Total virtual pins       ; 0                                             ;
; Total memory bits        ; 949,760 / 3,317,184 ( 29 % )                  ;
; DSP block 9-bit elements ; 10 / 96 ( 10 % )                              ;
; Total PLLs               ; 2 / 6 ( 33 % )                                ;
; Total DLLs               ; 0 / 2 ( 0 % )                                 ;
+--------------------------+-----------------------------------------------+

MAS Software

  • MAS is now capable of sustained command rates of 3 kHz.
  • The data block of a command packet can span words 6 trough 63. This is a total of 63 - 6 + 1 = 58 words per packet.
  • Thus total sustained bandwidth of packet data with MAS is
MAS Bandwidth = [3000 packets/s] * [58 words/packet] * [32 bits/word] = 5.568 Mbps
  • If this rate is faster than the timeout rate of the JTAG chain, it may be possible to program the MCE without first storing the programming files on the MCE.
  • According to the JTAG Wiki entry, "the operating frequency of TCK varies depending on all chips in the chain (lowest speed must be used), but it is typically 10-100 MHz (100-10 ns per bit)." This indicates that MAS' bandwidth is about half of the typical lowest speed for TCK.
  • However, according to this support posting, the nominal frequency of TCK from the USB Blaster is 6 MHz.
  • There is probably no lower limit on the frequency of TCK, as the USB Blaster seems to operated at the lowest common frequency in the chain. However, the flash chip inside the configuration devices, or the JAM player may have timeout constraints.

Altera Programming Software

Mandana's Remote Firmware Sandbox

This was handed off to Ernie in 2009:

Configuration Tests

Programming File Formats Supported by Altera

File Type Notes Created From Target Devices Quartus II 9.1
(no source)
JTAG
jp_25.exe
(+ source)
JTAG
JRunner
(+ source)
embedded
uProc
(+ source)
embedded
MicroBlaster
(+ source)
embedded
Quartus JLI
(no source)
JTAG
jbi_22.exe
(+ source)
JTAG
jp_25.exe
(+ source)
Fibre!
.sof SRAM Object File
(For FPGAs)
synthesis (automatic) FPGA Eth-B (3.0 Mb, 0.1 min) No No No No No No No
.pof Programmer Object File
(For FPP Flash devices or CPLDs)
synthesis, .sof EPC16
EPM3128
Eth-B (2.1 Mb, 3 min)
Eth-B (0.01 Mb, 1 min)
No
No
No
No
No
No
No
No
No
No
No
No
No
No
.jic JTAG Indirect Configuration File
(For Serial Flash devices)
Must be generated by Quartus II 9.1+
.sof+SFL EPCS64 Eth-B (8.2 Mb, 2 min) No No No No No No No
.jbc Jam Byte-Code 2.0 File
(Compiled Jam files)
Must be generated by Quartus II 9.1+
synthesis, .sof +/.pof +/.jic,
.jam (jam_24.exe)
FPGA
EPCS64
EPC16
Eth-B (1.1 Mb, 0.7 min)
Eth-B (2.7 Mb, 12 min)
Eth-B (0.8 Mb, 6 min)
No
No
No
No
No
No
JTAG
JTAG
JTAG
No
No
No
Byte-B (0.7 Mb, 1 min)
Byte-B
Byte-B (1.6 Mb, 6 min)
Byte-B?
Byte-B?
Byte-B?
No
No
No
.jam Jam File (for JTAG)
(JESD-71A specification)
Must be generated by Quartus II 9.1+
synthesis, .sof +/.pof +/.jic FPGA
EPCS64
EPC16
Eth-B (1.5 Mb, 1 min)
Eth-B (3.8 Mb, 12 min)
Eth-B (2.2 Mb, 26 min)
Byte-B (0.9 Mb, 1 min)
Byte-B (3.8 Mb, 7 min)*
Byte-B (2.2 Mb, 6 min)
No
No
No
JTAG
JTAG
JTAG
No
No
No
Byte-B (0.9 Mb, 1 min)
Byte-B
Byte-B (2.2 Mb, 7 min)
No
No
No
Fibre (1.2 Mb, 0.1 min)
Fibre (3.8 Mb, 10.0 min)
Fibre (2.7 Mb, 3.8 min)
.rbf Raw Binary File synthesis, .sof FPGA No No Yes* (+.cdf) PS,FPP,PPS,PPA FPP No No No
.hexout Hexadecimal (Intel-Format) File synthesis, .sof or .pof EPCS64
EPC16
No
No
No
No
No
No
AS
PS,FPP,PPS,PPA
No
No
No
No
No
No
No
No
.svf (obsolete) Serial Vector File (for testing) synthesis, .jic CPLD No No No ? No No No No
.rpd Raw Programming Data File .pof FPGA No No No AS No No No No
.ttf Tabular Text Format synthesis, .sof+uProc routines FPGA No No No PS,FPP,PPS,PPA No No No No
.ekp Encryption Key Programming
(For locking & encryption)
?? ? Yes No No ? No No No No
.isc In System Configuration
Must be generated by Quartus II 9.1+
.jic (Quartus), .svf (svf2isc) FPGA (not EP3SE50!)
EPCS64?
EPC16?
No
No
No
No
No
No
No
No
No
?
 ?
 ?
No
No
No
No
No
No
No
No
No
No
No
No
  • Fibre test were conducted with cc_v05000004_26feb2010 tagged firmware. The jam files must not include the Clock Card FPGA because it drives the JTAG chain.
  • The minimum time in which MAS can configure an EP1S30 if JTAG information is fully compressed into 58-word chunks over the fibre is:
min_time_ep1s30 = 69 min * [3 bits/write]/[58 words/write * 32 bits/word] = 0.11 min
  • jam_25 released in 2004. jbi_22 released in 2001. jamstub.c and jbistub.c are very similar. The main difference are associated with changing function names from the "jam" prefix to the "jbi" prefix. Not much of the logic has changed, and where it has, it is easy to reconcile. Thus, if we need the capability to program .jbc files as well as .jam, we can almost certainly do this.
  • When probing the TCK line during configuration, I notice that the Ethernet Blaster drives TCK in a two-state cycle (on-off-on-off..) but jp_25.exe drives TCK in a three-state cycle (on-off-off-on-off-off..)
  • Configuration files that target AS configuration devices (i.e. EPCS64) must be generated by Quartus II 9.1+. Previous versions of Quartus generate files that don't work.
  • uProc can be fed configuration data from configuration devices or some other storage device.
  • Time and file-size figures above are for programming a single device in a full 9-card subrack. As much as possible, the largest file-size was used. For example, .sof files for readout card rev.D were used above, etc. Bear in mind that for programming all devices, file-sizes and times will be larger because there are:
    • 9 FPGA's
    • 10 EPC16's/ 4 EPCS16's
    • 1 CPLD
  • Because serial configuration devices do not support the JTAG interface, the conventional method to program them is via the active serial (AS) programming interface. With the AS programming interface, the configuration data used to program serial configuration devices is downloaded via programming hardware.
  • The Quartus "Convert Programming File" software cannot generate .rbf files for Active Serial devices.
  • The Quartus Programmer cannot configure FPGAs/Configuration Devices with .rbf files. However, microprocessors can -- but I'm not sure if both FPGAs and Configuration Devices can accept these files.
  • Readout Card Programming Bug: .jic files do not configure the Readout Cards correctly, unless the Clock Card is fully configured during a configuration process.
  • .pof files are all the same size (no compression for flashing smaller FPGAs) therefore files generated from a .pof are also the same size as each other.
  • .isc files cannot be generated for more than one programming file at a time (i.e. not a chain description, and does not contain programs for multiple devices), which implies that they consist of raw programming information that gets flashed directly into a single device.
  • Devices that speak natively to the JTAG Chain are Altera Programmers (ByteBlaster, USB Blaster, Ethernet Blaster), with any of the following software: Quartus II, JAM player, JLI.
  • .jam files describe an entire JTAG chain, but do not need configuration data for all/any of the devices in the chain. Thus, the Quartus "Creation" tool can generate .jam files from .sof and/or .pof and/or .jic files for any subset of devices in the chain. When generating a .jam file for a client, ensure that the topology of their chain is correctly specified in the programmer window that is generating the .jbc/.jam/.svf/.isc file -- otherwise it will not work at the client's site.

Byte Blaster Commands

  • JRunner commanding:
> ?
  • quartus_jli commanding:
// To see programming options
> C:\altera\91\quartus\bin>quartus_jli jli_scripts/x.jbc -i
 
// To configure FPGA's
> C:\altera\91\quartus\bin>quartus_jli jli_scripts/x.jbc -a CONFIGURE
> C:\altera\91\quartus\bin>quartus_jli jli_scripts/x.jam -a CONFIGURE

// To program EPC16's
> C:\altera\91\quartus\bin>quartus_jli jli_scripts/x.jbc -a PROGRAM
> C:\altera\91\quartus\bin>quartus_jli jli_scripts/x.jam -a PROGRAM

// To program EPCS64's
.. unsupported.
  • Sample Byte Blaster JTAG Commands From Ubuntu Command Line on MAS PC:
sudo ./jam -p0x378 -v -aprogram scripts/cc_pof_rca.jam                  // For Programming EPC16's
sudo ./jam -p0x378 -v -aconfigure scripts/cc_sof_rca.jam                // For Configuring FPGA's
sudo ./jam -p0x378 -v -aread_idcode read_idcode.jam                     // For Querying ID Codes
sudo ./jam -p0x378 -v -aconfigure scripts/cc_rcd_jic.jam                // For Programming EPCS64's (Step 1 of 2)
sudo ./jam -p0x378 -v -aprogram scripts/cc_rcd_jic.jam                  // For Programming EPCS64's (Step 2 of 2)

Byte Blaster Configuration Tests

  • JAM Player commanding (Linux):
Parallel Port BIOS Settings: Output Only, 0x378, IRQ=7

> mce@mce-ubc-1:/etc/mce$ ln -s v5/mce_v1.cfg mce.cfg

// The latest version of code is here:
> cd /home/mce/jp_25/mce_jam/trunk

// To compile:
> rm *.o
> rm *.exe
> make

// To get ID codes via parallel port:
> sudo ./jam -p0x378 -v -aread_idcode read_idcode.jam 

// To get ID codes via serial port:
> sudo ./jam -u -v -aread_idcode read_idcode.jam

// To get the CPU frequency:
> cat /proc/cpuinfo

// To get command line options:
> sudo ./jam

// For FPGAs:
> sudo ./jam -aconfigure scripts/cc_sof_rca.jam

// For EPC16s:
> sudo ./jam -aprogram scripts/cc_pof_rca.jam 

// For EPCS64s (2 steps):
> sudo ./jam -p0x378 -v -aconfigure scripts/cc_rcd_jic.jam 
> sudo ./jam -p0x378 -v -aprogram scripts/cc_rcd_jic.jam 
  • Conclusions:
    • .jam file size is additive
    • .jam file programming time is not additive
    • Parallel Port (jr_25.exe):
      • Max Frequency: 223 kHz
      • the nominal frequecy of the parallel port is 150 kBytes/s = 150 kbits/s*pin, but we get up to 223 kbits/s*pin. There is a linear regime below tck = 10000 where the change in tck is linear. Above this, it seems like other effects, like processing, CPU loading, and IRQ play a role in the speed of TCK.
      • 1 sof => .jam, tck = 100 = 0.12kHz = XXs.png
      • 1 sof => .jam, tck = 1000 = 1.3kHz = XXs.png
      • 1 sof => .jam, tck = 10000 = 13kHz = 823s.png
      • 1 sof => .jam, tck = 100000 = 80kHz = 132s.png
      • 1 sof => .jam, tck = 1000000 = 200kHz = 55s.png
      • 1 sof => .jam, tck = 10000000 = 223kHz = 48s.png
      • 1 sof => .jam, tck = 100000000 = 223kHz = 51s.png
    • Ethernet Blaster
      • Max Frequency: 8348 kHz
    • USB Blaster
      • Max Frequency: 6000 kHz
  • Quartus Programmer: full subrack .sof's and .pof's 4-RC subrack (CC + RC4 + RC3 + RC2 + RC1 [rev. D] + BC3 + BC2 + BC1 + AC).
Info: Started Programmer operation at Wed Jan 27 17:07:22 2010
Info: Configuring device index 2
Info: Device 2 contains JTAG ID code 0x020010DD
Info: Configuring device index 4
Info: Device 4 contains JTAG ID code 0x020010DD --EP1S10
Info: Configuring device index 6
Info: Device 6 contains JTAG ID code 0x020010DD --EP1S10
Info: Configuring device index 8
Info: Device 8 contains JTAG ID code 0x020010DD  --EP1S10
Info: Configuring device index 9
Info: Device 9 contains JTAG ID code 0x021060DD  --EP3SE50
Info: Configuring device index 11
Info: Device 11 contains JTAG ID code 0x020050DD --EP1S40
Info: Configuring device index 13
Info: Device 13 contains JTAG ID code 0x020050DD --EP1S40
Info: Configuring device index 15
Info: Device 15 contains JTAG ID code 0x020050DD --EP1S40
Info: Configuring device index 17
Info: Device 17 contains JTAG ID code 0x020040DD --EP1S30
Info: Device 1 contains JTAG ID code 0x0100A0DD  --EPC4/EPC8/EPC16
Info: Device 3 contains JTAG ID code 0x0100A0DD  --EPC4/EPC8/EPC16
Info: Device 5 contains JTAG ID code 0x0100A0DD  --EPC4/EPC8/EPC16
Info: Device 7 contains JTAG ID code 0x0100A0DD  --EPC4/EPC8/EPC16
Info: Device 10 contains JTAG ID code 0x0100A0DD --EPC4/EPC8/EPC16
Info: Device 12 contains JTAG ID code 0x0100A0DD --EPC4/EPC8/EPC16
Info: Device 14 contains JTAG ID code 0x0100A0DD --EPC4/EPC8/EPC16
Info: Device 16 contains JTAG ID code 0x0100A0DD --EPC4/EPC8/EPC16
Info: Device 1 silicon ID is 0xB0E9              --Sharp-Flash EPC16
Info: Device 3 silicon ID is 0xB0E9              --Sharp-Flash EPC16
Info: Device 5 silicon ID is 0x8991              --***Intel-Flash EPC16***
Info: Device 7 silicon ID is 0xB0E9              --Sharp-Flash EPC16
Info: Device 10 silicon ID is 0xB0E9             --Sharp-Flash EPC16
Info: Device 12 silicon ID is 0xB0E9             --Sharp-Flash EPC16
Info: Device 14 silicon ID is 0xB0E9             --Sharp-Flash EPC16
Info: Device 16 silicon ID is 0xB0E9             --Sharp-Flash EPC16
Info: Erasing EPC4/8/16 configuration device(s)
Info: Programming device(s)
  • Quartus Programmer: 1x.jam file, full subrack .sof's and .pof's and .jic (CC + RC4 + RC3 + RC2 + RC1[revD] + BC3 + BC2 + BC1 + AC)
Info: Started Programmer operation at Fri Jan 29 12:43:16 2010
Info: Ended Programmer operation at Fri Jan 29 14:39:06 2010
Time = 1h 55m 50s
File size = 22,529 kb
One device failed -> Configuration of RC Rev. D firmware with Serial Flash Loader.
  • Quartus Programmer: 1x.jam generated from .sofs for AC/BC/BC/BC/RC[revD]/RC/RC/CC (full subrack)
Info: Started Programmer operation at Tue Feb 02 13:25:15 2010
Info: Ended Programmer operation at Tue Feb 02 13:27:22 2010
Time = 0h 2m 7s 
File Size = 6.8 Mb
  • Quartus Programmer: 1x.jbc generated from .sofs for AC/BC/BC/BC/RC[revD]/RC/RC/CC (full subrack)
Info: Started Programmer operation at Tue Feb 02 13:43:15 2010
Info: Ended Programmer operation at Tue Feb 02 13:45:22 2010
Time = 0h 2m 7s 
File Size = 5.0 Mb

The following two test were done to demonstrate the differences in programming time when the frequency of TCK is modified, and to demonstrate that a TCK=1MHz is feasible.

  • Ported JAM Player with BB (mce-ubc-1): 1x.jam generated from .pof for CC (CC + RC[revA])
mce@mce-ubc-1:~/jp_25/source$ sudo ./jam.exe -p0x378 -v -f1000 -aprogram scripts/cc_pof_rca.jam 
Jam STAPL Player Version 2.5 (20040526)
>> calibrate_delay: one_ms_delay = 430500
>> jam_set_frequency: TCK frequency = 1000 kHz
>> initialize_jtag_hardware: Checking parallel port permissions..
>> initialize_jtag_hardware: Parallel port 0x378 is open.
Device #3 Silicon ID is 0xB0E9
erasing EPC4/8/16 device(s)...
programming EPC4/8/16 device(s)...
verifying EPC4/8/16 device(s)...
DONE
Exit code = 0... Success
Elapsed time = 09:41:11
  • Ported JAM Player with BB (mce-ubc-1): 1x.jam generated from .pof for CC (CC + RC[revA])
mce@mce-ubc-1:~/jp_25/source$ sudo ./jam.exe -p0x378 -v -f10000 -aprogram scripts/cc_pof_rca.jam 
Jam STAPL Player Version 2.5 (20040526)
>> calibrate_delay: one_ms_delay = 358000
>> jam_set_frequency: TCK frequency = 10000 kHz
>> initialize_jtag_hardware: Checking parallel port permissions..
>> initialize_jtag_hardware: Parallel port 0x378 is open.
Device #3 Silicon ID is 0xB0E9
erasing EPC4/8/16 device(s)...
programming EPC4/8/16 device(s)...
verifying EPC4/8/16 device(s)...
DONE
Exit code = 0... Success
Elapsed time = 00:54:11
  • Ported JAM Player with BB (mce-ubc-1): 1x.jam generated from .pof for CC (CC + RC[revA])
mce@mce-ubc-1:~/jp_25/source$ sudo ./jam.exe -p0x378 -v -f100000 -aprogram scripts/cc_pof_rca.jam 
------------------------------------------
Jam STAPL Player Version 2.5 (20040526)
Copyright (C) 1997-2004 Altera Corporation
------------------------------------------
>> calibrate_delay: one_ms_delay = 374000
>> jam_set_frequency: TCK frequency = 100000 kHz
>> initialize_jtag_hardware: Checking parallel port 0x378 permissions..
>> initialize_jtag_hardware: Parallel port 0x378 is open.
Device #3 Silicon ID is 0xB0E9
erasing EPC4/8/16 device(s)...
programming EPC4/8/16 device(s)...
verifying EPC4/8/16 device(s)...
DONE
Exit code = 0... Success
Elapsed time = 00:11:22
>> close_jtag_hardware: Closing port 0x378..
>> close_jtag_hardware: Parallel port 0x378 is closed.

Fibre Commands

  • Commands for the Programmer
sudo ./jam -u -v -f800000 -aprogram -dDO_VERIFY=0 cc_xfpga_rc_pof.jam        // For Programming EPC16's
sudo ./jam -u -v -f8000000 -aconfigure cc_xfpga_rc_sof.jam                   // For Configuring FPGA's
sudo ./jam -u -v -f8000000 -aread_idcode read_idcode.jam                     // For Querying ID Codes
sudo ./jam -u -v -f8000000 -aconfigure cc_rcd_jic.jam                        // For Programming EPCS64's (Step 1 of 2)
sudo ./jam -u -v -f100000 -aprogram -dDO_VERIFY=0 cc_rcd_jic.jam             // For Programming EPCS64's (Step 2 of 2)

Fibre Configuration Tests

  • Ported JAM Player over Fibre!!! (mce-ubc-1): 1x.jam generated from .sof for RC (CC + RC[revA])
mce@mce-ubc-1:~/jp_25/source$ sudo ./jam.exe -f10000000 -p0x100 -aconfigure scripts/cc_xfpga_rca_sof.jam -v
[sudo] password for mce: 
------------------------------------------
Jam STAPL Player Version 2.5 (20040526)   
Copyright (C) 1997-2004 Altera Corporation
------------------------------------------
>> calibrate_delay: one_ms_delay = 340200
>> jam_set_frequency: TCK frequency = 10000000 kHz
CRC matched: CRC value = 8436
Export: key = "JAM_STATEMENT_BUFFER_SIZE", value = 3088
NOTE "CREATOR" = "QUARTUS II JAM COMPOSER 9.1"
NOTE "DATE" = "2010/02/25"
NOTE "DEVICE" = "EPC16, EP1S30, EPC16"
NOTE "FILE" = "-, rc_ep1s30_v03000100_17jul2006.sof, -"
NOTE "TARGET" = "2"
NOTE "IDCODE" = "0100A0DD, 020040DD, 0100A0DD"
NOTE "USERCODE" = "-, FFFFFFFF, -"
NOTE "CHECKSUM" = "-, 01965C6C, -"
NOTE "SAVE_DATA" = "DEVICE_DATA"
NOTE "SAVE_DATA_VARIABLES" = "V0, A12, A13, A25, A42, A93, A43, A92, A94, A95, A105, A109, A111"
NOTE "STAPL_VERSION" = "JESD71"
NOTE "JAM_VERSION" = "2.0"
NOTE "ALG_VERSION" = "51"
>> rb cc fw_rev = 83886084 (0x5000004)
>> initialize_jtag_hardware: Checking parallel port 0x100 permissions..
>> initialize_jtag_hardware: Parallel port 0x100 is open.
>> initialize_jtag_hardware: JTAG chain enabled = 0x2.
Device #3 IDCODE is 0100A0DD
Device #2 IDCODE is 020040DD
Device #1 IDCODE is 0100A0DD
configuring SRAM device(s)...
DONE
Exit code = 0... Success
Elapsed time = 01:09:04
>> close_jtag_hardware: JTAG chain disabled = 0.
>> close_jtag_hardware: Closing port 0x100..
>> close_jtag_hardware: Parallel port 0x100 is closed.
  • Quartus Programing and Verification = 12 minutes
Info: Started Programmer operation at Tue Apr 13 13:00:22 2010
Info: Device 1 contains JTAG ID code 0x0100A0DD
Info: Device 1 silicon ID is 0xB0E9
Info: Erasing EPC4/8/16 configuration device(s)
Info: Programming device(s)
Info: Performing verification on device(s)
Info: Successfully performed operation(s)
Info: Ended Programmer operation at Tue Apr 13 13:12:07 2010
  • SOF Programming (via Fibre)
    • TCK = 200 kHz: 1:08
    • TCK = 500 kHz: 0:31
    • TCK = 800 kHz: 0:22
    • TCK = 900 kHz: 0:20
    • TCK = 1000 kHz: 0:18
    • TCK = 5000 kHz: 0:08
  • POF Programming (via Fibre)
    • TCK = 200 kHz: 4:35 (-dDO_VERIFY=0)
    • TCK = 500 kHz: 3:53 (-dDO_VERIFY=0)
    • TCK = 800 kHz: 4:02 (-dDO_VERIFY=0)
    • TCK = 900 kHz: FAIL
    • TCK = 1000 kHz: FAIL
    • TCK = 5000 kHz: FAIL
 ------------------------------------------
 >> close_mce(): compression statistics:
    1 bits: 47391 packets.
    8 bits: 1892 packets.
    46 bits: 42 packets.
    49 bits: 40 packets.
    50 bits: 3 packets.
    87 bits: 39 packets.
    88 bits: 1 packets.
    92 bits: 1 packets.
    199 bits: 1 packets.
    896 bits: 24384 packets.
 ------------------------------------------
  • POF Programming (via Fibre with verification)
    • TCK = 200 kHz: 1:30:35 (-dDO_VERIFY=1)
 ------------------------------------------
 >> close_mce(): compression statistics:
    1 bits: 14868399 packets.
    8 bits: 781989 packets.
    46 bits: 43 packets.
    49 bits: 40 packets.
    50 bits: 5 packets.
    87 bits: 39 packets.
    88 bits: 1 packets.
    92 bits: 1 packets.
    115 bits: 1 packets.
    120 bits: 1 packets.
    199 bits: 1 packets.
    896 bits: 24384 packets.
 ------------------------------------------

Timing Information

tpprog = tppulse + Sigma(CyclePtck / ftck) of all devices

where tpprog = Programming time tppulse = Sum of the fixed times to rease, program and verify the EEPROM cells for ony the largest device CyclePtck = Number of tck cycles to program each device ftck = tck frequency

  • There are a variety of timing parameters associated with the JTAG chain. One of the most important is the delay between the falling edge of TCK and the assertion of valid TDO data:

Investigations

  • Changing the TCK frequency. What is the slowest frequency allowable? There is no documented minimum. Tests show that tck = 1000 = 1.3kHz works for read_idcode.jam, cc_pof_rca.jam, and cc_sof_rca.jam
  • Generating .pof's with only the correct page programmed. Does this reduce configuration times?
  • How fast do the Ethernet Blaster, and USB Blaster clock the TCK line? Ethernet Blaster = 8.3MHz (.sof, .pof, .jam) -- the timing differences between these files are associated gaps of differing sizes between the JTAG data packets. USB Blaster = 5.0MHz.
  • Does loading the CPU with a loop with "while /bin/true; do /bin/true; done" affect the programming time? Yes, it extended the execution time of the following command from 55s to 63s:
sudo ./jam.exe -p0x378 -v -f1000000 -aconfigure scripts/cc_sof_rca.jam
  • What is the maximum TCK frequency that we can achieve over the parallel port?
  • Is there a JAM spec for our devices? See the timing section above.
  • What is the minimum/ maximum delay between a falling edge of TCK and when TDO can be sampled? According to numbers quoted above, the minimum delay is 25ns for some devices. However, hardware tests show that a delay of 1 cycle (20ns) works. A delay of 0 cycles (0ns) does not work, and neither does a delay of 100000 cycles (2ms).
wb cc tdo_sample_dly 1       //1 cycle = 20ns

Solutions Considered

Option 1a: Ethernet Blaster

Ethernet Blaster hooked up permanently to each MCE.

  • Pros:
    • Off-the-shelf solution
    • Standard Ethernet interface to each Blaster
    • Can configure all devices (FPGA/CPLD/EPC16/EPCS64) with a wide range of file types (.sof/.pof/.jic/.jbc/.jam)
    • DAS/MAS software independent.
  • Cons:
    • Requires an Ethernet connection for every MCE
    • Ethernet Blasters are not in production anymore. Requires building our own.
    • Electrical connections to MCE's can cause ground loops.
  • To investigate:
    • Is Altera planning to release a new version of the Ethernet Blaster?

Option 1b: USB Blaster

USB Blaster hooked up permanently to each MCE.

  • Pros:
    • Off-the-shelf solution
    • Standard USB interface to each Blaster.
    • Can configure all devices (FPGA/CPLD/EPC16/EPCS64) with a wide range of file types (.sof/.pof/.jic/.jbc/.jam)
    • USB Blasters are widely available.
    • Multiple USB connections are easily made with USB replicators
    • DAS/MAS software independent.
  • Cons:
    • Requires a PC nearby that runs Windows or Linux for Altera's Standalone programmer.
    • Electrical connections to MCE's can cause ground loops.
  • To investigate:
    • Are there optically isolated USB replicators available?
    • How close are PC's to MCE's at all times that reconfiguration is required?

Option 1c: Custom 'UBC' Blaster

Custom hardware that acts as a USB Blaster and is optically isolated from the MCE.

  • Pros:
    • Customizable computer interface to each Blaster (probably USB).
    • Can configure all devices (FPGA/CPLD/EPC16/EPCS64) with a wide range of file types (.sof/.pof/.jic/.jbc/.jam)
    • UBC controls the IP, therefore these devices can be produced and supported indefinitely.
    • Multiple USB connections are easily made with USB replicators
    • Can be designed so that it is maintains the MCE's electrical isolation.
    • DAS/MAS software independent.
  • Cons:
    • Requires hardware development.
    • Requires a PC nearby that runs Windows or Linux for Altera's Standalone programmer.
  • To investigate:
    • Are there optically isolated USB replicators available? If so, they would make this a worse solution than USB Blasters.
    • How close are PC's to MCE's at all times that reconfiguration is required?

Option 2: JRunner on CC

NIOS processor on the Clock Card that runs ported JRunner code and configures devices via JTAG interface. Requires loading a .cdf (chain description file), and a .rbf (raw binary file).

  • Pros:
    • Uses existing fiber-optic connections to the MCE's.
    • MCE's remain electrically isolated.
    • Implementation is purely firmware/ software, thus no hardware design & support issues.
    • No supply issues, because there is no reliance on third-party hardware.
    • Does not require additional peripheral hardware in the form of Blasters or PCs.
    • JRunner code is open-source, ANSI C.
    • DAS/MAS software independent.
  • Cons:
    • Requires porting existing JRunner code for use in NIOS processor.
    • JRunner code will require significant Clock Card resources, and may not fit in the existing firmware design. In this case, specialized firmware would be implemented as a 'Factory' configuration, which we would switch over to for configuring other devices.
    • Can only configure from JRunner with .cdf+.rbf file formats, so new file formats must be created for this configuration method.
    • Can only configure FPGA's (SRAM devices) with .rbf files. The Quartus "Convert Programming File" software cannot generate .rbf files for EPC16's or EPCS64's.
  • To investigate:
    • Check the FPGA resources available on the Clock Card, and compare to estimated resource requirements.
    • How developed are Altera's resources for NIOS implementation?
    • What file formats can be converted to .rbf? This has implications on what devices can be configured via this method.
    • Long configuration times

Links:

Option 3: MicroBlaster on All FPGAs

A NIOS processor on every card that runs ported MicroBlaster code and configures devices via FPP interfaces. Requires .rbf files.

  • Pros:
    • Uses existing fiber-optic connections to the MCE's.
    • MCE's remain electrically isolated.
    • Implementation is purely firmware/ software, thus no hardware design & support issues.
    • No supply issues, because there is no reliance on third-party hardware.
    • Does not require additional peripheral hardware in the form of Blasters or PCs.
    • MicroBlaster code is open-source, ANSI C.
    • DAS/MAS software independent.
    • Does not require .cdf file
  • Cons:
    • Requires porting existing MicroBlaster code for use in NIOS processor. If it is simple, perhaps a NIOS processor is not necessary?
    • MicroBlaster code may require significant resources, and may not fit in existing firmware designs. Factory configuration is only available on the Clock Card.
    • Can only configure from MicroBlaster with .rbf file format, so new file formats must be created for this configuration method.
    • The Quartus "Convert Programming File" software cannot generate .rbf files for Active Serial devices, i.e. Readout Card Rev. D.
    • This method can only configure devices via the FPP interface, which may not be connected.
    • FPP configuration only allows the reconfiguration of FPP flash devices (i.e. EPC16's -- but not FPGA's or EPCS64's)
    • Long configuration times
  • To investigate:
    • Check the FPGA resources available on all cards, and compare to estimated resource requirements.
    • How developed are Altera's resources for NIOS implementation?
    • What file formats can be converted to .rbf? This has implications on what devices can be configured via this method.
    • Are the FPP interfaces connected on very card?

Option 4: JRunner in MAS

Embed JRunner software in MAS, and implement a simple switch in Clock Card firmware for piping configuration data into the JTAG interface.

  • Pros:
    • Uses existing fiber-optic connections to the MCE's.
    • MCE's remain electrically isolated.
    • Implementation is purely firmware/ software, thus no hardware design & support issues.
    • No supply issues, because there is no reliance on third-party hardware.
    • Does not require additional peripheral hardware in the form of Blasters or PCs.
    • JRunner code is open-source, ANSI C.
    • Does not tax existing FPGA resources with either a NIOS processor or code storage.
  • Cons:
    • Requires porting existing JRunner code for use in MAS.
    • Can only configure from JRunner with .cdf+.rbf file format, so new file formats must be created for this configuration method.
    • Can only configure FPGA's (SRAM devices) with .rbf files. The Quartus "Convert Programming File" software cannot generate .rbf files for EPC16's or EPCS64's.
    • DAS/MAS software dependent. Requires additional features to both.
    • Long configuration times
  • To investigate:
    • What file formats can be converted to .rbf? This has implications on what devices can be configured via this method.
    • Do we want to move SCUBA-2 over to MAS? If not, will Gao implement the features that are required in DAS?
    • Does the current fiber bandwidth allow this method?
    • What is the back-end interface that must convert from the output of the JRunner to fiber to JTAG?

Option 5: Jam STAPL Player in MAS

  • Pros:
    • Uses existing fiber-optic connections to the MCE's.
    • MCE's remain electrically isolated.
    • Implementation is purely firmware/ software, thus no hardware design & support issues.
    • No supply issues, because there is no reliance on third-party hardware.
    • Does not require additional peripheral hardware in the form of Blasters or PCs.
    • Jam Player code is open-source, ANSI C.
    • Does not tax existing FPGA resources with either a NIOS processor or code storage.
    • Can configure all devices: FPGA's/ EPC16's/ EPCS64's.
  • Cons:
    • Requires porting existing Jam Player code for use in MAS.
    • Can only configure using .jam or .jbc file formats, so new file formats must be created for this configuration method.
    • DAS/MAS software dependent. Requires additional features to both.
    • Long configuration times
  • To investigate:
    • Do we want to move SCUBA-2 over to MAS? If not, will Gao implement the features that are required in DAS?
    • Does the current fiber bandwidth allow this method?
    • What is the back-end interface that must convert from the output of the Jam Player to fiber to JTAG?

Altera Documentation

  • Altera recommends using Jam STAPL Byte-Code files in embedded applications because they use minimal memory
  • The Jam STAPL Player is an interpreter program that reads and executes a STAPL file. A single STAPL file can perform several functions, such as programming, configuring, verifying, erasing, and blank-checking a programmable device. The Jam STAPL Player has access to the IEEE 1149.1 signals that are used for all instructions based on the IEEE 1149.1 interface. In addition, the Jam STAPL Player is capable of processing the user-specified actions and procedures in a STAPL file.
  • The quartus_jli command-line executable has the same functionality as the Jam STAPL Player plus two additional capabilities. It provides command-line control of the Quartus II software from the UNIX or DOS prompt and supports all programming hardware available in the Quartus II software version 6.0 or later.
  • The change from Sharp to Intel flash in EPC16 devices.
    • "This white paper documents the differences between the Micron or Sharp flash memory against the Intel flash memory. This document helps designers to perform the migration from current Micron-based EPC4 device or Sharp-based EPC8 and EPC16 devices to the new Intel flash memory-based EPC4, EPC8, and EPC16 devices."
  • AN370: AN 370: Using the Serial FlashLoader with the Quartus II Software
    • In version 9.0 and onwards of the Quartus II software, the enhanced mode of the SFL solution is introduced. This allows faster EPCS programming time with the following advantages:
    • Enhanced SFL solution correctly interprets extra padding bits introduced by third programmer tool to ensure successful EPCS programming with SFL solution.
    • Enhanced SFL allows conversion from JTAG Indirect Configuration (.jic) to Jam™ STAPL (.jam), JAM Byte-Code File (.jbc) or Serial Vector Format File (.svf) for multiple devices in JTAG chain in which only one device uses the SFL solution.
    • Enhanced SFL allows conversion from .jic to .jam, .jbc, or .svf file for multiple devices in JTAG chain in which two or more devices uses the SFL solution.