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