colognechip integration: apply review remarks
* add missing #include <string>
* add comment to part.hpp why highest nibble should be kept
* remove _reverseOrder variable from colognechipCfgParser.{hpp,cpp}
* rename cfgDone() to to a more meaningfull waitCfgDone()
This commit is contained in:
parent
dd0d668d96
commit
e252e713dd
|
|
@ -84,7 +84,7 @@ void CologneChip::reset()
|
||||||
* Obtain CFG_DONE and ~CFG_FAILED signals. Configuration is successfull iff
|
* Obtain CFG_DONE and ~CFG_FAILED signals. Configuration is successfull iff
|
||||||
* CFG_DONE=true and ~CFG_FAILED=false.
|
* CFG_DONE=true and ~CFG_FAILED=false.
|
||||||
*/
|
*/
|
||||||
bool CologneChip::cfgDone()
|
bool CologneChip::waitCfgDone()
|
||||||
{
|
{
|
||||||
uint16_t status = 0;
|
uint16_t status = 0;
|
||||||
if (_spi) {
|
if (_spi) {
|
||||||
|
|
@ -152,7 +152,7 @@ void CologneChip::program(unsigned int offset)
|
||||||
if (_file_extension == "bit") {
|
if (_file_extension == "bit") {
|
||||||
cfg = new RawParser(_filename, false);
|
cfg = new RawParser(_filename, false);
|
||||||
} else if (_file_extension == "cfg") {
|
} else if (_file_extension == "cfg") {
|
||||||
cfg = new CologneChipCfgParser(_filename, false);
|
cfg = new CologneChipCfgParser(_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg->parse();
|
cfg->parse();
|
||||||
|
|
@ -197,7 +197,7 @@ void CologneChip::programSPI_sram(uint8_t *data, int length)
|
||||||
do {
|
do {
|
||||||
timeout--;
|
timeout--;
|
||||||
usleep(SLEEP_US);
|
usleep(SLEEP_US);
|
||||||
} while (!cfgDone() && timeout > 0);
|
} while (!waitCfgDone() && timeout > 0);
|
||||||
if (timeout == 0) {
|
if (timeout == 0) {
|
||||||
printError("FAIL");
|
printError("FAIL");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -240,7 +240,7 @@ void CologneChip::programSPI_flash(unsigned int offset, uint8_t *data, int lengt
|
||||||
do {
|
do {
|
||||||
timeout--;
|
timeout--;
|
||||||
usleep(SLEEP_US);
|
usleep(SLEEP_US);
|
||||||
} while (!cfgDone() && timeout > 0);
|
} while (!waitCfgDone() && timeout > 0);
|
||||||
if (timeout == 0) {
|
if (timeout == 0) {
|
||||||
printError("FAIL");
|
printError("FAIL");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -288,7 +288,7 @@ void CologneChip::programJTAG_sram(uint8_t *data, int length)
|
||||||
do {
|
do {
|
||||||
timeout--;
|
timeout--;
|
||||||
usleep(SLEEP_US);
|
usleep(SLEEP_US);
|
||||||
} while (!cfgDone() && timeout > 0);
|
} while (!waitCfgDone() && timeout > 0);
|
||||||
if (timeout == 0) {
|
if (timeout == 0) {
|
||||||
printError("FAIL");
|
printError("FAIL");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "device.hpp"
|
#include "device.hpp"
|
||||||
#include "jtag.hpp"
|
#include "jtag.hpp"
|
||||||
|
|
@ -31,7 +32,7 @@ class CologneChip: public Device, SPIInterface {
|
||||||
bool verify, int8_t verbose);
|
bool verify, int8_t verbose);
|
||||||
~CologneChip() {}
|
~CologneChip() {}
|
||||||
|
|
||||||
bool cfgDone();
|
bool waitCfgDone();
|
||||||
bool dumpFlash(const std::string &filename, uint32_t base_addr, uint32_t len);
|
bool dumpFlash(const std::string &filename, uint32_t base_addr, uint32_t len);
|
||||||
void program(unsigned int offset = 0) override;
|
void program(unsigned int offset = 0) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
#include "colognechipCfgParser.hpp"
|
#include "colognechipCfgParser.hpp"
|
||||||
|
|
||||||
CologneChipCfgParser::CologneChipCfgParser(const std::string &filename, bool reverseOrder):
|
CologneChipCfgParser::CologneChipCfgParser(const std::string &filename):
|
||||||
ConfigBitstreamParser(filename, ConfigBitstreamParser::ASCII_MODE,
|
ConfigBitstreamParser(filename, ConfigBitstreamParser::ASCII_MODE,
|
||||||
false), _reverseOrder(reverseOrder)
|
false)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
int CologneChipCfgParser::parse()
|
int CologneChipCfgParser::parse()
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,9 @@
|
||||||
|
|
||||||
class CologneChipCfgParser: public ConfigBitstreamParser {
|
class CologneChipCfgParser: public ConfigBitstreamParser {
|
||||||
public:
|
public:
|
||||||
CologneChipCfgParser(const std::string &filename, bool reverseOrder);
|
CologneChipCfgParser(const std::string &filename);
|
||||||
|
|
||||||
int parse() override;
|
int parse() override;
|
||||||
|
|
||||||
private:
|
|
||||||
bool _reverseOrder;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SRC_COLOGNECHIPCFGPARSER_HPP_
|
#endif // SRC_COLOGNECHIPCFGPARSER_HPP_
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ static std::map <int, fpga_model> fpga_list = {
|
||||||
{0x0300181b, {"Gowin", "GW1NS", "GW1NS-2C", 8}},
|
{0x0300181b, {"Gowin", "GW1NS", "GW1NS-2C", 8}},
|
||||||
{0x0100981b, {"Gowin", "GW1NSR", "GW1NSR-4C", 8}},
|
{0x0100981b, {"Gowin", "GW1NSR", "GW1NSR-4C", 8}},
|
||||||
|
|
||||||
|
/* keep highest nibble to prevent confusion with Efinix T4/T8 IDCODE */
|
||||||
{0x20000001, {"colognechip", "GateMate Series", "GM1Ax", 6}},
|
{0x20000001, {"colognechip", "GateMate Series", "GM1Ax", 6}},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue