[SOLVED] Programming FPGA via jtag

Reading FPGA via jtag is posible in my matrix voice standalone, but no writing… It seems that DONE_2 signal is not ok…

What’s about wiring of
PIN P13 (DONE_2)

Is it posible to give those pins a well controlled signal?

Havent’t found a schematic, so i may ask…

Hi @rogle,

Are you trying to program the FPGA using JTAG from another board?
Can you explain in more detail what are you trying to achieve?



my goal far away is something like a guitar tuner for human voice… MATRIX Voice is welcome with enough microphones as standalone…

Just now I’ve some experience with other (cheap) boards like LX9, Espier, pldkit or mimas. In most cases jtag will be ok for transfer of file program.bit into fpga or storage attached. So I’ve thought transfering my experience to matrix voice. In past I used ISE / Impact for spartan 6.

Programming FPGA with xc3sprog is ok and works, but programming is lost after power down…

Connecting to jtag works for reading, but there is no writing posible… I’ve read something
and think that some pins are connected unusually.

I’m ready for more questions.

Thanks lot R.

Hello @rogle,

MATRIX Voice has flash connected to the FPGA, so you could save your own firmware there.

You could try with:

1- Locate the boundary_scan bit file. It is here: /usr/share/matrixlabs/matrixio-devices/blob/bscan_spi_s6lx9_ftg256.bit

2- Use xc3sprog to flash it into the FPGA:

sudo xc3sprog -c matrix_voice /usr/share/matrixlabs/matrixio-devices/blob/bscan_spi_s6lx9_ftg256.bit

3- Use xc3sprog to save into the flash memory your own bit file:

sudo  xc3sprog -c matrix_voice -I BIT_FILE
XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 774 $ OS: Linux
Free software: If you contribute nothing, expect nothing!
Feedback on success/failure/enhancement requests:
Check Sourceforge for updates:

JEDEC: c2 20 0x17 0xc2
Found Macronix MX25L Device, Device ID 0x2017
256 bytes/page, 262144 pages = 67108864 bytes total 
Verify: Success!

4 - Reset the FPGA with:

  echo 26 > /sys/class/gpio/export 2>/dev/null
  echo out > /sys/class/gpio/gpio26/direction
  echo 1 > /sys/class/gpio/gpio26/value
  echo 0 > /sys/class/gpio/gpio26/value
  echo 1 > /sys/class/gpio/gpio26/value 

5- Now you save your bit file into the Flash memory. It allows the FPGA at each power on cycle loads the bit file.


Optional: Disable matrixio-devices-firmware.service . It checks the firmware version and restores the firmware from MATRIXLabs. It could interfere with your test.

sudo systemctl disable matrixio-devices-firmware.service

Let me know if you have any trouble or doubt about.


Kevin Patino

Hello @kevindpatino,

You are great or something more! All happens as expected!

Flash will be written in step 3?

Reset FPGA is a good idea. Was it mentioned in a tutorat earlier?

JTAG will now work for programming FPGA by impact and a xilinx cable. First I’ve taken +3.3V from RPI-connector PIN 17: this was not good, because the pin is powered down in standalone. PIN 22 from ext GPIO works well (good idea with holes below connector!).

JTAG doesn’t work just now for programming M25-Flash: the chip may be to new for ISE.

Great work, thanks lot


Thanks lot for giving hints…

JTAG will work for programming via JTAG as mentioned before. Take +3.3V from PIN 19 of “ext GPIO” (22 was written wrong).

JTAG also works for flash with xilinx impact: use N25Q64 for prom,
taken from Application Note AN0245V2 from macronix

MATRIX Voice is a nice board, fun begins, thanks lot