anchor.diff:  
      rule do_2d(flags[7] != 0);
         Vector#(8, Bit#(12)) tmp = ?;
  -      
  +
  +      // Get 2D SATD data
         if (dir) begin
            tmp = matrix[0];
         end
  
positive.code:    Reg#(Bit#(8))                             flags       <- mkConfigReg(0);
     Reg#(Bool)                                dir         <- mkConfigReg(True);
     Vector#(8, Reg#(Vector#(8, Bit#(12))))    matrix      <- replicateM(mkConfigRegU);
  
     rule shift_matrix(isValid(rw_trans.wget) || flags[7] != 0);
        let x = fromMaybe(?, rw_trans.wget);
  
negative.code:    interface Put inp = toPut(fifo_inp);
     interface Get oup = toGet(fifo_out);
  endmodule
  
  
  (* synthesize *)
  module mkSatd8x2(ISatd8x2);
     ISatd8   satd0    <- mkSatd8;
     ISatd8   satd1    <- mkSatd8;
  
     interface Put inp = interface Put;
                            method Action put(Vector#(16, Bit#(9)) x);
                               Vector#(2, Vector#(8, Bit#(9))) y = unpack(pack(x));
                               satd0.inp.put(y[0]);
                               satd1.inp.put(y[1]);
                            endmethod
                         endinterface;
     
     interface Get oup = interface Get;
                            method ActionValue#(Vector#(2, Bit#(19))) get();
                               let x0 <- satd0.oup.get();
                               let x1 <- satd1.oup.get();
                               Vector#(2, Bit#(19)) y = unpack({x0, x1});
                               return y;
                            endmethod
                         endinterface;
  endmodule
  