anchor.diff:     FIFOF#(Bit#(112)) unparsed_out_fifo <- mkSizedFIFOF(1);
      FIFOF#(Bit#(144)) internal_fifo <- mkSizedFIFOF(1);
   
  -   FIFOF#(ParserState) next_state_fifo <- mkBypassFIFOF;
  +   FIFOF#(Bit#(32)) parsed_ipv4_fifo <- mkFIFOF;
  +
      Wire#(Bit#(128)) packet_in_wire <- mkDWire(0);
  +   Vector#(3, Wire#(Maybe#(ParserState))) next_state_wire <- replicateM(mkDWire(tagged Invalid));
   
      let verbose = True;
      Reg#(Cycle_t) cycle <- mkReg(defaultValue);
  
positive.code:    mkConnection(parse_ethernet.unparsedOutVlan, parse_vlan.unparsedIn);
     mkConnection(parse_vlan.unparsedOutVlan0, parse_ipv4.unparsedInVlan0);
  
     let verbose = True;
     Reg#(Cycle_t) cycle <- mkReg(defaultValue);
     rule every if (verbose);
        cycle.cnt <= cycle.cnt + 1;
     endrule
  
     rule start_fsm (curr_state == S0 && data_in_fifo.notEmpty);
        if (!started) begin
           parse_ethernet.start;
           parse_vlan.start;
  
negative.code:    endmethod
     interface unparsedOutIpv4 = toPipeOut(unparsed_out_parse_ipv4_fifo);
     interface unparsedOutVlan = toPipeOut(unparsed_out_parse_vlan_fifo);
  endmodule
  
  // Parse second VLAN
  module mkParseVlan#(Reg#(ParserState) state, FIFOF#(EtherData) datain)(ParseVlan);
     FIFOF#(Bit#(16)) unparsed_in_fifo <- mkBypassFIFOF;
     FIFOF#(Bit#(16)) unparsed_in_fifo_vlan0 <- mkBypassFIFOF;
     FIFOF#(Bit#(112)) unparsed_out_parse_vlan0_fifo <- mkSizedFIFOF(1);
     FIFOF#(Bit#(80)) unparsed_out_parse_vlan1_fifo <- mkSizedFIFOF(1);
  
     Wire#(Bit#(128)) packet_in_wire <- mkDWire(0);
     Vector#(2, Wire#(Maybe#(ParserState))) next_state_wire <- replicateM(mkDWire(tagged Invalid));
  
     let verbose = True;
     Reg#(Cycle_t) cycle <- mkReg(defaultValue);
  