| 7 | BSVにおけるコマンドバッファ制御 (5) | 
2. Consumer
次にコンシューマのサンプルを提供します。
package Consumer4;
interface Consumer4Ifc;
   method Action consume(UInt#(4) x);
endinterface
module mkConsumer4 (Consumer4Ifc);
   Reg#(UInt#(8)) cnt  <- mkReg(0);
   Reg#(Bool)     busy <- mkReg(False);
   Reg#(UInt#(4)) lastVal <- mkRegU;   // 取り込み結果を保持
   rule timer (busy);
      if (cnt == 14) begin
         cnt  <= 0;
         busy <= False;
      end
      else
         cnt <= cnt + 1;
   endrule
   method Action consume(UInt#(4) x) if (!busy);
      lastVal <= x;                   // EN=1 サイクルでラッチ
      $display("%0t: consume = %h", $time, x);
      busy <= True;
   endmethod
endmodule
endpackage
 前のブログ
前のブログ
 
    
    
    
Leave a Comment