get rid of ChainControls
[fleet.git] / misc / obsolete-ships / DDR2.ship
1 ship: DDR2
2
3 == Ports ===========================================================
4 data  in:    inAddrRead
5 data  in:    inAddrWrite
6 data  in:    inDataWrite
7
8 data  out:   out
9
10 == TeX ==============================================================
11
12 == Fleeterpreter ====================================================
13     public void service() { }
14 == FleetSim ==============================================================
15
16 == FPGA ==============================================================
17
18   reg         ddr2_addr_r;
19   reg         ddr2_isread;
20   reg         ddr2_write_data_push;
21   reg         ddr2_read_data_pop;
22   reg  [`DATAWIDTH:0]  out_d;
23
24   assign ddr2_addr_r_ = ddr2_addr_r;
25   assign ddr2_isread_ = ddr2_isread;
26   assign ddr2_addr_ = !ddr2_isread ? inAddrWrite_d[31:0] : inAddrRead_d[31:0];
27   assign ddr2_write_data_push_ = ddr2_write_data_push;
28   assign ddr2_read_data_pop_ = ddr2_read_data_pop;
29   assign ddr2_write_data_ = { inDataWrite_d[31:5], inDataWrite_d[4], inDataWrite_d[35:0] };
30 //  assign ddr2_write_data_ = inDataWrite_d[(`DATAWIDTH-1):0];
31   assign out_d_ = out_d;
32
33   always @(posedge clk) begin
34
35     if (!rst) begin
36       `reset
37       ddr2_isread <= 0;
38       ddr2_addr_r <= 0;
39       ddr2_read_data_pop <= 0;
40
41     end else begin
42       `flush
43
44       if (!inAddrRead_r_  && inAddrRead_a)  inAddrRead_a  <= 0;
45       if (!inDataWrite_r_ && inDataWrite_a) inDataWrite_a <= 0;
46       if (!inAddrWrite_r_ && inAddrWrite_a) inAddrWrite_a <= 0;
47       if ( out_r          && out_a)         out_r <= 0;
48
49       if (ddr2_addr_r && !ddr2_addr_a) begin
50          // busy
51       end else if (ddr2_addr_r &&  ddr2_addr_a && !ddr2_isread) begin
52           ddr2_addr_r <= 0;
53           inAddrWrite_a <= 1;
54           inDataWrite_a <= 1;
55           out_d <= { 1'b1, 37'b0 };
56           out_r <= 1;
57       end else if (ddr2_addr_r &&  ddr2_addr_a && ddr2_isread) begin
58           ddr2_addr_r <= 0;
59           inAddrRead_a <= 1;
60           out_d <= { 1'b0, ddr2_read_data[36:0] };
61           out_r <= 1;
62       end else if (!out_r && !out_a && inAddrWrite_r && !inAddrWrite_a && inDataWrite_r && !inDataWrite_a && !ddr2_addr_r && !ddr2_addr_a) begin
63           ddr2_addr_r <= 1;
64           ddr2_isread <= 0;
65       end else if (!out_r && !out_a && inAddrRead_r && !inAddrRead_a && !ddr2_addr_r && !ddr2_addr_a) begin
66           ddr2_addr_r <= 1;
67           ddr2_isread <= 1;
68       end
69     end
70   end
71
72
73 == Test ========================================================
74 #skip
75
76 == Constants ========================================================
77
78 == Contributors =========================================================
79 Adam Megacz <megacz@cs.berkeley.edu>