From: Dobrica Pavlinusic Date: Tue, 28 Dec 2021 16:11:57 +0000 (+0100) Subject: blinky example X-Git-Url: http://git.rot13.org/?p=trilby-hat-fpga;a=commitdiff_plain;h=94f1c3ae970b2b16d238977c1e8d09cd78d28386 blinky example --- diff --git a/Makefile b/Makefile index 0dee4e6..4da60c3 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ PROJ:=led +PROJ=blinky TRELLIS?=/usr/share/trellis all: ${PROJ}.bit diff --git a/blinky.v b/blinky.v new file mode 100644 index 0000000..5740e07 --- /dev/null +++ b/blinky.v @@ -0,0 +1,51 @@ +module top(input clk, + //#input btn, + output green_led_d7, + output orange_led_d8, + output red_led_d5, + output yellow_led_d6 + ); + localparam ctr_width = 24; + localparam ctr_max = 2**ctr_width - 1; + reg [ctr_width-1:0] ctr = 0; + reg [9:0] pwm_ctr = 0; + reg dir = 0; + reg btn = 0; + + always@(posedge clk) begin + ctr <= dir ? ctr - 1'b1 - btn: ctr + 1'b1 + btn; + if (ctr[ctr_width-1 : ctr_width-3] == 0 && dir == 1) + dir <= 1'b0; + else if (ctr[ctr_width-1 : ctr_width-3] == 7 && dir == 0) + dir <= 1'b1; + pwm_ctr <= pwm_ctr + 1'b1; + end + + reg [9:0] brightness [0:7]; + localparam bright_max = 2**10 - 1; + reg [7:0] led_reg; + + genvar i; + generate + for (i = 0; i < 8; i=i+1) begin + always @ (posedge clk) begin + if (ctr[ctr_width-1 : ctr_width-3] == i) + brightness[i] <= bright_max; + else if (ctr[ctr_width-1 : ctr_width-3] == (i - 1)) + brightness[i] <= ctr[ctr_width-4:ctr_width-13]; + else if (ctr[ctr_width-1 : ctr_width-3] == (i + 1)) + brightness[i] <= bright_max - ctr[ctr_width-4:ctr_width-13]; + else + brightness[i] <= 0; + led_reg[i] <= pwm_ctr < brightness[i]; + end + end + endgenerate + + // assign led = led_reg; + assign green_led_d7 = led_reg[0]; + assign orange_led_d8 = led_reg[1]; + assign red_led_d5 = led_reg[2]; + assign yellow_led_d6 = led_reg[3]; + +endmodule