123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- `include "bcd_to_7seg.v"
-
-
- module digit_driver
- #(
- parameter D = 28'd0
- )
- (
- input clk, input [19:0] number, input dot, output [7:0] segs, output [4:0] digs
- );
-
- // io for 7seg
- reg [2:0] active_digit;
- wire [4:0] buf_digs;
-
- wire [19:0] number;
- wire [3:0] a_number;
- wire [6:0] seg_out;
-
- bcd_to_7seg bcd_to_7seg_inst(
- .bcd_in(a_number),
- .seg_out(seg_out)
- );
-
- // see bcd_to_7seg.v for segments placement
- // common anode ~seg_out[], common cathode seg_out[]
-
- assign segs = { dot, seg_out };
-
- assign buf_digs = (number > 20'hFFFF) ? 5'b11111 :
- (number > 20'hFFF) ? 5'b01111 :
- (number > 20'hFF) ? 5'b00111 :
- (number > 20'hF) ? 5'b00011 :
- 5'b00001; // default shouldn't happen
-
- assign digs = buf_digs & (1'b1 << active_digit);
- assign a_number = (number & (4'b1111 << (active_digit*4))) >> (active_digit*4);
-
- always @(posedge clk)
- begin
- active_digit <= active_digit + 1'b1;
- if(active_digit > 3'd3)
- active_digit <= 1'b0;
- end
-
-
-
- endmodule
|