Skip to content

Commit ac11840

Browse files
authored
[Seq] Fix width errors in HWMemSimImpl (#8351)
1 parent af30737 commit ac11840

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

lib/Dialect/Seq/Transforms/HWMemSimImpl.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ void HWMemSimImpl::generateMemory(HWModuleOp op, FirMemory mem) {
602602
// ```
603603
// for (int i = 0; i < mem.depth; i++) begin
604604
// for (int j = 0; j < randomMeg.size; j += 32)
605-
// randomMem[j+31:j] = `RANDOM
605+
// randomMem[j[mem.width-1: +: 32] = `RANDOM
606606
// Memory[i] = randomMem[mem.dataWidth - 1: 0];
607607
// ```
608608
b.create<sv::ForOp>(
@@ -613,8 +613,10 @@ void HWMemSimImpl::generateMemory(HWModuleOp op, FirMemory mem) {
613613
"j", [&](BlockArgument innerIndVar) {
614614
auto rhs = b.create<sv::MacroRefExprSEOp>(
615615
b.getIntegerType(randomWidth), "RANDOM");
616+
auto truncInnerIndVar = b.createOrFold<comb::ExtractOp>(
617+
innerIndVar, 0, llvm::Log2_64_Ceil(mem.dataWidth));
616618
auto lhs = b.create<sv::IndexedPartSelectInOutOp>(
617-
randomMemReg, innerIndVar, randomWidth, false);
619+
randomMemReg, truncInnerIndVar, randomWidth, false);
618620
b.create<sv::BPAssignOp>(lhs, rhs);
619621
});
620622

test/Dialect/Seq/hw-memsim.mlir

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ hw.module.generated @FIRRTLMem_1_1_1_16_10_0_1_0_0, @FIRRTLMem(in %ro_addr_0: i4
131131
//CHECK: sv.for %i = %c0_i4 to %c-6_i4 step %c1_i4 : i4 {
132132
//CHECK: sv.for %j = %c0_i6 to %c-32_i6 step %c-32_i6_2 : i6 {
133133
//CHECK: %RANDOM = sv.macro.ref.expr.se @RANDOM
134-
//CHECK: %[[PART_SELECT:.+]] = sv.indexed_part_select_inout %_RANDOM_MEM[%j : 32] : !hw.inout<i32>, i6
134+
//CHECK: %[[TRUNCATE_J:.+]] = comb.extract %j from 0 : (i6) -> i4
135+
//CHECK: %[[PART_SELECT:.+]] = sv.indexed_part_select_inout %_RANDOM_MEM[%[[TRUNCATE_J]] : 32] : !hw.inout<i32>, i4
135136
//CHECK: sv.bpassign %[[PART_SELECT]], %RANDOM : i32
136137
//CHECK: }
137138
//CHECK: %[[MEM_INDEX:.+]] = sv.array_index_inout %Memory[%i] : !hw.inout<uarray<10xi16>>, i4

0 commit comments

Comments
 (0)