| module example ( |
| input clk, |
| input SW1, |
| input SW2, |
| output LED1, |
| output LED2, |
| output LED3, |
| output LED4, |
| |
| output AA, AB, AC, AD, |
| output AE, AF, AG, CA |
| ); |
| |
| localparam BITS = 8; |
| localparam LOG2DELAY = 22; |
| |
| reg [BITS+LOG2DELAY-1:0] counter = 0; |
| reg [BITS-1:0] outcnt; |
| |
| always @(posedge clk) begin |
| counter <= counter + SW1 + SW2 + 1; |
| outcnt <= counter >> LOG2DELAY; |
| end |
| |
| assign {LED1, LED2, LED3, LED4} = outcnt ^ (outcnt >> 1); |
| |
| // assign CA = counter[10]; |
| // seg7enc seg7encinst ( |
| // .seg({AA, AB, AC, AD, AE, AF, AG}), |
| // .dat(CA ? outcnt[3:0] : outcnt[7:4]) |
| // ); |
| |
| assign {AA, AB, AC, AD, AE, AF, AG} = ~(7'b 100_0000 >> outcnt[6:4]); |
| assign CA = outcnt[7]; |
| endmodule |
| |
| module seg7enc ( |
| input [3:0] dat, |
| output [6:0] seg |
| ); |
| reg [6:0] seg_inv; |
| always @* begin |
| seg_inv = 0; |
| case (dat) |
| 4'h0: seg_inv = 7'b 0111111; |
| 4'h1: seg_inv = 7'b 0000110; |
| 4'h2: seg_inv = 7'b 1011011; |
| 4'h3: seg_inv = 7'b 1001111; |
| 4'h4: seg_inv = 7'b 1100110; |
| 4'h5: seg_inv = 7'b 1101101; |
| 4'h6: seg_inv = 7'b 1111101; |
| 4'h7: seg_inv = 7'b 0000111; |
| 4'h8: seg_inv = 7'b 1111111; |
| 4'h9: seg_inv = 7'b 1101111; |
| 4'hA: seg_inv = 7'b 1110111; |
| 4'hB: seg_inv = 7'b 1111100; |
| 4'hC: seg_inv = 7'b 0111001; |
| 4'hD: seg_inv = 7'b 1011110; |
| 4'hE: seg_inv = 7'b 1111001; |
| 4'hF: seg_inv = 7'b 1110001; |
| endcase |
| end |
| assign seg = ~seg_inv; |
| endmodule |