proc @regfile.always_comb ([1 x i5]$ %waddr_i, i1$ %we_i) -> ([1 x i32]$ %we_dec) {
0:
br %body
body:
%1 = const i32 0
%j = var i32 %1
br %loop_body
check:
wait %body, %waddr_i, %we_i
loop_body:
%j1 = ld i32* %j
%2 = const i32 1
%3 = slt i32 %j1, %2
br %3, %loop_exit, %loop_continue
loop_exit:
br %check
loop_continue:
%4 = const i32 0
%i = var i32 %4
br %loop_body1
loop_body1:
%i1 = ld i32* %i
%5 = const i32 32
%6 = slt i32 %i1, %5
br %6, %loop_exit1, %loop_continue1
loop_exit1:
%j2 = ld i32* %j
%7 = const i32 1
%8 = add i32 %j2, %7
st i32* %j, %8
%j3 = ld i32* %j
%9 = const i32 0
%10 = neq i32 %j3, %9
br %loop_body
loop_continue1:
%11 = const i32 0
%waddr_i1 = prb [1 x i5]$ %waddr_i
%j4 = ld i32* %j
%12 = const i5 0
%13 = [1 x i5 %12]
%14 = shr [1 x i5] %waddr_i1, [1 x i5] %13, i32 %j4
%15 = extf i5, [1 x i5] %14, 0
%16 = inss i32 %11, i5 %15, 0, 5
%i2 = ld i32* %i
%17 = eq i32 %16, %i2
br %17, %if_false, %if_true
if_true:
%j5 = ld i32* %j
%18 = const i32 0
%19 = [1 x i32 %18]
%20 = sig [1 x i32] %19
%21 = shr [1 x i32]$ %we_dec, [1 x i32]$ %20, i32 %j5
%22 = extf i32$, [1 x i32]$ %21, 0
%i3 = ld i32* %i
%23 = const i32 0
%24 = sig i32 %23
%25 = shr i32$ %22, i32$ %24, i32 %i3
%26 = exts i1$, i32$ %25, 0, 1
%we_i1 = prb i1$ %we_i
%j6 = ld i32* %j
%27 = const i1 0
%28 = shr i1 %we_i1, i1 %27, i32 %j6
%29 = exts i1, i1 %28, 0, 1
%30 = const time 0s 1e
drv i1$ %26, %29, %30
br %if_exit
if_false:
%j7 = ld i32* %j
%31 = const i32 0
%32 = [1 x i32 %31]
%33 = sig [1 x i32] %32
%34 = shr [1 x i32]$ %we_dec, [1 x i32]$ %33, i32 %j7
%35 = extf i32$, [1 x i32]$ %34, 0
%i4 = ld i32* %i
%36 = const i32 0
%37 = sig i32 %36
%38 = shr i32$ %35, i32$ %37, i32 %i4
%39 = exts i1$, i32$ %38, 0, 1
%40 = const i1 0
%41 = const time 0s 1e
drv i1$ %39, %40, %41
br %if_exit
if_exit:
%i5 = ld i32* %i
%42 = const i32 1
%43 = add i32 %i5, %42
st i32* %i, %43
%i6 = ld i32* %i
%44 = const i32 0
%45 = neq i32 %i6, %44
br %loop_body1
}
proc @regfile.always_ff (i1$ %clk_i, [1 x i32]$ %wdata_i, [1 x i32]$ %we_dec) -> ([32 x i32]$ %mem) {
0:
br %init
init:
%clk_i1 = prb i1$ %clk_i
wait %check, %clk_i
check:
%clk_i2 = prb i1$ %clk_i
%1 = const i1 0
%2 = eq i1 %clk_i1, %1
%3 = neq i1 %clk_i2, %1
%posedge = and i1 %2, %3
br %posedge, %init, %event
event:
%4 = const i32 0
%j = var i32 %4
br %loop_body
loop_body:
%j1 = ld i32* %j
%5 = const i32 1
%6 = slt i32 %j1, %5
br %6, %loop_exit, %loop_continue
loop_exit:
br %0
loop_continue:
%7 = const i32 0
%i = var i32 %7
br %loop_body1
loop_body1:
%i1 = ld i32* %i
%8 = const i32 32
%9 = slt i32 %i1, %8
br %9, %loop_exit1, %loop_continue1
loop_exit1:
%10 = const i32 1
%11 = const i32 0
%12 = neq i32 %10, %11
br %12, %if_false, %if_true
loop_continue1:
%we_dec1 = prb [1 x i32]$ %we_dec
%j2 = ld i32* %j
%13 = const i32 0
%14 = [1 x i32 %13]
%15 = shr [1 x i32] %we_dec1, [1 x i32] %14, i32 %j2
%16 = extf i32, [1 x i32] %15, 0
%i2 = ld i32* %i
%17 = const i32 0
%18 = shr i32 %16, i32 %17, i32 %i2
%19 = exts i1, i32 %18, 0, 1
br %19, %if_false1, %if_true1
if_true1:
%i3 = ld i32* %i
%20 = const i32 0
%21 = [32 x i32 %20]
%22 = sig [32 x i32] %21
%23 = shr [32 x i32]$ %mem, [32 x i32]$ %22, i32 %i3
%24 = extf i32$, [32 x i32]$ %23, 0
%wdata_i1 = prb [1 x i32]$ %wdata_i
%j3 = ld i32* %j
%25 = const i32 0
%26 = [1 x i32 %25]
%27 = shr [1 x i32] %wdata_i1, [1 x i32] %26, i32 %j3
%28 = extf i32, [1 x i32] %27, 0
%29 = const time 0s 1d
drv i32$ %24, %28, %29
br %if_exit
if_false1:
br %if_exit
if_exit:
%i4 = ld i32* %i
%30 = const i32 1
%31 = add i32 %i4, %30
st i32* %i, %31
%i5 = ld i32* %i
%32 = const i32 0
%33 = neq i32 %i5, %32
br %loop_body1
if_true:
%34 = const i32 0
%35 = const i32 0
%36 = [32 x i32 %35]
%37 = sig [32 x i32] %36
%38 = shr [32 x i32]$ %mem, [32 x i32]$ %37, i32 %34
%39 = extf i32$, [32 x i32]$ %38, 0
%40 = const i32 0
%41 = const i1 0
%42 = inss i32 %40, i1 %41, 0, 1
%43 = const time 0s 1d
drv i32$ %39, %42, %43
br %if_exit1
if_false:
br %if_exit1
if_exit1:
%j4 = ld i32* %j
%44 = const i32 1
%45 = add i32 %j4, %44
st i32* %j, %45
%j5 = ld i32* %j
%46 = const i32 0
%47 = neq i32 %j5, %46
br %loop_body
}
entity @regfile (i1$ %clk_i, [2 x i5]$ %raddr_i, [1 x i5]$ %waddr_i, [1 x i32]$ %wdata_i, i1$ %we_i) -> ([2 x i32]$ %rdata_o) {
%0 = const i32 0
%1 = const i32 0
%2 = const i32 0
%3 = const i32 0
%4 = const i32 0
%5 = const i32 0
%6 = const i32 0
%7 = const i32 0
%8 = const i32 0
%9 = const i32 0
%10 = const i32 0
%11 = const i32 0
%12 = const i32 0
%13 = const i32 0
%14 = const i32 0
%15 = const i32 0
%16 = const i32 0
%17 = const i32 0
%18 = const i32 0
%19 = const i32 0
%20 = const i32 0
%21 = const i32 0
%22 = const i32 0
%23 = const i32 0
%24 = const i32 0
%25 = const i32 0
%26 = const i32 0
%27 = const i32 0
%28 = const i32 0
%29 = const i32 0
%30 = const i32 0
%31 = const i32 0
%32 = [i32 %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18, %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30, %31]
%mem = sig [32 x i32] %32
%33 = const i32 0
%34 = [i32 %33]
%we_dec = sig [1 x i32] %34
%35 = const i32 0
%36 = const i32 0
%37 = [2 x i32 %36]
%38 = sig [2 x i32] %37
%39 = shr [2 x i32]$ %rdata_o, [2 x i32]$ %38, i32 %35
%40 = extf i32$, [2 x i32]$ %39, 0
%mem1 = prb [32 x i32]$ %mem
%raddr_i1 = prb [2 x i5]$ %raddr_i
%41 = const i32 0
%42 = const i5 0
%43 = [2 x i5 %42]
%44 = shr [2 x i5] %raddr_i1, [2 x i5] %43, i32 %41
%45 = extf i5, [2 x i5] %44, 0
%46 = const i32 0
%47 = [32 x i32 %46]
%48 = shr [32 x i32] %mem1, [32 x i32] %47, i5 %45
%49 = extf i32, [32 x i32] %48, 0
%50 = const time 0s 1e
drv i32$ %40, %49, %50
%51 = const i32 1
%52 = const i32 0
%53 = [2 x i32 %52]
%54 = sig [2 x i32] %53
%55 = shr [2 x i32]$ %rdata_o, [2 x i32]$ %54, i32 %51
%56 = extf i32$, [2 x i32]$ %55, 0
%mem2 = prb [32 x i32]$ %mem
%raddr_i2 = prb [2 x i5]$ %raddr_i
%57 = const i32 1
%58 = const i5 0
%59 = [2 x i5 %58]
%60 = shr [2 x i5] %raddr_i2, [2 x i5] %59, i32 %57
%61 = extf i5, [2 x i5] %60, 0
%62 = const i32 0
%63 = [32 x i32 %62]
%64 = shr [32 x i32] %mem2, [32 x i32] %63, i5 %61
%65 = extf i32, [32 x i32] %64, 0
%66 = const time 0s 1e
drv i32$ %56, %65, %66
inst @regfile.always_comb ([1 x i5]$ %waddr_i, i1$ %we_i) -> ([1 x i32]$ %we_dec)
inst @regfile.always_ff (i1$ %clk_i, [1 x i32]$ %wdata_i, [1 x i32]$ %we_dec) -> ([32 x i32]$ %mem)
%67 = const i32 0
%68 = const i32 0
%69 = [i32 %67, %68]
%70 = const time 0s
drv [2 x i32]$ %rdata_o, %69, %70
}