| 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 |