03. ぷち応用例
classの簡単な応用例として、packetのclassをqueueに積んでから、取り出して中身を表示するということをやってみます。
--- test.sv ---
module test;class packet_class; byte header; bit [31:0] payload [$];
function new(byte header_value); header = header_value; for(int i=0; i<4; i++)begin payload.push_back($random); end endfunction
function void disp; $display("=================================="); $display(" header : %02xh", header); $display(" payload[0] : %08xh", payload[0]); $display(" payload[1] : %08xh", payload[1]); $display(" payload[2] : %08xh", payload[2]); $display(" payload[3] : %08xh", payload[3]); endfunction endclass
initial begin packet_class packet; packet_class packet_q[$]; for(int i=0; i<4; i++)begin /// ① packet = new(i); packet_q.push_back(packet); end while(packet_q.size()!=0)begin packet = packet_q.pop_front(); packet.disp; /// ② end end
endmodule
initial文中、forループでpacketを1つずつ生成してqueueに積んでいます。…①
queueに積まれた数は、.size()メソッドでわかりますから、while文の条件に入れてqueueが空になるまでpacketを取り出し、classに埋め込んだfunctionをcallしています。…②
--- 実行結果 ---
# ==================================# header : 00h# payload[0] : 12153524h# payload[1] : c0895e81h# payload[2] : 8484d609h# payload[3] : b1f05663h# ==================================# header : 01h# payload[0] : 06b97b0dh# payload[1] : 46df998dh# payload[2] : b2c28465h# payload[3] : 89375212h# ==================================# header : 02h# payload[0] : 00f3e301h# payload[1] : 06d7cd0dh# payload[2] : 3b23f176h# payload[3] : 1e8dcd3dh# ==================================# header : 03h# payload[0] : 76d457edh# payload[1] : 462df78ch# payload[2] : 7cfde9f9h# payload[3] : e33724c6h