[VTA] Does VTA currently work with 1-bit weights?

Hey everyone,
I am currently playing with VTA on the ZedBoard and it is so far working very well.

Now, I have a problem with 1-bit weights. I use the default PYNQ configuration with LOG_ACC_BUFF_SIZE changed to 15 and LOG_WGT_WIDTH to 0.
With this configuration, I get the following error:
include/tvm/expr.h:62: Check failed: data_bits % 8 == 0U (1 vs. 0) Need to load/store by multiple of bytes
when I run the matrix_multiply.py from the VTA tutorial.

I do not understand the error message because to my understanding, the VTA DMA Unit should be capable of loading 1-bit weights. It always loads multiple weights in one go (vta.cc:112) [which should be a multiple of 8-bit in my example]. Is that right?
I have no idea how I need to change the matrix_multiply code to accomplish the 1-bit weight dma loading.
Thank you very much for any hints.

I’m no expert in the matter, but it seems that the problem isn’t really VTA (based on the path of the file that us throwing the error.

I took a look at the source code which I paste here:

// Get number of bytes considering vector type.
inline int GetVectorBytes(Type dtype) {
  int data_bits = dtype.bits() * dtype.lanes();
  // allow bool to exist
  if (dtype == Bool()) return 1;
  CHECK_EQ(data_bits % 8, 0U)
      << "Need to load/store by multiple of bytes"; //this is line 62
  return data_bits / 8;
}

So out of the top of my head, it seems that you have a problem with your definition of dtype. If its 1bit, you need to define it as Bool and at least the if (dtype == Bool()) return 1; should return a correct value.
Don’t know if there will be problems down the line since I haven’t seen a 1bit VTA implementation working.