| `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 |