Skip to content

Commit ce3017d

Browse files
authored
Merge pull request #210 from brilliantlabsAR/raj/wip-cdc
Graphics CDC & auto clear
2 parents a2dca00 + 7b34390 commit ce3017d

File tree

8 files changed

+27472
-27501
lines changed

8 files changed

+27472
-27501
lines changed

source/application/lua_libraries/display.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -293,14 +293,7 @@ static int lua_display_text(lua_State *L)
293293

294294
static int lua_display_show(lua_State *L)
295295
{
296-
// TODO remove blocking once we have a better solution
297-
298296
spi_write(FPGA, 0x14, NULL, 0);
299-
nrfx_systick_delay_ms(25);
300-
301-
spi_write(FPGA, 0x10, NULL, 0);
302-
nrfx_systick_delay_ms(20);
303-
304297
return 0;
305298
}
306299

source/fpga/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
BUILD := ../../build
2626
TOOLCHAIN ?= YOSYS
27-
RADIANT_PATH ?= /opt/lscc/radiant/2023.1/bin/lin64
27+
RADIANT_PATH ?= /opt/lscc/radiant/2023.2/bin/lin64
2828

2929
fpga_application.h: $(shell find . | egrep '.sv|.pdc')
3030
@mkdir -p $(BUILD)

source/fpga/fpga_application.h

Lines changed: 27188 additions & 27301 deletions
Large diffs are not rendered by default.

source/fpga/modules/graphics/display_buffers.sv

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ logic [3:0] display_ram_write_data;
101101
logic display_ram_write_enable_a;
102102
logic display_ram_write_enable_b;
103103

104+
logic clear_flag;
105+
logic [18:0] clear_address_counter;
106+
104107
display_buffer buffer_a (
105108
.clock(clock_in),
106109
.reset_n(reset_n_in),
@@ -121,7 +124,7 @@ display_buffer buffer_b (
121124
.write_enable(display_ram_write_enable_b)
122125
);
123126

124-
// Buffer switching logic
127+
// Buffer switching & clearing logic
125128
enum logic {BUFFER_A, BUFFER_B} displayed_buffer;
126129
logic [1:0] switch_write_buffer_edge_monitor;
127130
logic buffer_switch_pending;
@@ -132,6 +135,8 @@ always_ff @(posedge clock_in) begin
132135
displayed_buffer <= BUFFER_A;
133136
switch_write_buffer_edge_monitor <= 'b00;
134137
buffer_switch_pending <= 0;
138+
clear_flag <= 0;
139+
clear_address_counter <= 0;
135140
end
136141

137142
else begin
@@ -155,6 +160,17 @@ always_ff @(posedge clock_in) begin
155160
end
156161

157162
buffer_switch_pending <= 0;
163+
164+
clear_flag <= 1;
165+
clear_address_counter <= 0;
166+
end
167+
168+
if (clear_flag == 1) begin
169+
clear_address_counter <= clear_address_counter + 1;
170+
171+
if (clear_address_counter == 'd512000) begin
172+
clear_flag <= 0;
173+
end
158174
end
159175

160176
end
@@ -171,12 +187,22 @@ always_ff @(posedge clock_in) begin
171187

172188
else begin
173189
if (displayed_buffer == BUFFER_A) begin
174-
display_ram_address_a <= pixel_read_address_in;
175-
display_ram_address_b <= pixel_write_address_in;
190+
if (clear_flag == 1) begin
191+
display_ram_address_b <= clear_address_counter >> 1;
192+
end else begin
193+
display_ram_address_b <= pixel_write_address_in;
194+
end
195+
196+
display_ram_address_a <= pixel_read_address_in;
176197
end
177198

178199
else begin
179-
display_ram_address_a <= pixel_write_address_in;
200+
if (clear_flag == 1) begin
201+
display_ram_address_a <= clear_address_counter >> 1;
202+
end else begin
203+
display_ram_address_a <= pixel_write_address_in;
204+
end
205+
180206
display_ram_address_b <= pixel_read_address_in;
181207
end
182208
end
@@ -197,24 +223,31 @@ always_ff @(posedge clock_in) begin
197223

198224
else begin
199225
pixel_read_data_out <= display_ram_read_data_b;
200-
201226
end
202227

203228
end
204229

205230
// RAM writing logic
206231
always_ff @(posedge clock_in) begin
207232

208-
display_ram_write_data <= pixel_write_data_in;
209-
210-
// Select one of the four enables based on write address and selected buffer
211-
display_ram_write_enable_a <= displayed_buffer == BUFFER_B &&
212-
pixel_write_enable_in == 1
213-
? 1 : 0;
233+
if (clear_flag == 1) begin
234+
display_ram_write_data <= 0;
235+
end else begin
236+
display_ram_write_data <= pixel_write_data_in;
237+
end
214238

215-
display_ram_write_enable_b <= displayed_buffer == BUFFER_A &&
216-
pixel_write_enable_in == 1
217-
? 1 : 0;
239+
if (pixel_write_enable_in == 1 || clear_flag == 1) begin
240+
if (displayed_buffer == BUFFER_A) begin
241+
display_ram_write_enable_a <= 0;
242+
display_ram_write_enable_b <= 1;
243+
end else begin
244+
display_ram_write_enable_a <= 1;
245+
display_ram_write_enable_b <= 0;
246+
end
247+
end else begin
248+
display_ram_write_enable_a <= 0;
249+
display_ram_write_enable_b <= 0;
250+
end
218251

219252
end
220253

0 commit comments

Comments
 (0)