Files
RISC-V-Simulator/docs/mistake.md
2024-07-12 11:02:42 +08:00

1.2 KiB

Some common mistakes

Bit-width mismatch

That is, the bit-width of the LHS and RHS of an assignment operation are different. For example, the following code will result in compile error:

Register <8>    r1;
Register <16>   r2;
r1 <= r2; // Error: bit-width mismatch

Register/Wire passed by value

Register/Wire can be only passed by reference. We forbid the copy/move constructor for Register/Wire to avoid misuse.

This may cause some error in the lambda function of a wire.

Register <8> r1;
Wire <8> w1 = [&]() { return r1; };

To fix this issue, you may return by reference, or use + operator to convert the value to bit type.

Register <8> r1;
Wire <8> w1 = [&]() -> auto & { return r1; };
Wire <8> w2 = [&]() { return +r1; };

C-array as member variable

We do not support C-array as member variable for synchronization. Our C++ static reflection library do not support parsing C-array as member variable currently.

Always use std::array instead.

struct NeedToSync {
    std::array <Register <1>, 8> data;
    std::array <Wire <1>, 8> data2;
};

Some others

If you encounter some other issues, please feel free to open an issue.