Newer
Older
using namespace hxcomm::vx;
using namespace hxcomm::vx::instruction;
using Data = instruction::to_fpga_jtag::Data;
using Ins = instruction::to_fpga_jtag::Ins;
/**
* Example routine to reset chip and read JTAG-ID.
*/
template <typename Stream>
void reset_and_id_readout(Stream& stream)
stream.add(UTMessageToFPGA<system::Reset>(system::Reset::Payload(true)));
stream.add(UTMessageToFPGA<timing::Setup>());
stream.add(UTMessageToFPGA<timing::WaitUntil>(timing::WaitUntil::Payload(10)));
stream.add(UTMessageToFPGA<system::Reset>(system::Reset::Payload(false)));
stream.add(UTMessageToFPGA<timing::WaitUntil>(timing::WaitUntil::Payload(100)));
stream.add(UTMessageToFPGA<to_fpga_jtag::Init>());
stream.add(UTMessageToFPGA<Ins>(Ins::PLL_TARGET_REG));
stream.add(UTMessageToFPGA<Data>(Data::Payload(true, Data::Payload::NumBits(3), 1)));
stream.add(UTMessageToFPGA<Ins>(Ins::SHIFT_PLL));
stream.add(UTMessageToFPGA<Data>(Data::Payload(true, Data::Payload::NumBits(32), 0xC0C3F200)));
stream.add(UTMessageToFPGA<Ins>(Ins::PLL_TARGET_REG));
stream.add(UTMessageToFPGA<Data>(Data::Payload(true, Data::Payload::NumBits(3), 3)));
stream.add(UTMessageToFPGA<Ins>(Ins::SHIFT_PLL));
stream.add(UTMessageToFPGA<Data>(Data::Payload(true, Data::Payload::NumBits(32), 0xC0C3F200)));
stream.add(UTMessageToFPGA<Ins>(Ins::IDCODE));
stream.add(UTMessageToFPGA<Data>(Data::Payload(true, Data::Payload::NumBits(32), 0)));
stream.add(UTMessageToFPGA<timing::WaitUntil>(timing::WaitUntil::Payload(10000)));
stream.add(UTMessageToFPGA<system::Loopback>(system::Loopback::halt));
for (auto const message : stream.receive_all()) {
std::visit([&message](auto m) { std::cout << m << std::endl; }, message);