SystemVerilog:mailbox で mailbox 書いたので、
次は「semaphore」書いてみました。
- サンプルコード
1|module testbench; 2| 3| semaphore sm_hoge; 4| 5| task task_put(); 6| sm_hoge.put(); 7| endtask 8| 9| task task_get; 10| forever begin 11| if (sm_hoge.try_get()) begin 12| $display("@%0d semaphore get", $time); 13| end else begin 14| #30; 15| end 16| end 17| endtask 18| 19| initial begin 20| sm_hoge = new(); 21| fork task_get; join_none 22| 23| for(int i=0; i<10; i++) begin 24| #10; task_put(); 25| $display("@%0d semaphore put", $time); 26| end 27| 28| #1000 $finish; 29| end 30| 31|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()
書いている時にアレっ?データってどこにいれるんだっけ???
っと思ってしまったので、他の言語と困惑してた。。。
- 関連記事