OpenCores
URL https://opencores.org/ocsvn/ha1588/ha1588/trunk

Subversion Repositories ha1588

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /ha1588/trunk
    from Rev 3 to Rev 4
    Reverse comparison

Rev 3 → Rev 4

/rtl/tsu/ptp_parser.v
0,0 → 1,109
`timescale 1ns/1ns
 
module ptp_parser (
input clk, rst,
input [31:0] ptp_data,
input ptp_valid,
input ptp_sop,
input ptp_eop,
input [ 1:0] ptp_mod,
input [79:0] ptp_time,
 
output reg ptp_found,
output reg [91:0] ptp_infor
);
 
reg [31:0] ptp_data_d1;
reg ptp_valid_d1;
reg ptp_sop_d1;
reg ptp_eop_d1;
reg [ 1:0] ptp_mod_d1;
always @(posedge rst or posedge clk) begin
if (rst) begin
ptp_data_d1 <= 32'h00000000;
ptp_valid_d1 <= 1'b0;
ptp_sop_d1 <= 1'b0;
ptp_eop_d1 <= 1'b0;
ptp_mod_d1 <= 2'b00;
end
else begin
if (ptp_valid) begin
ptp_data_d1 <= ptp_data;
ptp_mod_d1 <= ptp_mod;
end
ptp_valid_d1 <= ptp_valid;
ptp_sop_d1 <= ptp_sop;
ptp_eop_d1 <= ptp_eop;
end
end
 
reg [9:0] ptp_cnt;
reg ptp_vlan, ptp_ip, ptp_udp, ptp_port, ptp_event;
reg [3:0] ptp_msgid;
reg [7:0] ptp_seqid;
always @(posedge rst or posedge clk) begin
if (rst)
ptp_cnt <= 10'd0;
else
if (ptp_valid && ptp_sop)
ptp_cnt <= 10'd0;
else if (ptp_valid)
ptp_cnt <= ptp_cnt + 10'd1 - ptp_vlan;
end
 
always @(posedge rst or posedge clk) begin
if (rst) begin
ptp_vlan <= 1'b0;
ptp_ip <= 1'b0;
ptp_udp <= 1'b0;
ptp_port <= 1'b0;
ptp_event <= 1'b0;
ptp_seqid <= 8'd0;
end
else if (ptp_valid_d1 && ptp_sop_d1) begin
ptp_vlan <= 1'b0;
ptp_ip <= 1'b0;
ptp_udp <= 1'b0;
ptp_port <= 1'b0;
ptp_event <= 1'b0;
ptp_seqid <= 8'd0;
end
else begin
if (ptp_valid_d1 && ptp_cnt==10'd4) // ether_type == vlan
ptp_vlan <= ( ptp_data_d1[31:16]==16'h8100);
if (ptp_valid_d1 && ptp_cnt==10'd4) // ether_type == ip
ptp_ip <= ( ptp_data_d1[31:16]==16'h0800);
if (ptp_valid_d1 && ptp_cnt==10'd6) // ip_type == udp
ptp_udp <= ( ptp_data_d1[ 7: 0]== 8'h11 && ptp_ip);
if (ptp_valid_d1 && ptp_cnt==10'd10) // udp_dest_port == ptp_event
ptp_port <= ( ptp_data_d1[31:16]==16'h013f && ptp_udp);
if (ptp_valid_d1 && ptp_cnt==10'd11) // ptp_message_id == sync || delay_req
ptp_event <= ((ptp_data_d1[11: 8]== 4'h0 || ptp_data_d1[11:8]==4'h2) && ptp_port);
 
if (ptp_valid_d1 && ptp_cnt==10'd11) // ptp_sequence_id
ptp_msgid <= ptp_data_d1[11: 8];
if (ptp_valid_d1 && ptp_cnt==10'd19) // ptp_sequence_id
ptp_seqid <= ptp_data_d1[31:16];
end
end
 
always @(posedge rst or posedge clk) begin
if (rst) begin
ptp_found <= 1'b0;
ptp_infor <= 91'd0;
end
else if (ptp_valid_d1 && ptp_sop_d1) begin
ptp_found <= 1'b0;
ptp_infor <= 91'd0;
end
else if (ptp_valid_d1 && ptp_eop_d1) begin
ptp_found <= ptp_event;
ptp_infor <= {ptp_msgid, ptp_seqid, ptp_time};
end
else begin
ptp_found <= 1'b0;
ptp_infor <= 91'd0;
end
end
 
endmodule
/rtl/tsu/tsu_queue.v
0,0 → 1,181
`timescale 1ns/1ns
 
module tsu_queue (
input rst,
 
input gmii_clk,
input gmii_ctrl,
input [7:0] gmii_data,
input rtc_timer_clk,
input [79:0] rtc_timer_in,
 
input q_rst,
input q_clk,
input q_rd_en,
output [ 7:0] q_rd_stat,
output [91:0] q_rd_data
);
 
// buffer gmii input
reg int_gmii_ctrl;
reg int_gmii_ctrl_d1, int_gmii_ctrl_d2, int_gmii_ctrl_d3, int_gmii_ctrl_d4, int_gmii_ctrl_d5;
reg [7:0] int_gmii_data;
reg [7:0] int_gmii_data_d1;
always @(posedge rst or posedge gmii_clk) begin
if (rst) begin
int_gmii_ctrl <= 1'b0;
int_gmii_ctrl_d1 <= 1'b0;
int_gmii_ctrl_d2 <= 1'b0;
int_gmii_ctrl_d3 <= 1'b0;
int_gmii_ctrl_d4 <= 1'b0;
int_gmii_ctrl_d5 <= 1'b0;
int_gmii_data <= 8'h00;
int_gmii_data_d1 <= 8'h00;
end
else begin
int_gmii_ctrl <= gmii_ctrl;
int_gmii_ctrl_d1 <= int_gmii_ctrl;
int_gmii_ctrl_d2 <= int_gmii_ctrl_d1;
int_gmii_ctrl_d3 <= int_gmii_ctrl_d2;
int_gmii_ctrl_d4 <= int_gmii_ctrl_d3;
int_gmii_ctrl_d5 <= int_gmii_ctrl_d4;
int_gmii_data <= gmii_data;
int_gmii_data_d1 <= int_gmii_data;
end
end
 
// ptp CDC time stamping
wire ts_req = int_gmii_ctrl;
reg ts_req_d1, ts_req_d2, ts_req_d3;
always @(posedge rst or posedge rtc_timer_clk) begin
if (rst) begin
ts_req_d1 <= 1'b0;
ts_req_d2 <= 1'b0;
ts_req_d3 <= 1'b0;
end
else begin
ts_req_d1 <= ts_req;
ts_req_d2 <= ts_req_d1;
ts_req_d3 <= ts_req_d2;
end
end
reg [79:0] rtc_time_stamp;
always @(posedge rst or posedge rtc_timer_clk) begin
if (rst)
rtc_time_stamp <= 80'd0;
else
if (ts_req_d2 & !ts_req_d3)
rtc_time_stamp <= rtc_timer_in;
end
reg ts_ack, ts_ack_clr;
always @(posedge ts_ack_clr or posedge rtc_timer_clk) begin
if (ts_ack_clr)
ts_ack <= 1'b0;
else
if (ts_req_d2 & !ts_req_d3)
ts_ack <= 1'b1;
end
 
reg ts_ack_d1, ts_ack_d2, ts_ack_d3;
always @(posedge rst or posedge gmii_clk) begin
if (rst) begin
ts_ack_d1 <= 1'b0;
ts_ack_d2 <= 1'b0;
ts_ack_d3 <= 1'b0;
end
else begin
ts_ack_d1 <= ts_ack;
ts_ack_d2 <= ts_ack_d1;
ts_ack_d3 <= ts_ack_d2;
end
end
reg [79:0] gmii_time_stamp;
always @(posedge rst or posedge gmii_clk) begin
if (rst) begin
gmii_time_stamp <= 80'd0;
ts_ack_clr <= 1'b0;
end
else begin
if (ts_ack_d2 & !ts_ack_d3) begin
gmii_time_stamp <= rtc_time_stamp;
ts_ack_clr <= 1'b1;
end
else begin
gmii_time_stamp <= gmii_time_stamp;
ts_ack_clr <= 1'b0;
end
end
end
 
// 8b-32b datapath gearbox
reg int_valid;
reg int_sop, int_eop;
reg [ 1:0] int_bcnt, int_mod;
reg [31:0] int_data;
always @(posedge rst or posedge gmii_clk) begin
if (rst)
int_bcnt <= 2'd0;
else
if (int_gmii_ctrl_d1 | (int_bcnt!=2'd0))
int_bcnt <= int_bcnt + 2'd1;
else
int_bcnt <= 2'd0;
end
always @(posedge rst or posedge gmii_clk) begin
if (rst) begin
int_data <= 32'd0;
int_valid <= 1'b0;
int_mod <= 2'd0;
end
else begin
if (int_gmii_ctrl_d1) begin
int_data[ 7: 0] <= (int_bcnt==2'd3)? int_gmii_data_d1:int_data[ 7: 0];
int_data[15: 8] <= (int_bcnt==2'd2)? int_gmii_data_d1:int_data[15: 8];
int_data[23:16] <= (int_bcnt==2'd1)? int_gmii_data_d1:int_data[23:16];
int_data[31:24] <= (int_bcnt==2'd0)? int_gmii_data_d1:int_data[31:24];
end
 
if (int_bcnt==2'd3)
int_valid <= 1'b1;
else
int_valid <= 1'b0;
 
if (int_gmii_ctrl_d1 & !int_gmii_ctrl_d2)
int_mod <= 2'd0;
else if (!int_gmii_ctrl_d1 & int_gmii_ctrl_d2)
int_mod <= int_bcnt;
 
if (int_gmii_ctrl & !int_gmii_ctrl_d5 & int_bcnt==2'd3)
int_sop <= 1'b1;
else
int_sop <= 1'b0;
 
if (!int_gmii_ctrl & int_bcnt==2'd3)
int_eop <= 1'b1;
else
int_eop <= 1'b0;
 
end
end
 
// ptp packet parser here
// works at 1/4 gmii_clk frequency, needs multicycle timing constraint
wire ptp_found;
wire [91:0] ptp_infor;
ptp_parser parser(
.clk(gmii_clk),
.rst(rst),
.ptp_data(int_data),
.ptp_valid(int_valid),
.ptp_sop(int_sop),
.ptp_eop(int_eop),
.ptp_mod(int_mod),
.ptp_time(gmii_time_stamp),
.ptp_found(ptp_found),
.ptp_infor(ptp_infor)
);
 
// ptp time stamp dcfifo
 
endmodule
/sim/tsu/wave.do
0,0 → 1,57
onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/gmii_clk
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/gmii_ctrl
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/gmii_data
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/ts_req
add wave -noupdate -format Literal -radix hexadecimal /tsu_queue_tb/DUT_RX/rtc_time_stamp
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/ts_ack
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/ts_ack_clr
add wave -noupdate -format Literal -radix hexadecimal /tsu_queue_tb/DUT_RX/gmii_time_stamp
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/int_gmii_ctrl
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/int_gmii_data
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/int_bcnt
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/int_valid
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/int_sop
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/int_eop
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/int_data
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/int_mod
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/parser/ptp_cnt
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_valid_d1
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_sop_d1
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_eop_d1
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/parser/ptp_mod_d1
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/parser/ptp_data_d1
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_vlan
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_ip
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_udp
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_port
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_event
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/parser/ptp_seqid
add wave -noupdate -divider {New Divider}
add wave -noupdate -format Logic /tsu_queue_tb/DUT_RX/parser/ptp_found
add wave -noupdate -format Literal /tsu_queue_tb/DUT_RX/parser/ptp_infor
add wave -noupdate -divider {New Divider}
TreeUpdate [SetDefaultTree]
WaveRestoreCursors {{Cursor 1} {23897 ns} 0}
configure wave -namecolwidth 150
configure wave -valuecolwidth 165
configure wave -justifyvalue left
configure wave -signalnamewidth 0
configure wave -snapdistance 10
configure wave -datasetprefix 0
configure wave -rowmargin 4
configure wave -childrowmargin 2
configure wave -gridoffset 0
configure wave -gridperiod 1
configure wave -griddelta 40
configure wave -timeline 0
configure wave -timelineunits ns
update
WaveRestoreZoom {20850 ns} {26445 ns}
/sim/tsu/gmii_rx_bfm.v
0,0 → 1,109
`timescale 1ns/1ns
 
module gmii_rx_bfm
(
output gmii_rxclk,
output reg gmii_rxctrl,
output reg [7:0] gmii_rxdata
);
 
reg gmii_rxclk_offset;
initial begin
gmii_rxclk_offset = 1'b0;
forever #4 gmii_rxclk_offset = !gmii_rxclk_offset;
end
assign #2 gmii_rxclk = gmii_rxclk_offset;
 
integer feeder_file_rx, r_rx;
integer start_addr_rx, end_addr_rx;
integer index_rx;
reg eof_rx;
reg pcap_endian_rx;
reg [31:0] pcap_4bytes_rx;
reg [31:0] packet_leng_rx;
reg [ 7:0] packet_byte_rx;
initial
begin : feeder_rx
gmii_rxctrl = 1'b0;
gmii_rxdata = 4'd0;
#100;
feeder_file_rx = $fopen("ptpdv2_rx.pcap","rb");
if (feeder_file_rx == 0)
begin
$display("Failed to open ptpdv2_rx.pcap!");
disable feeder_rx;
end
else
begin
// test pcap file endian
r_rx = $fread(pcap_4bytes_rx, feeder_file_rx);
pcap_endian_rx = (pcap_4bytes_rx == 32'ha1b2c3d4)? 1:0;
$fseek(feeder_file_rx, -4, 1);
// skip pcap file header 24*8
$fseek(feeder_file_rx, 24, 1);
// read packet content
eof_rx = 0;
while (!eof_rx & !$feof(feeder_file_rx))
begin : fileread_loop
// skip frame header (8+4)*8
start_addr_rx = $ftell(feeder_file_rx);
$fseek(feeder_file_rx, 8+4, 1);
// get frame length big endian 4*8
r_rx = $fread(packet_leng_rx, feeder_file_rx);
packet_leng_rx = pcap_endian_rx?
{packet_leng_rx[31:24], packet_leng_rx[23:16], packet_leng_rx[15: 8], packet_leng_rx[ 7: 0]}:
{packet_leng_rx[ 7: 0], packet_leng_rx[15: 8], packet_leng_rx[23:16], packet_leng_rx[31:24]};
// check whether end of file
if (r_rx == 0)
begin
eof_rx = 1;
@(posedge gmii_rxclk_offset);
gmii_rxctrl = 1'b0;
gmii_rxdata = 8'h00;
disable fileread_loop;
end
// send ifg 96bit=12*8
repeat (12)
begin
@(posedge gmii_rxclk_offset)
gmii_rxctrl = 1'b0;
gmii_rxdata = 8'h00;
end
// send frame pre-amble 555555d5=4*8
repeat (3)
begin
@(posedge gmii_rxclk_offset);
gmii_rxctrl = 1'b1;
gmii_rxdata = 8'h55;
end
@(posedge gmii_rxclk_offset)
gmii_rxctrl = 1'b1;
gmii_rxdata = 8'hd5;
// send frame content
for (index_rx=0; index_rx<packet_leng_rx; index_rx=index_rx+1)
begin
r_rx = $fread(packet_byte_rx, feeder_file_rx);
@(posedge gmii_rxclk_offset);
gmii_rxctrl = 1'b1;
gmii_rxdata = packet_byte_rx;
// check whether end of file
if (r_rx == 0)
begin
eof_rx = 1;
@(posedge gmii_rxclk_offset);
gmii_rxctrl = 1'b0;
gmii_rxdata = 8'h00;
disable fileread_loop;
end
end
end_addr_rx = $ftell(feeder_file_rx);
end
$fclose(feeder_file_rx);
gmii_rxctrl = 1'b0;
gmii_rxdata = 8'h00;
end
#100 $stop;
end
 
 
endmodule
/sim/tsu/gmii_tx_bfm.v
0,0 → 1,109
`timescale 1ns/1ns
 
module gmii_tx_bfm
(
output gmii_txclk,
output reg gmii_txctrl,
output reg [7:0] gmii_txdata
);
 
reg gmii_txclk_offset;
initial begin
gmii_txclk_offset = 1'b0;
forever #4 gmii_txclk_offset = !gmii_txclk_offset;
end
assign #2 gmii_txclk = gmii_txclk_offset;
 
integer feeder_file_tx, r_tx;
integer start_addr_tx, end_addr_tx;
integer index_tx;
reg eof_tx;
reg pcap_endian_tx;
reg [31:0] pcap_4bytes_tx;
reg [31:0] packet_leng_tx;
reg [ 7:0] packet_byte_tx;
initial
begin : feeder_tx
gmii_txctrl = 1'b0;
gmii_txdata = 4'd0;
#100;
feeder_file_tx = $fopen("ptpdv2_tx.pcap","rb");
if (feeder_file_tx == 0)
begin
$display("Failed to open ptpdv2_tx.pcap!");
disable feeder_tx;
end
else
begin
// test pcap file endian
r_tx = $fread(pcap_4bytes_tx, feeder_file_tx);
pcap_endian_tx = (pcap_4bytes_tx == 32'ha1b2c3d4)? 1:0;
$fseek(feeder_file_tx, -4, 1);
// skip pcap file header 24*8
$fseek(feeder_file_tx, 24, 1);
// read packet content
eof_tx = 0;
while (!eof_tx & !$feof(feeder_file_tx))
begin : fileread_loop
// skip frame header (8+4)*8
start_addr_tx = $ftell(feeder_file_tx);
$fseek(feeder_file_tx, 8+4, 1);
// get frame length big endian 4*8
r_tx = $fread(packet_leng_tx, feeder_file_tx);
packet_leng_tx = pcap_endian_tx?
{packet_leng_tx[31:24], packet_leng_tx[23:16], packet_leng_tx[15: 8], packet_leng_tx[ 7: 0]}:
{packet_leng_tx[ 7: 0], packet_leng_tx[15: 8], packet_leng_tx[23:16], packet_leng_tx[31:24]};
// check whether end of file
if (r_tx == 0)
begin
eof_tx = 1;
@(posedge gmii_txclk_offset);
gmii_txctrl = 1'b0;
gmii_txdata = 8'h00;
disable fileread_loop;
end
// send ifg 96bit=12*8
repeat (12)
begin
@(posedge gmii_txclk_offset)
gmii_txctrl = 1'b0;
gmii_txdata = 8'h00;
end
// send frame pre-amble 555555d5=4*8
repeat (3)
begin
@(posedge gmii_txclk_offset);
gmii_txctrl = 1'b1;
gmii_txdata = 8'h55;
end
@(posedge gmii_txclk_offset)
gmii_txctrl = 1'b1;
gmii_txdata = 8'hd5;
// send frame content
for (index_tx=0; index_tx<packet_leng_tx; index_tx=index_tx+1)
begin
r_tx = $fread(packet_byte_tx, feeder_file_tx);
@(posedge gmii_txclk_offset);
gmii_txctrl = 1'b1;
gmii_txdata = packet_byte_tx;
// check whether end of file
if (r_tx == 0)
begin
eof_tx = 1;
@(posedge gmii_txclk_offset);
gmii_txctrl = 1'b0;
gmii_txdata = 8'h00;
disable fileread_loop;
end
end
end_addr_tx = $ftell(feeder_file_tx);
end
$fclose(feeder_file_tx);
gmii_txctrl = 1'b0;
gmii_txdata = 8'h00;
end
#100 $stop;
end
 
 
endmodule
/sim/tsu/tsu_queue_tb.v
0,0 → 1,72
`timescale 1ns/1ns
 
module tsu_queue_tb;
 
reg rst;
wire gmii_rxclk;
wire gmii_rxctrl;
wire [7:0] gmii_rxdata;
wire gmii_txclk;
wire gmii_txctrl;
wire [7:0] gmii_txdata;
reg rtc_timer_clk;
reg [79:0] rtc_timer_in;
 
initial begin
DUT_RX.ts_ack = 1'b0;
 
rst = 1'b0;
#10 rst = 1'b1;
#20 rst = 1'b0;
end
 
initial begin
rtc_timer_clk = 1'b0;
forever #4 rtc_timer_clk = !rtc_timer_clk;
end
 
initial begin
rtc_timer_in = 80'd0;
forever @(posedge rtc_timer_clk) rtc_timer_in = rtc_timer_in +1;
end
 
tsu_queue DUT_RX
(
.rst(rst),
 
.gmii_clk(gmii_rxclk),
.gmii_ctrl(gmii_rxctrl),
.gmii_data(gmii_rxdata),
 
.rtc_timer_clk(rtc_timer_clk),
.rtc_timer_in(rtc_timer_in)
);
 
gmii_rx_bfm BFM_RX
(
.gmii_rxclk(gmii_rxclk),
.gmii_rxctrl(gmii_rxctrl),
.gmii_rxdata(gmii_rxdata)
);
 
tsu_queue DUT_TX
(
.rst(rst),
 
.gmii_clk(gmii_txclk),
.gmii_ctrl(gmii_txctrl),
.gmii_data(gmii_txdata),
 
.rtc_timer_clk(rtc_timer_clk),
.rtc_timer_in(rtc_timer_in)
);
 
gmii_tx_bfm BFM_TX
(
.gmii_txclk(gmii_txclk),
.gmii_txctrl(gmii_txctrl),
.gmii_txdata(gmii_txdata)
);
 
endmodule
 
/sim/tsu/sim.do
0,0 → 1,15
quit -sim
 
vlib work
vlog -work work ../../rtl/tsu/tsu_queue.v
vlog -work work ../../rtl/tsu/ptp_parser.v
vlog -work work gmii_rx_bfm.v
vlog -work work gmii_tx_bfm.v
vlog -work work tsu_queue_tb.v
vsim -novopt work.tsu_queue_tb
 
log -r */*
radix -hexadecimal
do wave.do
 
run -all
/sim/tsu/ptpdv2_rx.pcap Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
sim/tsu/ptpdv2_rx.pcap Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: sim/tsu/ptpdv2_tx.pcap =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: sim/tsu/ptpdv2_tx.pcap =================================================================== --- sim/tsu/ptpdv2_tx.pcap (nonexistent) +++ sim/tsu/ptpdv2_tx.pcap (revision 4)
sim/tsu/ptpdv2_tx.pcap Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.