forked from YosysHQ/icestorm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add UltraPlus LED driver support and demo
- Loading branch information
Showing
6 changed files
with
171 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
*.bin | ||
*.blif | ||
*.asc | ||
*.rpt | ||
*.glb | ||
*.psb | ||
*.sdf | ||
*.vsb | ||
*.bin | ||
*.tmp/ | ||
*.exp | ||
*.vlog |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
PROJ = rgb | ||
PIN_DEF = rgb.pcf | ||
DEVICE = up5k | ||
# Relative paths for easier development without messing with installed version | ||
ARACHNE = ../../../arachne-pnr/bin/arachne-pnr | ||
ARACHNE_ARGS = -c ../../icebox/chipdb-5k.txt | ||
ICEPACK = ../../icepack/icepack | ||
ICETIME = ../../icetime/icetime | ||
ICEPROG = ../../iceprog/iceprog | ||
|
||
all: $(PROJ).bin | ||
|
||
%.blif: %.v | ||
yosys -p 'synth_ice40 -top top -blif $@' $< | ||
|
||
%.asc: $(PIN_DEF) %.blif | ||
$(ARACHNE) $(ARACHNE_ARGS) -d $(subst up,,$(subst hx,,$(subst lp,,$(DEVICE)))) -o $@ -p $^ | ||
|
||
%.bin: %.asc | ||
$(ICEPACK) $< $@ | ||
|
||
%.rpt: %.asc | ||
$(ICETIME) -d $(DEVICE) -mtr $@ $< | ||
|
||
prog: $(PROJ).bin | ||
$(ICEPROG) -S $< | ||
|
||
sudo-prog: $(PROJ).bin | ||
@echo 'Executing prog as root!!!' | ||
sudo $(ICEPROG) -S $< | ||
|
||
clean: | ||
rm -f $(PROJ).blif $(PROJ).asc $(PROJ).rpt $(PROJ).bin | ||
|
||
.SECONDARY: | ||
.PHONY: all prog clean |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
set_io RGB0 39 | ||
set_io RGB1 40 | ||
set_io RGB2 41 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
module top( | ||
output RGB0, RGB1, RGB2 | ||
); | ||
|
||
wire clk; | ||
|
||
SB_HFOSC inthosc ( | ||
.CLKHFPU(1'b1), | ||
.CLKHFEN(1'b1), | ||
.CLKHF(clk) | ||
); | ||
|
||
localparam counter_width = 30; | ||
|
||
reg [counter_width-1:0] ctr; | ||
|
||
always@(posedge clk) | ||
begin | ||
ctr <= ctr + 1; | ||
end | ||
|
||
localparam pwm_width = 12; | ||
|
||
localparam pwm_max = (2**pwm_width) - 1; | ||
localparam pwm_max_div4 = (2**(pwm_width-2)) - 1; | ||
|
||
|
||
wire [1:0] phase = ctr[counter_width - 1 : counter_width - 2]; | ||
wire [pwm_width-1:0] fade = ctr[counter_width - 3 : counter_width - (2 + pwm_width)]; | ||
wire [pwm_width-1:0] fade_div4 = ctr[counter_width - 3 : counter_width - (pwm_width)]; | ||
|
||
wire [pwm_width-1:0] r_val, g_val, b_val; | ||
|
||
// Fade R->G->B->W-> | ||
assign r_val = (phase == 0) ? pwm_max_div4 + (3 * fade_div4) : | ||
(phase == 1) ? pwm_max - fade : | ||
(phase == 3) ? fade_div4 : | ||
0; | ||
|
||
assign g_val = (phase == 0) ? pwm_max_div4 - fade_div4: | ||
(phase == 1) ? fade : | ||
(phase == 2) ? pwm_max - fade : | ||
(phase == 3) ? fade_div4 : | ||
0; | ||
|
||
assign b_val = (phase == 0) ? pwm_max_div4 - fade_div4: | ||
(phase == 2) ? fade : | ||
(phase == 3) ? pwm_max - (3 * fade_div4) : | ||
0; | ||
|
||
reg [pwm_width-1:0] pwm_ctr; | ||
|
||
reg pwm_r, pwm_g, pwm_b; | ||
|
||
always@(posedge clk) | ||
begin | ||
pwm_ctr <= pwm_ctr + 1; | ||
pwm_r <= (pwm_ctr < r_val) ? 1'b1 : 1'b0; | ||
pwm_g <= (pwm_ctr < g_val) ? 1'b1 : 1'b0; | ||
pwm_b <= (pwm_ctr < b_val) ? 1'b1 : 1'b0; | ||
end | ||
|
||
SB_RGBA_DRV RGBA_DRIVER ( | ||
.CURREN(1'b1), | ||
.RGBLEDEN(1'b1), | ||
.RGB0PWM(pwm_g), | ||
.RGB1PWM(pwm_b), | ||
.RGB2PWM(pwm_r), | ||
.RGB0(RGB0), | ||
.RGB1(RGB1), | ||
.RGB2(RGB2) | ||
); | ||
|
||
|
||
defparam RGBA_DRIVER.CURRENT_MODE = "0b1"; | ||
defparam RGBA_DRIVER.RGB0_CURRENT = "0b000001"; | ||
defparam RGBA_DRIVER.RGB1_CURRENT = "0b000011"; | ||
defparam RGBA_DRIVER.RGB2_CURRENT = "0b000011"; | ||
|
||
|
||
endmodule |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters