`timescale 1ns/1ps /* * Chance Reimer * Ver 1 * Date: 8/30/2018 */ module displayNUM(input clk, input rst, input [7:0] data, input reg [1:0] toggle_Display, output reg [7:0] anode, output reg [7:0] _7LED, output reg [2:0] modeLED); //LUT for the display logic [7:0] anodeSelect [0:15]; //here is our select for our Anode use codes 0-9 for our LUT assign anodeSelect[0] = 8'b00000010; //0 //ABCDEFGDP is pinout, active low assign anodeSelect[1] = 8'b10011110; //1 assign anodeSelect[2] = 8'b00100100; //2 assign anodeSelect[3] = 8'b00001100; //3 assign anodeSelect[4] = 8'b10011000; //4 assign anodeSelect[5] = 8'b01001000; //5 assign anodeSelect[6] = 8'b01000000; //6 assign anodeSelect[7] = 8'b00011110; //7 assign anodeSelect[8] = 8'b00000000; //8 assign anodeSelect[9] = 8'b00001000; //9 assign anodeSelect[10] = 8'b00010000; //A assign anodeSelect[11] = 8'b11000000; //b assign anodeSelect[12] = 8'b01100010; //C assign anodeSelect[13] = 8'b10000100; //d assign anodeSelect[14] = 8'b01100000; //E assign anodeSelect[15] = 8'b01110000; //F reg [19:0] refresh; //sets enable for refresh rate reg [3:0] select; //determines what value will be sent out to chosen 7 seg reg [3:0] ones; reg [3:0] tens; reg [3:0] hundreds; wire [2:0] enable; //tells when to switch to next anode //this always block gives the refresh rate for the 7seg display always_ff@(posedge clk or posedge rst) begin if(rst) refresh <= 0; else refresh <= refresh+1; end //this enable value is actually what is checked to move to the next 7seg assign enable = refresh[19:17]; //this will always select the proper output based on the toggle always_ff@(posedge clk) begin ones <= ((data % 100)%10); tens <= (data%100)/10; hundreds <= data/100; end always_comb begin case(toggle_Display) //Toggle is more important than the second one which is now a helper class 2'b00: begin //this is the binary one modeLED = 3'b001; //checker to know what mode we are in case(enable) 3'b000: begin anode = 8'b01111111; //remember all of the anode LED turn ons are active LOW select = data[7]; end 3'b001: begin anode = 8'b10111111; select = data[6]; end 3'b010: begin anode = 8'b11011111; select = data[5]; end 3'b011: begin anode = 8'b11101111; select = data[4]; end 3'b100: begin anode = 8'b11110111; select = data[3]; end 3'b101: begin anode = 8'b11111011; select = data[2]; end 3'b110: begin anode = 8'b11111101; select = data[1]; end 3'b111: begin anode = 8'b11111110; select = data[0]; end endcase end 2'b01:begin //this is the decimal one modeLED = 3'b011; case(enable) 3'b000: begin select = hundreds; anode = 8'b11111011; //this is for the hundreds end 3'b100: begin select = tens; anode = 8'b11111101; //this is for the tens end 3'b110: begin select = ones; anode = 8'b11111110; //This is for the ones end endcase end 2'b10:begin //this is the hexadecimal one modeLED = 3'b111; case(enable) 3'b000: begin select = data/16; anode = 8'b11111101; //for 16^1 end 3'b100: begin select = data%16; anode = 8'b11111110; //for 16^0 end endcase end endcase end //here we assign our LUT to the _7LED always_comb begin case(select) 4'b0000: _7LED = anodeSelect[0]; // 0 4'b0001: _7LED = anodeSelect[1]; // 1 4'b0010: _7LED = anodeSelect[2]; // 2 4'b0011: _7LED = anodeSelect[3]; // 3 4'b0100: _7LED = anodeSelect[4]; // 4 4'b0101: _7LED = anodeSelect[5]; // 5 4'b0110: _7LED = anodeSelect[6]; // 6 4'b0111: _7LED = anodeSelect[7]; // 7 4'b1000: _7LED = anodeSelect[8]; // 8 4'b1001: _7LED = anodeSelect[9]; // 9 4'b1010: _7LED = anodeSelect[10]; // A 4'b1011: _7LED = anodeSelect[11]; // B 4'b1100: _7LED = anodeSelect[12]; // C 4'b1101: _7LED = anodeSelect[13]; // D 4'b1110: _7LED = anodeSelect[14]; // E 4'b1111: _7LED = anodeSelect[15]; // F default: _7LED = anodeSelect[0]; // 0 endcase end endmodule