48 lines
1.2 KiB
Systemverilog
48 lines
1.2 KiB
Systemverilog
`include <bitstream.svh>
|
|
|
|
`include <params.svh>
|
|
|
|
task bitstream::append_packet(input Packet pkt);
|
|
for (int i = 0; i < PACKET_SIZE; i++) begin
|
|
this.append_byte(pkt.get_pos(i));
|
|
end
|
|
endtask : append_packet
|
|
|
|
task bitstream::append_byte(input byte data);
|
|
for (int i = 0; i < 8; i++) begin
|
|
this.queue.push_back(data[i]);
|
|
end
|
|
endtask : append_byte
|
|
|
|
task bitstream::append_bit(input bit data);
|
|
this.queue.push_back(data);
|
|
endtask : append_bit
|
|
|
|
task bitstream::parse_packets(ref Packet results[]);
|
|
Packet pkt_tmp;
|
|
bit bit_tmp[PACKET_SIZE * 8];
|
|
int curr = 0;
|
|
logic in_packet = 0;
|
|
for (int i = 0; i < this.queue.size(); i = i + 8) begin
|
|
if ((!in_packet) & (this.queue[i:i + 7] == 0))
|
|
continue;
|
|
|
|
in_packet = 1;
|
|
bit_tmp[curr:curr + 7] = this.queue[i:i + 7];
|
|
curr = curr + 8;
|
|
|
|
if (curr == PACKET_SIZE * 8) begin
|
|
pkt_tmp.construct(bit_tmp);
|
|
results.push_back(pkt_tmp);
|
|
curr = 0;
|
|
in_packet = 0;
|
|
end
|
|
end
|
|
endtask : parse_packets
|
|
|
|
task bitstream::trim();
|
|
while (this.queue.size() >= 8 & this.queue[0:7] == 0)
|
|
for (int i = 0; i < 8; i++)
|
|
this.queue.pop_front();
|
|
endtask : trim
|