1 //----------------------------------------------------------------------------
2 // Wishbone DDR Controller
4 // (c) Joerg Bornschein (<jb@capsec.org>)
5 //----------------------------------------------------------------------------
7 `include "ddr_include.v"
18 output [`RFIFO_RNG] rfifo_dout,
21 input [ `DQ_RNG] ddr_dq,
22 input [`DQS_RNG] ddr_dqs
25 //----------------------------------------------------------------------------
27 //----------------------------------------------------------------------------
29 wire [`RFIFO_RNG] rfifo_din;
34 .DATA_WIDTH( `RFIFO_WIDTH ),
37 .Data_out( rfifo_dout ),
38 .Empty_out( rfifo_empty ),
39 .ReadEn_in( rfifo_next ),
42 .Data_in( rfifo_din ),
43 .WriteEn_in( rfifo_wr ),
44 .Full_out( rfifo_full ),
50 //----------------------------------------------------------------------------
51 // Clean up incoming 'sample' signal and generate sample_dq
52 //----------------------------------------------------------------------------
56 //always @(negedge clk) sample180 <= sample;
57 wire sample180 = sample;
60 reg sample_dq; // authoritive sample flag (after cleanup)
61 reg sample_dq_delayed; // write to rfifo?
62 reg [3:0] sample_count; // make sure sample_dq is up exactly
63 // BURSTLENGTH/2 cycles
65 always @(posedge clk or posedge reset)
69 sample_dq_delayed <= 0;
72 sample_dq_delayed <= sample_dq;
73 if (sample_count == 0) begin
78 end else if (sample_count == 4) begin
82 sample_count <= sample_count + 1;
87 //----------------------------------------------------------------------------
88 // Sampe DQ and fill RFIFO
89 //----------------------------------------------------------------------------
90 reg [15:0] ddr_dq_low, ddr_dq_high;
92 always @(negedge clk )
100 always @(posedge clk)
105 ddr_dq_high <= ddr_dq;
108 assign rfifo_wr = sample_dq_delayed;
109 assign rfifo_din = { ddr_dq_high, ddr_dq_low };