Преглед изворни кода

cores/usb: Update tx testbench for bitstuffing border cases

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Sylvain Munaut пре 5 година
родитељ
комит
7a644d54f3
1 измењених фајлова са 25 додато и 6 уклоњено
  1. 25 6
      cores/usb/sim/usb_tx_tb.v

+ 25 - 6
cores/usb/sim/usb_tx_tb.v

@@ -45,6 +45,7 @@ module usb_tx_tb;
 	wire pkt_done;
 	wire [3:0] pkt_pid;
 	wire [9:0] pkt_len;
+	reg  [11:0] pkt_data_addr;
 	reg  [7:0] pkt_data;
 	wire pkt_data_ack;
 
@@ -57,7 +58,7 @@ module usb_tx_tb;
 	// Reset pulse
 	initial begin
 		# 200 rst = 0;
-		# 1000000 $finish;
+		# 400000 $finish;
 	end
 
 	// Clocks
@@ -76,6 +77,7 @@ module usb_tx_tb;
 		.rst(rst)
 	);
 
+`ifndef NO_PKT
 	usb_tx_pkt tx_pkt_I (
 		.ll_start(ll_start),
 		.ll_bit(ll_bit),
@@ -113,16 +115,31 @@ module usb_tx_tb;
 	assign pkt_start = (cnt == 8'hff) & ready;
 
 	// Packet
-	assign pkt_len = 10'h000;	// 16 bytes payload
-//	assign pkt_pid = 4'b0011;	// DATA0
-	assign pkt_pid = 4'b0010;	// ACK
+	assign pkt_len = 10'h100;	// 256 bytes payload
+	assign pkt_pid = 4'b0011;	// DATA0
+//	assign pkt_pid = 4'b0010;	// ACK
 
 	// Fake data source
 	always @(posedge clk_48m)
 		if (rst)
-			pkt_data <= 8'h5a;
+			pkt_data_addr <= 8'h00;
 		else
-			pkt_data <= pkt_data + pkt_data_ack;
+			pkt_data_addr <= pkt_data_addr + pkt_data_ack;
+
+	always @(*)
+		case (pkt_data_addr)
+			12'h000: pkt_data = 8'h8c;
+			12'h001: pkt_data = 8'h1a;
+			12'h002: pkt_data = 8'hf2;
+			12'h003: pkt_data = 8'hf0;
+
+			12'h100: pkt_data = 8'ha0;
+			12'h101: pkt_data = 8'h28;
+			12'h102: pkt_data = 8'hf2;
+			12'h103: pkt_data = 8'hf0;
+			default: pkt_data = 8'h00;
+		endcase
+`endif
 
 `ifdef NO_PKT
 	wire [31:0] bit_seq = 32'b00000001_10100101_11111111_11100000;
@@ -149,4 +166,6 @@ module usb_tx_tb;
 	assign ll_last  = cnt[4:0] == 31;
 `endif
 
+	wire trig = tx_ll_I.ll_last & tx_ll_I.br_now & tx_ll_I.bs_now;
+
 endmodule // usb_tx_tb