SystemVerilog : semaphore
SystemVerilog:mailbox で mailbox 書いたので、次は「semaphore」書いてみました。
- サンプルコード
module testbench (); semaphore sm_hoge; task task_put(); sm_hoge.put(); endtask task task_get; forever begin if (sm_hoge.try_get()) begin $display("@%0d semaphore get", $time); end else begin #30; end end endtask initial begin sm_hoge = new(); fork task_get; join_none for(int i=0; i<10; i++) begin #10; task_put(); $display("@%0d semaphore put", $time); end #1000 $finish; end endmodule: testbench
- 実行結果
# // # Loading sv_std.std # Loading work.testbench(fast) # do ./run.do # @10 semaphore put # @20 semaphore put # @30 semaphore get # @30 semaphore get # @30 semaphore put # @40 semaphore put # @50 semaphore put # @60 semaphore get # @60 semaphore get # @60 semaphore get # @60 semaphore put # @70 semaphore put # @80 semaphore put # @90 semaphore get # @90 semaphore get # @90 semaphore get # @90 semaphore put # @100 semaphore put # @120 semaphore get # @120 semaphore get
メンバ関数
- Create a semaphore with a specified number of keys: new()
- Obtain one or more keys from the bucket: get()
- Return one or more keys into the bucket: put()
- Try to obtain one or more keys without blocking: try_get()
書いている時にアレっ?データってどこにいれるんだっけ???
っと思ってしまったので、他の言語と困惑してた。。。