138 lines
4.5 KiB
Verilog
138 lines
4.5 KiB
Verilog
/*
|
|
Module was made using paper:
|
|
Coding And Scripting Techniques For FSM Designs With
|
|
Synthesis-Optimized, Glitch-Free Outputs
|
|
|
|
by Clifford E. Cummings Sunburst Design, Inc.
|
|
*/
|
|
module bin_7segment(
|
|
input clk, // clock working with 10kHz
|
|
input [15:0] sw, // switches (input)
|
|
output [6:0] seg, // individual segments of number
|
|
output [3:0] an, // anode to select character
|
|
output dp // dot on 7segment display
|
|
);
|
|
|
|
//-------------Internal Constants---------------------------
|
|
parameter SIZE = 2;
|
|
parameter [SIZE-1:0] ONE = 2'b00,
|
|
TWO = 2'b01,
|
|
THREE = 2'b10,
|
|
FOUR = 2'b11;
|
|
|
|
reg [SIZE-1:0] state=ONE, next=TWO;
|
|
reg [3:0] nibble = 'b0 ;
|
|
|
|
//---------State register sequential always block-----------
|
|
always @(posedge clk ) begin
|
|
state <= next;
|
|
end
|
|
//----Next state & outputs, combinational always block------
|
|
|
|
always@(state or sw)begin
|
|
case(state)
|
|
ONE : begin
|
|
next <= TWO;
|
|
nibble <= sw[3:0];
|
|
end
|
|
TWO : begin
|
|
next <= THREE;
|
|
nibble <= sw[7:4];
|
|
end
|
|
THREE : begin
|
|
next <= FOUR;
|
|
nibble <= sw[11:8];
|
|
end
|
|
FOUR : begin
|
|
next <= ONE;
|
|
nibble <= sw[15:12];
|
|
end
|
|
endcase
|
|
end
|
|
|
|
assign seg[6] = ( nibble == 4'h2 ||
|
|
nibble == 4'h3 ||
|
|
nibble == 4'h4 ||
|
|
nibble == 4'h5 ||
|
|
nibble == 4'h6 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'h9 ||
|
|
nibble == 4'hA ||
|
|
nibble == 4'hB ||
|
|
nibble == 4'hD ||
|
|
nibble == 4'hE ||
|
|
nibble == 4'hF ) ? 1'b0 : 1'b1;
|
|
assign seg[5] = ( nibble == 4'h0 ||
|
|
nibble == 4'h4 ||
|
|
nibble == 4'h5 ||
|
|
nibble == 4'h6 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'h9 ||
|
|
nibble == 4'hA ||
|
|
nibble == 4'hB ||
|
|
nibble == 4'hC ||
|
|
nibble == 4'hE ||
|
|
nibble == 4'hF ) ? 1'b0 : 1'b1;
|
|
assign seg[4] = ( nibble == 4'h0 ||
|
|
nibble == 4'h2 ||
|
|
nibble == 4'h6 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'hA ||
|
|
nibble == 4'hB ||
|
|
nibble == 4'hC ||
|
|
nibble == 4'hD ||
|
|
nibble == 4'hE ||
|
|
nibble == 4'hF ) ? 1'b0 : 1'b1;
|
|
assign seg[3] = ( nibble == 4'h0 ||
|
|
nibble == 4'h2 ||
|
|
nibble == 4'h3 ||
|
|
nibble == 4'h5 ||
|
|
nibble == 4'h6 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'h9 ||
|
|
nibble == 4'hB ||
|
|
nibble == 4'hC ||
|
|
nibble == 4'hD ||
|
|
nibble == 4'hE ) ? 1'b0 : 1'b1;
|
|
assign seg[2] = ( nibble == 4'h0 ||
|
|
nibble == 4'h1 ||
|
|
nibble == 4'h3 ||
|
|
nibble == 4'h4 ||
|
|
nibble == 4'h5 ||
|
|
nibble == 4'h6 ||
|
|
nibble == 4'h7 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'h9 ||
|
|
nibble == 4'hA ||
|
|
nibble == 4'hB ||
|
|
nibble == 4'hD ) ? 1'b0 : 1'b1;
|
|
assign seg[1] = ( nibble == 4'h0 ||
|
|
nibble == 4'h1 ||
|
|
nibble == 4'h2 ||
|
|
nibble == 4'h3 ||
|
|
nibble == 4'h4 ||
|
|
nibble == 4'h7 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'h9 ||
|
|
nibble == 4'hA ||
|
|
nibble == 4'hD ) ? 1'b0 : 1'b1;
|
|
assign seg[0] = ( nibble == 4'h0 ||
|
|
nibble == 4'h2 ||
|
|
nibble == 4'h3 ||
|
|
nibble == 4'h5 ||
|
|
nibble == 4'h6 ||
|
|
nibble == 4'h7 ||
|
|
nibble == 4'h8 ||
|
|
nibble == 4'h9 ||
|
|
nibble == 4'hA ||
|
|
nibble == 4'hC ||
|
|
nibble == 4'hE ||
|
|
nibble == 4'hF) ? 1'b0 : 1'b1;
|
|
assign dp = 1'b1; //dot
|
|
|
|
assign an[0] = (state==ONE) ? 1'b0 : 1'b1;
|
|
assign an[1] = (state==TWO) ? 1'b0 : 1'b1;
|
|
assign an[2] = (state==THREE) ? 1'b0 : 1'b1;
|
|
assign an[3] = (state==FOUR) ? 1'b0 : 1'b1;
|
|
|
|
endmodule |