19
19
//
20
20
// ////////////////////////////////////////////////////////////////////////////////
21
21
module top (
22
- input clk,
23
- input rst,
22
+ input clk,
23
+ // input rst,
24
24
// output [15:0] tp,
25
- output a,
26
- output b,
27
- output c,
28
- input spi_clk, spi_mosi, spi_ssel_n,
29
- output spi_miso,
30
- input [7 :0 ] adc_d,
31
- input adc_clk,
32
- output led
25
+ output a,
26
+ output b,
27
+ output c,
28
+ input spi_clk, spi_mosi, spi_ssel_n,
29
+ output spi_miso,
30
+ input [7 :0 ] adc_d,
31
+ input adc_clk,
32
+ output led,
33
+ output status
33
34
);
34
35
35
36
reg [23 :0 ] count;
36
37
reg [2 :0 ] spi_clk_reg;
37
38
reg spi_mosi_reg;
38
39
reg [15 :0 ] spi_idr;
39
- reg ssel_reg;
40
+ reg [ 2 : 0 ] ssel_reg;
40
41
reg [7 :0 ] spi_odr;
42
+
43
+ // 2Kx9 2048 8 1 (7:0) (0:0) (10:0) RAMB16_S9 18K
44
+ reg mem_we;
45
+ reg [7 :0 ] mem_data;
46
+ reg [7 :0 ] mem[8191 :0 ];
47
+ reg [7 :0 ] mem_q;
48
+ reg [12 :0 ] mem_addr;
49
+
50
+ reg [2 :0 ] bitcnt;
51
+
52
+
53
+ always @(posedge adc_clk) begin
54
+ mem_q <= mem[mem_addr];
55
+ if (mem_we) mem[mem_addr] <= mem_data;
56
+ end
57
+
41
58
42
59
// assign tp = count;
43
60
assign a = clk;
@@ -46,25 +63,54 @@ module top(
46
63
47
64
// assign spi_miso = (spi_ssel_n) ? 1'bz : spi_odr[7];
48
65
assign spi_miso = spi_odr[7 ];
49
-
66
+ assign status = mem_we;
50
67
// assign adc_clk = clk;
51
68
assign led = (spi_idr[15 ]) ? count[20 ] : count[23 ];
52
-
69
+
70
+
53
71
always @(posedge adc_clk) begin
72
+ if (spi_mosi_reg)
73
+ mem_data <= mem_addr[7 :0 ];
74
+ else
75
+ mem_data <= adc_d;
54
76
count <= count + 1'b1 ;
55
77
56
- ssel_reg <= ~ spi_ssel_n;
78
+ ssel_reg <= {ssel_reg[ 1 : 0 ], ~ spi_ssel_n} ;
57
79
spi_clk_reg <= {spi_clk_reg[1 :0 ], spi_clk};
58
80
spi_mosi_reg <= spi_mosi;
59
81
60
- if (ssel_reg == 1'b1 ) begin
61
- if (spi_clk_reg == 3'b001 ) begin
82
+ // if (ssel_reg == 1'b1) begin
83
+ // if (sese
84
+ if (ssel_reg == 3'b011 ) begin
85
+ mem_addr <= 1'b0 ;
86
+ mem_we <= 1'b0 ;
87
+ bitcnt <= 7 ;
88
+ end
89
+ if (ssel_reg == 3'b100 ) begin
90
+ mem_addr <= 0 ;
91
+ mem_addr <= 1'b1 ;
92
+ mem_we <= 1'b1 ;
93
+ end
94
+ if (ssel_reg == 3'b111 ) begin
95
+ if (spi_clk_reg == 3'b011 ) begin
62
96
spi_idr <= {spi_idr[14 :0 ], spi_mosi_reg};
63
- spi_odr <= {spi_odr[6 :0 ], spi_idr[7 ]};
97
+ // spi_odr <= {spi_odr[6:0], spi_idr[7]};
98
+ bitcnt <= bitcnt + 1 ;
99
+ if (bitcnt == 5 )
100
+ mem_addr <= mem_addr + 1 ;
101
+ if (bitcnt == 7 )
102
+ spi_odr <= mem_q;
103
+ else
104
+ spi_odr <= {spi_odr[6 :0 ], 1'b0 };
64
105
end
65
106
end
66
- else begin
67
- spi_odr <= adc_d;
107
+ if (ssel_reg == 3'b000 ) begin
108
+ if (mem_addr != 13'b1111111111111 ) begin
109
+ mem_addr <= mem_addr + 1 ;
110
+ end
111
+ else begin
112
+ mem_we <= 1'b0 ;
113
+ end
68
114
end
69
115
end
70
116
0 commit comments