CPLD: Add XC2C64A method to init from EEPROM contents.

This commit is contained in:
Jared Boone 2016-07-18 11:31:21 -07:00
parent c0b9761fe5
commit 4b7fa9f411
2 changed files with 38 additions and 0 deletions

View File

@ -116,6 +116,23 @@ bool XC2C64A::verify_eeprom(const verify_blocks_t& blocks) {
return !error; return !error;
} }
void XC2C64A::init_from_eeprom() {
tap.set_repeat(0);
tap.set_end_ir(state_t::run_test_idle);
tap.set_end_dr(state_t::run_test_idle);
reset();
enable();
discharge();
init();
disable();
bypass();
tap.state(state_t::test_logic_reset);
}
bool XC2C64A::shift_ir(const instruction_t instruction) { bool XC2C64A::shift_ir(const instruction_t instruction) {
const ir_t ir_buffer = toUType(instruction); const ir_t ir_buffer = toUType(instruction);
const jtag::tap::bits_t bits { &ir_buffer, ir_length }; const jtag::tap::bits_t bits { &ir_buffer, ir_length };
@ -132,6 +149,23 @@ void XC2C64A::enable() {
tap.wait(state_t::run_test_idle, state_t::run_test_idle, 800); tap.wait(state_t::run_test_idle, state_t::run_test_idle, 800);
} }
void XC2C64A::enable_otf() {
shift_ir(instruction_t::ISC_ENABLE_OTF);
}
void XC2C64A::discharge() {
shift_ir(instruction_t::ISC_INIT);
tap.wait(state_t::run_test_idle, state_t::run_test_idle, 20);
}
void XC2C64A::init() {
tap.set_end_ir(state_t::update_ir);
shift_ir(instruction_t::ISC_INIT);
tap.set_end_ir(state_t::run_test_idle);
tap.state(state_t::capture_dr);
tap.wait(state_t::run_test_idle, state_t::run_test_idle, 800);
}
void XC2C64A::disable() { void XC2C64A::disable() {
shift_ir(instruction_t::ISC_DISABLE); shift_ir(instruction_t::ISC_DISABLE);
tap.wait(state_t::run_test_idle, state_t::run_test_idle, 100); tap.wait(state_t::run_test_idle, state_t::run_test_idle, 100);

View File

@ -67,6 +67,7 @@ public:
bool verify_sram(const verify_blocks_t& blocks); bool verify_sram(const verify_blocks_t& blocks);
bool verify_eeprom(const verify_blocks_t& blocks); bool verify_eeprom(const verify_blocks_t& blocks);
void init_from_eeprom();
private: private:
static constexpr size_t idcode_length = 32; static constexpr size_t idcode_length = 32;
@ -112,6 +113,9 @@ private:
void reset(); void reset();
void enable(); void enable();
void enable_otf();
void discharge();
void init();
void disable(); void disable();
bool bypass(); bool bypass();
}; };