Skip to content

Commit

Permalink
Merge pull request f4pga#1176 from antmicro/bitstream-gen-fix
Browse files Browse the repository at this point in the history
bitstream_writer: fix 7 series and US+ headers
  • Loading branch information
kgugala committed Dec 13, 2019
2 parents cc9e00d + 3acd1e9 commit b29742b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 18 deletions.
9 changes: 7 additions & 2 deletions lib/xilinx/bitstream_writer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ typename BitstreamWriter<Spartan6>::header_t BitstreamWriter<Spartan6>::header_{
// Per UG470 pg 80: Bus Width Auto Detection
template <>
typename BitstreamWriter<Series7>::header_t BitstreamWriter<Series7>::header_{
0xFFFFFFFF, 0x000000BB, 0x11220044, 0xFFFFFFFF, 0xFFFFFFFF, 0xAA995566};
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000BB, 0x11220044,
0xFFFFFFFF, 0xFFFFFFFF, 0xAA995566};

template <>
typename BitstreamWriter<UltraScale>::header_t
Expand All @@ -26,7 +28,10 @@ typename BitstreamWriter<UltraScale>::header_t
template <>
typename BitstreamWriter<UltraScalePlus>::header_t
BitstreamWriter<UltraScalePlus>::header_{
0xFFFFFFFF, 0x000000BB, 0x11220044, 0xFFFFFFFF, 0xFFFFFFFF, 0xAA995566};
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000BB, 0x11220044,
0xFFFFFFFF, 0xFFFFFFFF, 0xAA995566};

uint32_t packet2header(
const ConfigurationPacket<Spartan6ConfigurationRegister>& packet) {
Expand Down
40 changes: 24 additions & 16 deletions lib/xilinx/tests/xc7series/bitstream_writer_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,10 @@ TEST(BitstreamWriterTest, WriteHeader) {
std::vector<uint32_t> words(writer.begin(), writer.end());

// Per UG470 pg 80: Bus Width Auto Detection
std::vector<uint32_t> ref_header{0xFFFFFFFF, 0x000000BB, 0x11220044,
0xFFFFFFFF, 0xFFFFFFFF, 0xAA995566};
std::vector<uint32_t> ref_header{
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000BB, 0x11220044,
0xFFFFFFFF, 0xFFFFFFFF, 0xAA995566};
EXPECT_EQ(words, ref_header);

// dump_packets(writer);
Expand All @@ -146,11 +148,13 @@ TEST(BitstreamWriterTest, WriteType0) {
BitstreamWriter<Series7> writer(packets);
// dump_packets(writer, false);
std::vector<uint32_t> words(writer.begin(), writer.end());
std::vector<uint32_t> ref{// Bus width + sync
0x0FFFFFFFF, 0x0000000BB, 0x011220044,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0AA995566,
// Type 0
0x00000000};
std::vector<uint32_t> ref{
// Bus width + sync
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0000000BB, 0x011220044,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0AA995566,
// Type 0
0x00000000};
EXPECT_EQ(words, ref);
}
TEST(BitstreamWriterTest, WriteType1) {
Expand All @@ -160,11 +164,13 @@ TEST(BitstreamWriterTest, WriteType1) {
BitstreamWriter<Series7> writer(packets);
// dump_packets(writer, false);
std::vector<uint32_t> words(writer.begin(), writer.end());
std::vector<uint32_t> ref{// Bus width + sync
0x0FFFFFFFF, 0x0000000BB, 0x011220044,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0AA995566,
// Type 1
0x030006002, 0x0000000AA, 0x0000000BB};
std::vector<uint32_t> ref{
// Bus width + sync
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0000000BB, 0x011220044,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0AA995566,
// Type 1
0x030006002, 0x0000000AA, 0x0000000BB};
EXPECT_EQ(words, ref);
}

Expand All @@ -177,8 +183,9 @@ TEST(BitstreamWriterTest, WriteType2) {
std::vector<uint32_t> words(writer.begin(), writer.end());
std::vector<uint32_t> ref{
// Bus width + sync
0x0FFFFFFFF, 0x0000000BB, 0x011220044, 0x0FFFFFFFF, 0x0FFFFFFFF,
0x0AA995566,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0000000BB, 0x011220044,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0AA995566,
// Type 1 + type 2 header
0x030006000, 0x04800000C, 0x000000001, 0x000000002, 0x000000003,
0x000000004, 0x000000005, 0x000000006, 0x000000007, 0x000000008,
Expand All @@ -198,8 +205,9 @@ TEST(BitstreamWriterTest, WriteMulti) {
std::vector<uint32_t> words(writer.begin(), writer.end());
std::vector<uint32_t> ref{
// Bus width + sync
0x0FFFFFFFF, 0x0000000BB, 0x011220044, 0x0FFFFFFFF, 0x0FFFFFFFF,
0x0AA995566,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0FFFFFFFF, 0x0000000BB, 0x011220044,
0x0FFFFFFFF, 0x0FFFFFFFF, 0x0AA995566,
// Type1
0x030006002, 0x0000000AA, 0x0000000BB,
// Type1
Expand Down

0 comments on commit b29742b

Please sign in to comment.