blinky example
authorDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 28 Dec 2021 16:11:57 +0000 (17:11 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Tue, 28 Dec 2021 16:11:57 +0000 (17:11 +0100)
Makefile
blinky.v [new file with mode: 0644]

index 0dee4e6..4da60c3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,5 @@
 PROJ:=led
 PROJ:=led
+PROJ=blinky
 TRELLIS?=/usr/share/trellis
 
 all: ${PROJ}.bit
 TRELLIS?=/usr/share/trellis
 
 all: ${PROJ}.bit
diff --git a/blinky.v b/blinky.v
new file mode 100644 (file)
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