I'm trying to convert the matrix_mul_4x4.x file in examples/ to matrix_mul_4x4.ir using this command, but I always get this Top-level type info not found error:
./bazel-bin/xls/dslx/ir_convert/ir_converter_main --top=matmul /home/ubuntu/xls-debug/scripts/matrix_mul_4x4.x > /home/ubuntu/xls-debug/scripts/matrix_mul_4x4.ir
F0525 14:44:46.769275 217674 ir_converter_main.cc:163] Check failed: ::absl::OkStatus() == (status) (OK vs. NOT_FOUND: Top-level type info not found for proc "matmul".)
When I convert my own matrix multiplication (with fixed size) ir to verilog, the generated verilog result always load everything in the first stage and do all the umul and add computation in the second stage, even if I specify pipeline stages (more than 2) and clock_period_ps. Could you please explain wh? The documentation states that if pipeline stages and clock_period_ps are specified, the tool will schedule minimum registers. However, it seems that all computations are unrolled in one stage, resembling ASAP scheduling rather than minimum register scheduling. Could you clarify this behavior?
Additionally, does the scheduling in codegen introduce any parallelism? such as splitting the matrix into blocks and pipelining the block computation to reduce the number of registers? Is this parallelism only introduced when using proc and channel in DSL, or does it apply in pass optimization or scheduling?
I'm trying to convert the matrix_mul_4x4.x file in examples/ to matrix_mul_4x4.ir using this command, but I always get this Top-level type info not found error:
./bazel-bin/xls/dslx/ir_convert/ir_converter_main --top=matmul /home/ubuntu/xls-debug/scripts/matrix_mul_4x4.x > /home/ubuntu/xls-debug/scripts/matrix_mul_4x4.ir
F0525 14:44:46.769275 217674 ir_converter_main.cc:163] Check failed: ::absl::OkStatus() == (status) (OK vs. NOT_FOUND: Top-level type info not found for proc "matmul".)
When I convert my own matrix multiplication (with fixed size) ir to verilog, the generated verilog result always load everything in the first stage and do all the umul and add computation in the second stage, even if I specify pipeline stages (more than 2) and clock_period_ps. Could you please explain wh? The documentation states that if pipeline stages and clock_period_ps are specified, the tool will schedule minimum registers. However, it seems that all computations are unrolled in one stage, resembling ASAP scheduling rather than minimum register scheduling. Could you clarify this behavior?
Additionally, does the scheduling in codegen introduce any parallelism? such as splitting the matrix into blocks and pipelining the block computation to reduce the number of registers? Is this parallelism only introduced when using proc and channel in DSL, or does it apply in pass optimization or scheduling?