| `default_nettype none | |
| // ============================================================================ | |
| module serdes_test # | |
| ( | |
| parameter DATA_WIDTH = 8, | |
| parameter DATA_RATE = "DDR" | |
| ) | |
| ( | |
| input wire SYSCLK, | |
| input wire CLKDIV, | |
| input wire RST, | |
| input wire I_DAT, | |
| output wire O_DAT, | |
| output wire T_DAT, | |
| input wire [7:0] INPUTS, | |
| output wire [7:0] OUTPUTS | |
| ); | |
| // ============================================================================ | |
| // CLKDIV generation using a BUFR | |
| wire i_rstdiv; | |
| // ISERDES reset generator | |
| reg [3:0] rst_sr; | |
| initial rst_sr <= 4'hF; | |
| always @(posedge CLKDIV) | |
| if (RST) rst_sr <= 4'hF; | |
| else rst_sr <= rst_sr >> 1; | |
| assign i_rstdiv = rst_sr[0]; | |
| // OSERDES | |
| OSERDESE2 #( | |
| .DATA_RATE_OQ (DATA_RATE), | |
| .DATA_WIDTH (DATA_WIDTH), | |
| .DATA_RATE_TQ ((DATA_RATE == "DDR" && DATA_WIDTH == 4) ? "DDR" : "BUF"), | |
| .TRISTATE_WIDTH ((DATA_RATE == "DDR" && DATA_WIDTH == 4) ? 4 : 1) | |
| ) | |
| oserdes | |
| ( | |
| .CLK (SYSCLK), | |
| .CLKDIV (CLKDIV), | |
| .RST (i_rstdiv), | |
| .OCE (1'b1), | |
| .D1 (INPUTS[0]), | |
| .D2 (INPUTS[1]), | |
| .D3 (INPUTS[2]), | |
| .D4 (INPUTS[3]), | |
| .D5 (INPUTS[4]), | |
| .D6 (INPUTS[5]), | |
| .D7 (INPUTS[6]), | |
| .D8 (INPUTS[7]), | |
| .OQ (O_DAT), | |
| .TCE (1'b1), | |
| .T1 (1'b0), // All 0 to keep OBUFT always on. | |
| .T2 (1'b0), | |
| .T3 (1'b0), | |
| .T4 (1'b0), | |
| .TQ (T_DAT) | |
| ); | |
| // ============================================================================ | |
| // ISERDES | |
| ISERDESE2 # | |
| ( | |
| .DATA_RATE (DATA_RATE), | |
| .DATA_WIDTH (DATA_WIDTH), | |
| .INTERFACE_TYPE ("NETWORKING"), | |
| .NUM_CE (2) | |
| ) | |
| iserdes | |
| ( | |
| .CLK (SYSCLK), | |
| .CLKB (SYSCLK), | |
| .CLKDIV (CLKDIV), | |
| .CE1 (1'b1), | |
| .CE2 (1'b1), | |
| .RST (i_rstdiv), | |
| .D (I_DAT), | |
| .Q1 (OUTPUTS[7]), | |
| .Q2 (OUTPUTS[6]), | |
| .Q3 (OUTPUTS[5]), | |
| .Q4 (OUTPUTS[4]), | |
| .Q5 (OUTPUTS[3]), | |
| .Q6 (OUTPUTS[2]), | |
| .Q7 (OUTPUTS[1]), | |
| .Q8 (OUTPUTS[0]) | |
| ); | |
| endmodule |