77
88#include < string.h>
99
10+ #include < map>
1011#include < string>
1112
1213#include " common.hpp"
13- #include " jtag.hpp"
1414#include " device.hpp"
1515#include " epcq.hpp"
16+ #include " jtag.hpp"
1617#include " progressBar.hpp"
1718#include " rawParser.hpp"
18- #include " pofParser.hpp"
1919#if defined (_WIN64) || defined (_WIN32)
2020#include " pathHelper.hpp"
2121#endif
22+ #include " pofParser.hpp"
2223
2324#define IDCODE 6
2425#define USER0 0x0C
@@ -49,9 +50,9 @@ Altera::Altera(Jtag *jtag, const std::string &filename,
4950 _mode = Device::MEM_MODE;
5051 else
5152 _mode = Device::SPI_MODE;
52- } else if (_file_extension == " pof" ) { // MAX10
53+ } else if (_file_extension == " pof" ) { // MAX10
5354 _mode = Device::FLASH_MODE;
54- } else { // unknown type -> sanity check
55+ } else { // unknown type -> sanity check
5556 if (prg_type == Device::WR_SRAM) {
5657 printError (" file has an unknown type:" );
5758 printError (" \t please use rbf or svf file" );
@@ -71,9 +72,8 @@ Altera::Altera(Jtag *jtag, const std::string &filename,
7172 if (family == " MAX 10" ) {
7273 _fpga_family = MAX10_FAMILY;
7374 } else {
74- _fpga_family = CYCLONE_MISC; // FIXME
75+ _fpga_family = CYCLONE_MISC; // FIXME
7576 }
76-
7777}
7878
7979Altera::~Altera ()
@@ -303,25 +303,25 @@ uint32_t Altera::idCode()
303303#define MAX10_BYPASS {0xFF , 0x03 }
304304
305305typedef struct {
306- uint32_t check_addr0; // something to check before sequence
306+ uint32_t check_addr0; // something to check before sequence
307307 uint32_t dsm_addr;
308308 uint32_t dsm_len; // 32bits
309- uint32_t ufm_addr; // UFM1 addr
309+ uint32_t ufm_addr; // UFM1 addr
310310 uint32_t ufm_len[2 ];
311- uint32_t cfm_addr; // CFM2 addr
311+ uint32_t cfm_addr; // CFM2 addr
312312 uint32_t cfm_len[3 ];
313313 uint32_t done_bit_addr;
314314 uint32_t pgm_success_addr;
315315} max10_mem_t ;
316316
317317static const std::map<uint32_t , max10_mem_t > max10_memory_map = {
318318 {0x031820dd , {
319- 0x80005 , // check_addr0
320- 0x0000 , 512 , // DSM
321- 0x0200 , {4096 , 4096 }, // UFM
322- 0x2200 , {35840 , 14848 , 20992 }, // CFM
323- 0x0009 , // done bit
324- 0x000b } // program success addr
319+ 0x80005 , // check_addr0
320+ 0x0000 , 512 , // DSM
321+ 0x0200 , {4096 , 4096 }, // UFM
322+ 0x2200 , {35840 , 14848 , 20992 }, // CFM
323+ 0x0009 , // done bit
324+ 0x000b } // program success addr
325325 },
326326};
327327
@@ -384,20 +384,20 @@ void Altera::max10_program()
384384 * its more easy to start with POF's CFM section and uses pointer based on prev ptr and section size
385385 */
386386
387- uint8_t *ufm_data[2 ], *cfm_data[3 ]; // memory pointers (2 for UFM, 3 for CFM)
387+ uint8_t *ufm_data[2 ], *cfm_data[3 ]; // memory pointers (2 for UFM, 3 for CFM)
388388
389389 // UFM Mapping
390390 ufm_data[0 ] = _bit.getData (" UFM" );
391- ufm_data[1 ] = &ufm_data[0 ][mem.ufm_len [0 ] * 4 ]; // Just after UFM0 (but size may differs
391+ ufm_data[1 ] = &ufm_data[0 ][mem.ufm_len [0 ] * 4 ]; // Just after UFM0 (but size may differs
392392
393393 // CFM Mapping
394- cfm_data[2 ] = &ufm_data[1 ][mem.ufm_len [1 ] * 4 ]; // First CFM section in FPGA internal flash
395- cfm_data[1 ] = &cfm_data[2 ][mem.cfm_len [2 ] * 4 ]; // Second CFM section but just after CFM2
396- cfm_data[0 ] = &cfm_data[1 ][mem.cfm_len [1 ] * 4 ]; // last CFM section but just after CFM1
394+ cfm_data[2 ] = &ufm_data[1 ][mem.ufm_len [1 ] * 4 ]; // First CFM section in FPGA internal flash
395+ cfm_data[1 ] = &cfm_data[2 ][mem.cfm_len [2 ] * 4 ]; // Second CFM section but just after CFM2
396+ cfm_data[0 ] = &cfm_data[1 ][mem.cfm_len [1 ] * 4 ]; // last CFM section but just after CFM1
397397
398398 // DSM Mapping
399399 const uint8_t *dsm_data = _bit.getData (" ICB" );
400- const int dsm_len = _bit.getLength (" ICB" ) / 32 ; // getLength (bits) dsm_len in 32bits word
400+ const int dsm_len = _bit.getLength (" ICB" ) / 32 ; // getLength (bits) dsm_len in 32bits word
401401
402402
403403 // Start!
@@ -479,11 +479,11 @@ void Altera::max10_flow_erase()
479479
480480void Altera::writeXFM (const uint8_t *cfg_data, uint32_t base_addr, uint32_t offset, uint32_t len)
481481{
482- uint8_t *ptr = (uint8_t *)cfg_data + offset; // FIXME: maybe adding offset here ?
482+ uint8_t *ptr = (uint8_t *)cfg_data + offset; // FIXME: maybe adding offset here ?
483483 const uint8_t isc_program[2 ] = MAX10_ISC_PROGRAM;
484484
485485 /* precompute some delays required during loop */
486- const uint32_t isc_program2_delay = 320000 / _clk_period; // ns must be 350us
486+ const uint32_t isc_program2_delay = 320000 / _clk_period; // ns must be 350us
487487
488488 ProgressBar progress (" Write Flash" , len, 50 , _quiet);
489489 for (uint32_t i = 0 ; i < len; i+=512 ) {
@@ -523,9 +523,7 @@ void Altera::writeXFM(const uint8_t *cfg_data, uint32_t base_addr, uint32_t offs
523523uint32_t Altera::verifyxFM (const uint8_t *cfg_data, uint32_t base_addr, uint32_t offset,
524524 uint32_t len)
525525{
526- uint8_t *ptr = (uint8_t *)cfg_data + offset; // avoid passing offset ?
527-
528- // const uint32_t isc_read_delay = 5120 / _clk_period;
526+ uint8_t *ptr = (uint8_t *)cfg_data + offset; // avoid passing offset ?
529527
530528 const uint8_t read_cmd[2 ] = MAX10_ISC_READ;
531529 uint32_t errors = 0 ;
@@ -567,7 +565,7 @@ uint32_t Altera::verifyxFM(const uint8_t *cfg_data, uint32_t base_addr, uint32_t
567565
568566void Altera::max_10_flow_enable ()
569567{
570- const int enable_delay = 350000120 / _clk_period; // must be 1 tck
568+ const int enable_delay = 350000120 / _clk_period; // must be 1 tck
571569 const uint8_t cmd[2 ] = MAX10_ISC_ENABLE;
572570
573571 _jtag->shiftIR ((unsigned char *)cmd, NULL , IRLENGTH);
@@ -577,8 +575,8 @@ void Altera::max_10_flow_enable()
577575
578576void Altera::max_10_flow_disable ()
579577{
580- // ISC_DISABLE WAIT 100.0e-3)
581- // BYPASS WAIT 305.0e-6
578+ // ISC_DISABLE WAIT 100.0e-3)
579+ // BYPASS WAIT 305.0e-6
582580 const int disable_len = (1e9 * 350e-3 ) / _clk_period;
583581 const int bypass_len = (3 + (1e9 * 1e-3 ) / _clk_period);
584582 const uint8_t cmd0[2 ] = MAX10_ISC_DISABLE;
@@ -615,7 +613,7 @@ void Altera::max10_dsm_program(const uint8_t *dsm_data, const uint32_t dsm_len)
615613 _jtag->set_state (Jtag::RUN_TEST_IDLE);
616614 _jtag->toggleClk (program_del);
617615 _jtag->shiftDR (dat, NULL , 32 , Jtag::RUN_TEST_IDLE);
618- _jtag->toggleClk (write_del); // 305.0e-6
616+ _jtag->toggleClk (write_del); // 305.0e-6
619617 }
620618 }
621619}
@@ -625,8 +623,8 @@ bool Altera::max10_dsm_verify()
625623 const uint32_t dsm_delay = 5120 / _clk_period;
626624 const uint8_t cmd[2 ] = MAX10_DSM_VERIFY;
627625
628- const uint8_t tx = 0x00 ; // 1 in bsdl, 0 in svf
629- uint8_t rx= 0 ;
626+ const uint8_t tx = 0x00 ; // 1 in bsdl, 0 in svf
627+ uint8_t rx = 0 ;
630628
631629 _jtag->shiftIR ((unsigned char *)cmd, NULL , IRLENGTH);
632630 _jtag->set_state (Jtag::RUN_TEST_IDLE);
@@ -649,7 +647,6 @@ void Altera::max10_addr_shift(uint32_t addr)
649647
650648 uint8_t addr_arr[4 ];
651649 word_to_array (base_addr, addr_arr);
652- // printf("%08x %08x\n", addr, base_addr);
653650
654651 /* FIXME/TODO:
655652 * 1. in bsdl file no delay between IR and DR
@@ -659,49 +656,49 @@ void Altera::max10_addr_shift(uint32_t addr)
659656 */
660657 _jtag->shiftIR ((unsigned char *)cmd, NULL , IRLENGTH, Jtag::PAUSE_IR);
661658 _jtag->set_state (Jtag::RUN_TEST_IDLE);
662- _jtag->toggleClk (5120 / _clk_period); // fine delay ?
659+ _jtag->toggleClk (5120 / _clk_period); // fine delay ?
663660 _jtag->shiftDR (addr_arr, NULL , 23 , Jtag::RUN_TEST_IDLE);
664661}
665662
666663void Altera::max10_dsm_program_success (const uint32_t pgm_success_addr)
667664{
668- const uint32_t prog_len = 5120 / _clk_period; // ??
669- const uint32_t prog2_len = 320000 / _clk_period; // ??
670- //
665+ const uint32_t prog_len = 5120 / _clk_period; // ??
666+ const uint32_t prog2_len = 320000 / _clk_period; // ??
667+
671668 const uint8_t cmd[2 ] = MAX10_DSM_ICB_PROGRAM;
672669
673670 uint8_t magic[4 ];
674- word_to_array (0x6C48A50F , magic); // FIXME: uses define instead
671+ word_to_array (0x6C48A50F , magic); // FIXME: uses define instead
675672
676673 max10_addr_shift (pgm_success_addr);
677674
678675 /* Send 'Magic' code */
679676 _jtag->shiftIR ((unsigned char *)cmd, NULL , IRLENGTH, Jtag::PAUSE_IR);
680677 _jtag->set_state (Jtag::RUN_TEST_IDLE);
681- _jtag->toggleClk (prog_len); // fine delay ?
678+ _jtag->toggleClk (prog_len); // fine delay ?
682679 _jtag->shiftDR (magic, NULL , 32 , Jtag::RUN_TEST_IDLE);
683- _jtag->toggleClk (prog2_len); // must wait 305.0e-6
680+ _jtag->toggleClk (prog2_len); // must wait 305.0e-6
684681}
685682
686683void Altera::max10_flow_program_donebit (const uint32_t done_bit_addr)
687684{
688- const uint32_t addr_shift_delay = 5120 / _clk_period; // ??
689- const uint32_t icb_program_delay = 320000 / _clk_period; // ??
685+ const uint32_t addr_shift_delay = 5120 / _clk_period; // ??
686+ const uint32_t icb_program_delay = 320000 / _clk_period; // ??
690687
691688 uint8_t cmd[2 ] = MAX10_DSM_ICB_PROGRAM;
692689
693690 uint8_t magic[4 ];
694- word_to_array (0x6C48A50F , magic); // FIXME: uses define instead
691+ word_to_array (0x6C48A50F , magic); // FIXME: uses define instead
695692
696693 /* Send target address */
697694 max10_addr_shift (done_bit_addr);
698695
699696 /* Send 'Magic' code */
700697 _jtag->shiftIR (cmd, NULL , IRLENGTH, Jtag::PAUSE_IR);
701698 _jtag->set_state (Jtag::RUN_TEST_IDLE);
702- _jtag->toggleClk (addr_shift_delay); // fine delay ?
699+ _jtag->toggleClk (addr_shift_delay); // fine delay ?
703700 _jtag->shiftDR (magic, NULL , 32 , Jtag::RUN_TEST_IDLE);
704- _jtag->toggleClk (icb_program_delay); // must wait 305.0e-6
701+ _jtag->toggleClk (icb_program_delay); // must wait 305.0e-6
705702}
706703
707704/* SPI interface */
0 commit comments