/* shw5spec: by karttu, Jun 21 2005. Show four five-bit integers in the four 7-segment LED display of Spartan-3 board. Show also optional four bits of additional information (DP3-DP0) in their decimal points (note that they are inverted!). Modified from shw4spec.v */ module shw5spec(input CLK, input [4:0] DIG3, input [4:0] DIG2, input [4:0] DIG1, input [4:0] DIG0, input DP3, input DP2, input DP1, input DP0, output [7:0] SEG_OUT, output [3:0] DIGIT_OUT); function [6:0] DIG2LED; input [4:0] DIG; begin case (DIG) 5'b00000 : DIG2LED = 7'b1000000; //0 5'b00001 : DIG2LED = 7'b1111001; //1 5'b00010 : DIG2LED = 7'b0100100; //2 5'b00011 : DIG2LED = 7'b0110000; //3 5'b00100 : DIG2LED = 7'b0011001; //4 5'b00101 : DIG2LED = 7'b0010010; //5 5'b00110 : DIG2LED = 7'b0000010; //6 5'b00111 : DIG2LED = 7'b1111000; //7 5'b01000 : DIG2LED = 7'b0000000; //8 5'b01001 : DIG2LED = 7'b0010000; //9 5'b01010 : DIG2LED = 7'b0001000; //A 5'b01011 : DIG2LED = 7'b0000011; //b 5'b01100 : DIG2LED = 7'b1000110; //C 5'b01101 : DIG2LED = 7'b0100001; //d 5'b01110 : DIG2LED = 7'b0000110; //E 5'b01111 : DIG2LED = 7'b0001110; //F 5'b10000 : DIG2LED = 7'b1000010; //G 5'b10001 : DIG2LED = 7'b0001001; //H default : DIG2LED = 7'b0110110; //"Ksi" endcase end endfunction parameter msb = 16; reg [msb:0] delay_counter = 0; wire [1:0] d = delay_counter[msb:msb-1]; assign SEG_OUT[7] = (0 == d ? DP0 : 1 == d ? DP1 : 2 == d ? DP2 : DP3); assign SEG_OUT[6:0] = DIG2LED(0 == d ? DIG0 : 1 == d ? DIG1 : 2 == d ? DIG2 : DIG3); assign DIGIT_OUT = (0 == d) ? 4'b1110 : (1 == d) ? 4'b1101 : (2 == d) ? 4'b1011 : 4'b0111; always @(posedge CLK) begin delay_counter <= delay_counter+1; // Wraps around, eventually. end endmodule