This week I try to configure the FPGA using PIC32 with slave serial method.
C array bit file
First I convert the binary file of FPGA into C array (Hex format) so that I could use SPI 8bit or 16bit to send the hex data bits by bits into FPGA. Using linux terminal the below command was used to convert bit file.
xdd -i your.bit
Besides that, ‘Hexdump’ can also be used to convert bit file to hex format but additional command is necessary. Just in case the Hex converted line is too long, terminal console must be set to ‘scroll -> unlimited’ from ‘menu -> preference -> scroll’ or using the command ‘|less’
configuring fpga spartan 6
Based on the ‘serial configuration data timing’ figure 2-4 from ug380 I will know whether the fpga has been programmed successfully by reading on ‘Init_B’ pin. Therefore, using Harmony I initialize RD3 outputs HIGH (connected to program_b) and read the current state of ‘init_b’, however to my surprise ‘init_b’ is forever low. From the document, ‘init_b’ should be always high and only low if ‘program_b’ was deasserted. I check my design again to identify any weird/wrong connection made (referring to Figure 2-3) but could not find any. Next, I try to search online/forums for similar issues, surprisingly no known/effective solution was proposed. The only thing I understand is that most forums suggested to use ‘Impact’ with JTAG interface to configure the FPGA first, for it consist of many error log which help user to better understand the condition of FPGA.
trying to figure out why init_b always low
I try to search for other alternative solution to avoid using JTAG, because I have zero knowledge in FPGA syntax. Worst comes to worst if no solution, then I would use JTAG. Referring to the document, I make sure that I write the correct code eg; ‘FPGA suspend -> low’, ‘HSWAPEN -> low’ use a multimeter to read the voltage level on VCCAUX and VCCINT (should be 2.5v and 1.2V), and yes the voltage level is correct. Continue trying different PIC32 initialization to make ‘init_b’ low.