I am using the ADC 5282 evaluation module to capture data. Currently I'm just trying to develop the code for it. I'm using verilog and I've connected it to a terASIC DE4 FPGA board which uses a Stratix IV with on chip termination for LVDS.
Here are the test modes and data out:
Deskew: 0x555 (LSB First) or 0xAAA (MSB first)
Sync: 0x2F4 (LSB First) or 0xDOB (MSB first)
I delayed the Frame clock by 1 bit clock cycle and get the same Deskew values but differen Sync values.
Sync: 0xF42 (LSB First) or 0xOBD (MSB first)
I know the proper values are 0xFC0 or 0x03F. I've added my SystemVerilog DDR and S2P blocks below. I assume I am making a common mistake. I also assume 0xAAA or 0x555 is the correct Deskew values. I'm not sure where the problem is. It looks like I have at least two bit flips.
always @ (posedge ddr_clk or negedge reset) begin if (!reset) begin d_n <= 1'b0; d_p <= 1'b0; end else begin d_p <= ddr_in; d_n <= relatch; end end always @ (negedge ddr_clk or negedge reset) begin if (!reset) begin relatch <= 1'b0; end else begin relatch <= ddr_in; end end always @ (posedge bit_clk or negedge reset) begin if (!reset) begin d0 <= 1'b0; d1 <= 1'b0; d2 <= 1'b0; d3 <= 1'b0; d4 <= 1'b0; d5 <= 1'b0; d6 <= 1'b0; d7 <= 1'b0; d8 <= 1'b0; d9 <= 1'b0; d10 <= 1'b0; d11 <= 1'b0; end else begin d1 <= d3; d3 <= d5; d5 <= d7; d7 <= d9; d9 <= d11; d11 <= d_n; d0 <= d2; d2 <= d4; d4 <= d6; d6 <= d8; d8 <= d10; d10 <= d_p; end end always @ (posedge frame_clk or negedge reset) begin if (!reset) begin word <= 12'b0; end else begin word <= {d11, d10, d9, d8, d7, d6, d5, d4, d3, d2, d1, d0}; end end endmodule