|
| 1 | +import "primitives/core.futil"; |
| 2 | +import "primitives/memories/seq.futil"; |
| 3 | +import "primitives/binary_operators.futil"; |
| 4 | +import "../posit_32.futil"; |
| 5 | +component main() -> () { |
| 6 | + cells { |
| 7 | + @external(1) a = seq_mem_d1(32,8,4); |
| 8 | + a_read0_0 = std_reg(32); |
| 9 | + add0 = posit_32_add(); |
| 10 | + add1 = std_add(4); |
| 11 | + @external(1) b = seq_mem_d1(32,8,4); |
| 12 | + b_read0_0 = std_reg(32); |
| 13 | + @external(1) c = seq_mem_d1(32,8,4); |
| 14 | + const0 = std_const(4,0); |
| 15 | + const1 = std_const(4,7); |
| 16 | + const2 = std_const(4,1); |
| 17 | + i0 = std_reg(4); |
| 18 | + le0 = std_le(4); |
| 19 | + } |
| 20 | + wires { |
| 21 | + comb group cond0 { |
| 22 | + le0.left = i0.out; |
| 23 | + le0.right = const1.out; |
| 24 | + } |
| 25 | + group let0<"promotable"=1> { |
| 26 | + i0.in = const0.out; |
| 27 | + i0.write_en = 1'd1; |
| 28 | + let0[done] = i0.done; |
| 29 | + } |
| 30 | + group let1<"promotable"=2> { |
| 31 | + a_read0_0.in = a.read_data; |
| 32 | + a_read0_0.write_en = a.done; |
| 33 | + let1[done] = a_read0_0.done; |
| 34 | + a.content_en = 1'd1; |
| 35 | + a.addr0 = i0.out; |
| 36 | + } |
| 37 | + group let2<"promotable"=2> { |
| 38 | + b_read0_0.in = b.read_data; |
| 39 | + b_read0_0.write_en = b.done; |
| 40 | + let2[done] = b_read0_0.done; |
| 41 | + b.content_en = 1'd1; |
| 42 | + b.addr0 = i0.out; |
| 43 | + } |
| 44 | + group upd0<"promotable"=1> { |
| 45 | + c.content_en = 1'd1; |
| 46 | + c.addr0 = i0.out; |
| 47 | + c.write_en = 1'd1; |
| 48 | + add0.io_num1 = a_read0_0.out; |
| 49 | + add0.io_num2 = b_read0_0.out; |
| 50 | + add0.io_sub = 1'd0; |
| 51 | + c.write_data = add0.io_out; |
| 52 | + upd0[done] = c.done; |
| 53 | + } |
| 54 | + group upd1<"promotable"=1> { |
| 55 | + i0.write_en = 1'd1; |
| 56 | + add1.left = i0.out; |
| 57 | + add1.right = const2.out; |
| 58 | + i0.in = add1.out; |
| 59 | + upd1[done] = i0.done; |
| 60 | + } |
| 61 | + } |
| 62 | + control { |
| 63 | + seq { |
| 64 | + @pos(0) let0; |
| 65 | + @bound(8) while le0.out with cond0 { |
| 66 | + seq { |
| 67 | + par { |
| 68 | + @pos(1) let1; |
| 69 | + @pos(2) let2; |
| 70 | + } |
| 71 | + @pos(3) upd0; |
| 72 | + @pos(0) upd1; |
| 73 | + } |
| 74 | + } |
| 75 | + } |
| 76 | + } |
| 77 | +} |
| 78 | +metadata #{ |
| 79 | + 0: for (let i: ubit<4> = 0..8) { |
| 80 | + 1: c[i] := a[i] + b[i]; |
| 81 | + 2: c[i] := a[i] + b[i]; |
| 82 | + 3: c[i] := a[i] + b[i]; |
| 83 | +}# |
0 commit comments