76
CONTENTS PROGRAMMING (using VHDL and VERILOG) 1. Write HDL code to realize all the logic gates 2. Write a HDL program for the following combinational designs A. 2 to 4 decoder B. 8 to 3 (encoder without priority & with priority) C. 8 to 1 multiplexer D. 4 bit binary to gray converter E. Multiplexer, demultiplexer, comparator 3. Write a HDL code to describe the functions of a full adder using following modeling styles, 4. Write a model for 32-bit ALU using the schematic diagram shown below. a (31:0) b (31:0) ALU should use combinational logic to calculate an output based on the four bit op-code input. ALU should pass the result to the out bus when enable line in high, and tri-state the out bus when the enable line is low. ALU should decode the 4 bit op-code according to the given in example below OPCODE ALU OPERATION 1 A + B 2 A - B 3 A Complement 4 A * B 5 A AND B 6 A OR B 7 A NAND B 8 A XOR B 5. Develop the HDL codes for the following flip-flops, SR, D, JK, T. 6. Design 4 bit binary, BCD counters (synchronous reset and asynchronous reset) and “any sequence” counters. Interfacing (At least four of the following must be covered using VHDL /VERILOG) 1. Write HDL code to display messages on the given seven segment display and LCD and accepting hex key pad input data. 2. Write HDL code to control speed, direction of dc and stepper motor. 3. Write VHDL code to generate different waveforms (sine square triangle, ramp etc) using DAC change the frequency and amplitude 4. Write VHDL code to control external lights using relays. 5. Write a HDL code to accept 8 channel analog signal, temperature sensors and display the data on lcd panel or seven segment display 6. Write VHDL code to simulate elevator operations OPCODE(3:0) ENABLE OUT

HDL Lab Manual

Embed Size (px)

Citation preview

Page 1: HDL Lab Manual

CONTENTS

PROGRAMMING (using VHDL and VERILOG) 1. Write HDL code to realize all the logic gates

2. Write a HDL program for the following combinational designs

A. 2 to 4 decoder

B. 8 to 3 (encoder without priority & with priority)

C. 8 to 1 multiplexer

D. 4 bit binary to gray converter

E. Multiplexer, demultiplexer, comparator

3. Write a HDL code to describe the functions of a full adder using following modeling styles,

4. Write a model for 32-bit ALU using the schematic diagram shown below.

a (31:0) b (31:0)

ALU should use combinational logic to calculate an output based on the four bit op-code input.

ALU should pass the result to the out bus when enable line in high, and tri-state the out bus when the

enable line is low.

ALU should decode the 4 bit op-code according to the given in example below

OPCODE ALU OPERATION

1 A + B

2 A - B

3 A Complement

4 A * B

5 A AND B

6 A OR B

7 A NAND B

8 A XOR B

5. Develop the HDL codes for the following flip-flops, SR, D, JK, T.

6. Design 4 bit binary, BCD counters (synchronous reset and asynchronous reset) and “any

sequence” counters.

Interfacing (At least four of the following must be covered using VHDL /VERILOG) 1. Write HDL code to display messages on the given seven segment display and LCD and accepting

hex key pad input data.

2. Write HDL code to control speed, direction of dc and stepper motor.

3. Write VHDL code to generate different waveforms (sine square triangle, ramp etc) using DAC

change the frequency and amplitude

4. Write VHDL code to control external lights using relays.

5. Write a HDL code to accept 8 channel analog signal, temperature sensors and display the data on

lcd panel or seven segment display

6. Write VHDL code to simulate elevator operations

OPCODE(3:0)

ENABLE

OUT

Page 2: HDL Lab Manual

HDL LAB (06ECL48)

2 Department of Electronics & Communication, K.I.T, Tiptur

Extra program in HDL Lab 1) Write HDL code for full adder using structural design

2) Write HDL code for a carry look ahead adder

3) Write HDL code for 9bit parity generator using structural design

4) Design a ripple counter for given sequence 0-1-3-5-7-9-11-13-15-0 using JK flip flop

5) Write HDL code for the given mealy FSM state table

0 1

ST0 ST0

0

ST3

1

ST1 ST1

1

ST0

0

ST2 ST2

0

ST1

1

ST3 ST2

0

ST1

0

6) Write a HDL program for the given more FSM state diagram

Entries in table are

next state, input A

and output Z

ST1

ST1

ST1

ST1

A=’1’

A=’0’

Z<=’1’

A=’1’

A=’1’

A=’1’

A=’0’

A=’0’ Z<=’1’

Z<=’0’

Page 3: HDL Lab Manual

HDL LAB (06ECL48)

3 Department of Electronics & Communication, K.I.T, Tiptur

1.a) VHDL CODE FOR ALL THE BASIC GATES.

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY GATES IS

PORT ( A : IN STD_LOGIC;

B : IN STD_LOGIC;

OP_NOT : OUT STD_LOGIC;

OP_OR : OUT STD_LOGIC;

OP_AND : OUT STD_LOGIC;

OP_NOR : OUT STD_LOGIC;

OP_NAND : OUT STD_LOGIC;

OP_XOR : OUT STD_LOGIC;

OP_XNOR : OUT STD_LOGIC);

END GATES;

ARCHITECTURE BEHAVIORAL OF GATES IS

BEGIN

OP_NOT <= NOT A;

OP_OR <= A OR B;

OP_AND <= A AND B;

OP_NOR <= A NOR B;

OP_NAND <= A NAND B;

OP_XOR <= A XOR B;

OP_XNOR <= A XNOR B;

END BEHAVIORAL;

1. b)VERILOG CODE FOR ALL BASIC GATES

module gates(A, B, OP_NOT, OP_OR,OP_NOR, OP_AND, OP_NAND, OP_XOR, OP_XNOR);

input A;

input B;

output OP_NOT;

output OP_OR;

output OP_AND;

output OP_NOR;

output OP_NAND;

output OP_XOR;

output OP_XNOR;

reg OP_NOT, OP_OR, OP_AND, OP_NOR,OP_NAND, OP_XOR, OP_XNOR;

always @ (A , B)

begin

OP_NOT= ~A;

OP_AND= A&B;

OP_NAND= ~(A&B);

OP_OR= A|B;

OP_NOR=~(A|B);

OP_XOR= A^B;

OP_XNOR = ~(A^B);

end

endmodule

Basic

Gates

A

B

OP_NOT

OP_OR OP_AND

OP_NOR

OP_NAND

OP_XOR

OP_XNOR

Page 4: HDL Lab Manual

HDL LAB (06ECL48)

4 Department of Electronics & Communication, K.I.T, Tiptur

RESULT:

WAVEFORM

A B

0 0 1 0 0 1 1 0 1

0 1 1 1 0 0 1 1 0

1 0 0 0 0 0 1 1 0

1 1 0 1 1 0 0 0 1

A

OP_NOT

A

B OP_OR

A

B OP_AND

A

B

OP_ NOR

A

B OP_ NAND

A

B OP_ XOR

A

B OP_ EXNOR

Page 5: HDL Lab Manual

HDL LAB (06ECL48)

5 Department of Electronics & Communication, K.I.T, Tiptur

2. a) VHDL CODE FOR 2 TO 4 DECODER.

ENTITY DECODER2_4 IS

PORT ( ENABLE: IN STD_LOGIC;

SEL: IN STD_LOGIC_VECTOR (1 DOWNTO 0);

D_OUT: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END DECODER2_4;

ARCHITECTURE DECODER_ARC OF DECODER2_4 IS

BEGIN

PROCESS (ENABLE,SEL)

BEGIN

IF (ENABLE = '1') THEN

D_OUT <= "0000";

ELSE

CASE SEL IS

WHEN "00" => D_OUT <= "0001";

WHEN "01" => D_OUT <= "0010";

WHEN "10" => D_OUT <= "0100";

WHEN "11" => D_OUT <= "1000";

WHEN OTHERS => NULL;

END CASE;

END IF;

END PROCESS;

END DECODER_ARC;

2. b) VERILOG CODE FOR 2 TO 4 DECODER

module DECODER (SEL,EN,D_OUT);

input [1:0] SEL;

input EN;

output [3:0] D_OUT;

reg [3:0] D_OUT;

always @(SEL , D_OUT)

if (EN==1)

D_OUT=4’b0000;

else

begin

case (SEL)

2'b00: D_OUT = 4'b0001;

2'b01: D_OUT = 4'b0010;

2'b10:D_OUT = 4'b0100;

2'b11: D_OUT = 4'b1000;

default: D_OUT

=4'bXXXX;

endcase

end

endmodule

RESULT:-

WAVEFORM

Enable Select

Lines

Outputs

E S1 S0 D_OUT(0) D_OUT(1) D_OUT(2) D_OUT(3)

1 X X 0 0 0 0

0 0 0 1 0 0 0

0 0 1 0 1 0 0

0 1 0 0 0 1 0

0 1 1 0 0 0 1

Sel (0)

Sel (1)

2-4

DECODER

ENABLE

D_OUT (0)

D_OUT (1)

D_OUT (2)

D_OUT (3)

Page 6: HDL Lab Manual

HDL LAB (06ECL48)

6 Department of Electronics & Communication, K.I.T, Tiptur

3. a) VHDL CODE FOR 8 TO 3 ENCODER.

ENTITY ENCODER8_3 IS

PORT ( ENABLE: IN STD_LOGIC;

SEL: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

D_OUT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0) );

END ENCODER8_3;

ARCHITECTURE ENCODER_ARCH OF ENCODER8_3 IS

BEGIN

PROCESS(ENABLE,SEL)

BEGIN

IF ( ENABLE = '1') THEN

D_OUT <= "000";

ELSE

CASE SEL IS

WHEN "00000001" => D_OUT <= "000";

WHEN "00000010" => D_OUT <= "001";

WHEN "00000100" => D_OUT <= "010";

WHEN "00001000" => D_OUT <= "011";

WHEN "00010000" => D_OUT <= "100";

WHEN "00100000" => D_OUT <= "101";

WHEN "01000000" => D_OUT <= "110";

WHEN "10000000" => D_OUT <= "111";

WHEN OTHERS => NULL;

END CASE;

END IF;

END PROCESS;

END ENCODER_ARCH;

3 b).VERILOG CODE FOR 8TO 3 ENCODER

module ENCODER8_3(EN, SEL, D_OUT);

input EN;

input [7:0] SEL;

output [2:0] D_OUT;

reg [2:0] D_OUT;

always @ (SEL)

begin

if(EN==1)

D_OUT=3’B000;

else

begin

case(SEL)

8’b00000001: D_OUT=3'b000;

8’b00000010: D_OUT =3'b001;

8’b 00000100: D_OUT =3'b010;

8’b00001000: D_OUT =3'b011;

8’b00010000: D_OUT =3'b100;

8’b00100000: D_OUT =3'b101;

8’b01000000: D_OUT =3'b110;

8’b10000000:D_OUT =3'b111;

default: D_OUT=3’bxxx;

endcase

end

end

endmodule

SEL(0)

SEL(1)

SEL(2)

SEL(3)

SEL(4)

SEL(5)

SEL(6)

SEL(7)

8 : 3

ENCODER

ENABLE

D_OUT(0)

D_OUT(1)

D_OUT(2)

Page 7: HDL Lab Manual

HDL LAB (06ECL48)

7 Department of Electronics & Communication, K.I.T, Tiptur

RESULT

INPUTS OUTPUTS

ENABLE SEL(0) SEL(1) SEL(2) SEL(3) SEL(4) SEL(5) SEL(6) SEL(7) D_OUT

(0)

D_OUT

(1)

D_OUT

(2)

1 X X X X X X X X 0 0 0

0 1 0 0 0 0 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0 0 1

0 0 0 1 0 0 0 0 0 0 1 0

0 0 0 0 1 0 0 0 0 0 1 1

0 0 0 0 0 1 0 0 0 1 0 0

0 0 0 0 0 0 1 0 0 1 0 1

0 0 0 0 0 0 0 1 0 1 1 0

0 0 0 0 0 0 0 0 1 1 1 1

WAVEFORM

Page 8: HDL Lab Manual

HDL LAB (06ECL48)

8 Department of Electronics & Communication, K.I.T, Tiptur

4 a). VHDL CODE FOR 8:1 MUX.

ENTITY MUX8_1 IS

PORT ( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -- SELECT LINES

A,B,C,D,E,F,G,H :IN STD_LOGIC;-- INPUTS OF THE MUX.

MUX_OUT: OUT STD_LOGIC ); -- OUTPUT OF THE MUX.

END MUX8_1;

ARCHITECTURE MUX4_1_ARCH OF MUX8_1 IS

BEGIN

PROCESS (SEL,A,B,C,D,E,F,G,H)

BEGIN

CASE SEL IS

WHEN "000" => MUX_OUT <= A;

WHEN "001" => MUX_OUT <= B;

WHEN "010" => MUX_OUT <= C;

WHEN "011" => MUX_OUT <= D;

WHEN "100" => MUX_OUT <= E;

WHEN "101" => MUX_OUT <= F;

WHEN "110" => MUX_OUT <= G;

WHEN "111" => MUX_OUT <= H;

WHEN OTHERS => NULL;

END CASE;

END PROCESS;

END MUX4_1_ARCH;

4 b). VERILOG CODE FOR 8TO 1 MUX

module MUX8_1(A,B,C,D,E,F,G,H, SEL, D_OUT);

input A,B,C,D,E,F,G,H;

input [2:0] SEL;

output MUX_OUT;

reg D_OUT;

always @ (A , SEL )

case (SEL)

3'b000: MUX_OUT =A;

3'b001: MUX_OUT =B;

3'b010: MUX_OUT =C;

3'b011: MUX_OUT =D;

3'b100: MUX_OUT =E;

3'b101: MUX_OUT =F;

3'b110: MUX_OUT =G;

3'b111: MUX_OUT =H;

default: MUX_OUT =0;

endcase

endmodule

8 : 1

MUX

A

B

C

D

E

F

G

H

SEL SEL SEL

(0) (1) (2)

MUX_OUT

Page 9: HDL Lab Manual

HDL LAB (06ECL48)

9 Department of Electronics & Communication, K.I.T, Tiptur

RESULT:

INPUTS OUTPUT

SEL[0] SEL[1] SEL[2] MUX_OUT

0 0 0 A

0 0 1 B

0 1 0 C

0 1 1 D

1 0 0 E

1 0 1 F

1 1 0 G

1 1 1 H

WAVE FORM

5 a). CODE 4 BIT BINARY TO GRAY CONVERTER.

ENTITY BINARY_GRAY IS

PORT( A: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

B: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END BINARY_GRAY;

ARCHITECTURE BEHAVIORAL OF BINARY_GRAY IS

BEGIN

B(3)<= A(3);

B(2)<= A(3) XOR A(2);

B(1)<= A(2) XOR A(1);

B(0)<= A(1) XOR A(0);

END BEHAVIORAL;

B2 B1 B0

A1 A0 A1 A0 A1 A0

A(0)

A(1)

A(2)

A(3)

B(0)

B(1)

B(2)

B(3)

Page 10: HDL Lab Manual

HDL LAB (06ECL48)

10 Department of Electronics & Communication, K.I.T, Tiptur

A3 A2 00 01 11 10 A3 A2 00 01 11 10 A3 A2 00 01 11 10

00 00 1 1 00 1 1

01 1 1 1 1 01 1 1 01 1 1

11 11 1 1 11 1 1

10 1 1 1 1 10 1 1 10 1 1

B3 = A3

B2 = A3 A2’ + A3 A2’

B2 = A3 ⊕ A2

B1 = A2 A1’ + A1 A2’

B1 = A1 ⊕ A2

B0 = A1’A0 + A1 A0’

B0 = A1 ⊕ A0

5 b).VERILOG CODE FOR BINARY TO GRAY CONVERTER

module BINARY_GRAY(A, B);

input [3:0] A;

output [3:0] B;

reg [3:0] B;

always @ (A , B)

begin

B[3] = A[3];

B[2] = A[3] ^ A[2];

B[1] = A[2] ^ A[1];

B[0] = A[1] ^ A[0];

end

endmodule

RESULT:

Binary inputs Gray Outputs

B3 B2 B1 B0 G3 G2 G1 G0

0 0 0 0 0 0 0 0

0 0 0 1 0 0 0 1

0 0 1 0 0 0 1 1

0 0 1 1 0 0 1 0

0 1 0 0 0 1 1 0

0 1 0 1 0 1 1 1

0 1 1 0 0 1 0 1

0 1 1 1 0 1 0 0

1 0 0 0 1 1 0 0

1 0 0 1 1 1 0 1

1 0 1 0 1 1 1 1

Page 11: HDL Lab Manual

HDL LAB (06ECL48)

11 Department of Electronics & Communication, K.I.T, Tiptur

WAVE FORM

6 a). VHDL CODE FOR 1:4 DEMUX.

ENTITY DEMUX1_4 IS

PORT ( D_IN: IN STD_LOGIC; --INPUT FOR DEMULTIPLEXER

SEL: IN STD_LOGIC_VECTOR (1 DOWNTO 0); --SELECT LINE OF DEMUX

D_OUT: OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); --OUTPUT LINES OF DEMUX

END DEMUX1_4;

ARCHITECTURE DEMUX1_4_ARCH OF DEMUX1_4 IS

BEGIN

PROCESS(D_IN,SEL)

BEGIN

D_OUT<="0000";

CASE SEL IS

1 0 1 1 1 1 1 0

1 1 0 0 1 0 1 0

1 1 0 1 1 0 1 1

1 1 1 0 1 0 0 1

1 1 1 1 1 0 0 0

D_IN

1:4

DEMUX

SEL[0] SEL[1]

D_OUT[0]

D_OUT[1]

D_OUT[2]

D_OUT[3]

Page 12: HDL Lab Manual

HDL LAB (06ECL48)

12 Department of Electronics & Communication, K.I.T, Tiptur

WHEN "00" => D_OUT(0)<=D_IN;

WHEN "01" => D_OUT(1)<=D_IN;

WHEN "10" => D_OUT(2)<=D_IN;

WHEN OTHERS => D_OUT(3)<=D_IN;

END CASE;

END PROCESS;

END DEMUX1_4_ARCH;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "SEL<0>” LOC = "P74";

NET "SEL<1>” LOC = "P75";

NET "D_IN" LOC = "P76";

NET "D_OUT<0>" LOC = "P84";

NET "D_OUT<1>" LOC = "P85";

NET "D_OUT<2>" LOC = "P86";

NET "D_OUT<3>" LOC = "P87";

===============================================================

6 b).VERILOG CODE FOR 1:4 DEMUX

module DEMUX1_4(D_IN, SEL, D_OUT);

input D_IN;

input [1:0] SEL;

output [3:0] D_OUT;

reg[3:0] D_OUT;

always @(D_IN ,SEL)

case (SEL)

2'b00:

begin

D_OUT [0]= D_IN;

D_OUT [1]=0;

D_OUT [2]=0;

D_OUT [3]=0;

end

2'b01:

begin

D_OUT [0]=0;

D_OUT [1]= D_IN;

D_OUT [2]=0;

D_OUT [3]=0;

end

2'b10:

begin

D_OUT [0]=0;

D_OUT [1]=0;

D_OUT [2]= D_IN;

D_OUT [3]=0;

end

2'b11:

begin

D_OUT [0]=0;

D_OUT [1]=0;

D_OUT [2]=0;

D_OUT [3]= D_IN;

Page 13: HDL Lab Manual

HDL LAB (06ECL48)

13 Department of Electronics & Communication, K.I.T, Tiptur

end

default D_OUT =4'b0000;

endcase

endmodule

RESULT:-

SELECT INPUT OUTPUT

SEL[0] SEL[1] D_IN D_OUT[0] D_OUT[1] D_OUT[2] D_OUT[3]

0 0 1 1 0 0 0

0 1 1 0 1 0 0

1 0 1 0 0 1 0

1 1 1 0 0 0 1

WAVEFORM

7 a). COMBINATIONAL VHDL CODE FOR N BIT COMPARATOR.

ENTITY COMPARATOR IS

GENERIC (N: INTEGER := 3);

PORT( A,B: IN STD_LOGIC_VECTOR(N DOWNTO 0);

ALB,AGB,AEB: OUT STD_LOGIC);

END COMPARATOR;

ARCHITECTURE COMPARATOR_ARC OF COMPARATOR IS

BEGIN

PROCESS(A,B)

BEGIN

IF ( A < B ) THEN ALB <= '1';

4-BIT

COMPARATER

A

B

A<B

A>B

A=B

D_IN

D_OUT

Page 14: HDL Lab Manual

HDL LAB (06ECL48)

14 Department of Electronics & Communication, K.I.T, Tiptur

ELSE ALB <= '0'; END IF;

IF ( A > B ) THEN AGB <= '1';

ELSE AGB <= '0'; END IF;

IF ( A = B ) THEN AEB <= '1';

ELSE AEB <= '0'; END IF;

END PROCESS;

END COMPARATOR_ARC;

7 b).COMBINATIONAL VERILOG CODE FOR 2-BIT COMPARATOR

module COMPARATER(A, B, ALB,AGB,AEB);

input [1:0] A;

input [1:0] B;

output ALB;

output AGB;

output AEB;

reg ALB,AGB,AEB;

always @ (A , B)

begin

if (A<B)

begin

ALB=1'b1;

AGB=1'b0;

AEB=1'b0;

end

else if (A>B)

begin

AGB=1'b1;

ALB=1'b0;

AEB=1'b0;

end

else if (A==B)

begin

AEB=1'b1;

ALB=1'b0;

AGB=1'b0;

end

end

endmodule

RESULT:

A B A=B A>B A<B

00 00 1 0 0

00 01 0 0 1

01 00 0 0 1

Page 15: HDL Lab Manual

HDL LAB (06ECL48)

15 Department of Electronics & Communication, K.I.T, Tiptur

WAVEFORM

8a). VHDL CODE FOR THE IMPLEMENTATION OF HALF ADDER.

ENTITY HALFADDER IS

PORT ( A, B: IN STD_LOGIC; --2BIT INPUT

SUM, CARRY : OUT STD_LOGIC); --SUM& CARRY

END HALFADDER;

ARCHITECTURE BEHAVIORAL OF HALFADDER IS

Page 16: HDL Lab Manual

HDL LAB (06ECL48)

16 Department of Electronics & Communication, K.I.T, Tiptur

BEGIN

SUM <= A XOR B;

CARRY<= A AND B;

END BEHAVIORAL;

8 b). VERILOG CODE FOR THE IMPLEMENTATION OF HALF ADDER.

module HALFADDER(A, B, SUM, CARRY);

input A;

input B;

output SUM;

output CARRY;

reg SUM;

reg CARRY;

always @ (A , B)

begin

SUM = A^B;

CARRY = A & B;

end

endmodule

RESULT

Inputs Outputs

A B Sum(S) Carry(C)

0 0 0 0

0 1 1 0

1 0 1 0

1 1 0 1

WAVE FORM

8 c). VHDL CODE FOR FULL ADDER USING COMPONENT INSTANTIATION METHOD.

ENTITY FULLADDER IS

PORT ( A : IN STD_LOGIC;

B : IN STD_LOGIC;

C : IN STD_LOGIC;

CARRY : OUT STD_LOGIC;

HA1

HA2

A

B

C

SUM

CARRY

Temp1

Page 17: HDL Lab Manual

HDL LAB (06ECL48)

17 Department of Electronics & Communication, K.I.T, Tiptur

SUM : OUT STD_LOGIC);

END FULLADDER;

ARCHITECTURE BEHAVIORAL OF FULLADDER IS

COMPONENT HALFADDER

PORT ( A : IN STD_LOGIC;

B : IN STD_LOGIC;

SUM : OUT STD_LOGIC;

CARRY : OUT STD_LOGIC);

END COMPONENT;

SIGNAL TEMP1,TEMP2, TEMP3: STD_LOGIC;

BEGIN

L1: HALFADDER PORT MAP( A, B,TEMP1,TEMP2);

L2: HALFADDER PORT MAP( TEMP1,C,SUM,TEMP3);

CARRY <= TEMP2 OR TEMP3;

END BEHAVIORAL;

8 d). VERILOG CODE FOR FULL ADDER USING TWO HALF ADDER.

module FULL_2HA(A, B, C, SUM, CARRY);

input A;

input B;

input C;

output SUM;

output CARRY;

wire S1,T1,T2;

xor

X1(S1,A,B),

X2(SUM,S1,C);

and

A1(T1,S1,C),

A2(T2,A,B);

or

O1(CARRY,T1,T2);

endmodule

8 e).VHDL CODE FOR FULLADDER

ENTITY FA IS

PORT (A,B,C:IN BIT;

SUM,CARRY:OUT BIT);

END FA;

ARCHITECTURE FA_ARCH OF FA IS

BEGIN

SUM <= A EXOR B EXOR C;

Page 18: HDL Lab Manual

HDL LAB (06ECL48)

18 Department of Electronics & Communication, K.I.T, Tiptur

CARRY<=(A AND B )OR (B AND C) OR (C AND A);

END FA_ARCH;

Exercise: Write VHDL code in behaviour style

8 f). VERILOG CODE FOR FULL ADDER.

module FULLADDER(A, B, C, SUM, CARRY);

input A;

input B;

input C;

output SUM;

output CARRY;

reg SUM,CARRY;

reg T1, T2, T3;

always @ (A , B , C)

begin

SUM=A^B^C;

T1=A&B;

T2=B&C;

T3=C&A;

CARRY=(T1| T2) | T3;

end

endmodule

RESULT:-

Inputs Outputs

A B C Sum Carry

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

WAVEFORM

9 a). VHDL CODE FOR 8 BIT ALU MODEL. (16)

ENTITY ALU IS

PORT ( A,B : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

OPCODE : IN STD_LOGIC_VECTOR(2 DOWNTO 0);

ENB : IN STD_LOGIC; -- ENABLE SIGNAL

OP : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

OPM : OUT STD_LOGIC_VECTOR(15 DOWNTO 0));

Page 19: HDL Lab Manual

HDL LAB (06ECL48)

19 Department of Electronics & Communication, K.I.T, Tiptur

END ALU;

ARCHITECTURE BEHAVIORAL OF ALU IS

BEGIN

PROCESS(A,B,OPCODE,ENB)

BEGIN

IF ENB= '1' THEN

CASE OPCODE IS

WHEN "000" => OP<= A+B;

WHEN "001" => OP<= A-B;

WHEN "010" => OP<= NOT A;

WHEN "011" => OPM<= A*B;

WHEN "100" => OP<= A AND B;

WHEN "101" => OP<= A OR B;

WHEN "110" => OP<= A NAND B;

WHEN OTHERS => OP<= A XOR B;

END CASE;

ELSE

OP <= (OTHERS =>'Z');

END IF;

END PROCESS;

END BEHAVIORAL;

9 b). VERILOG CODE FOR 8-BIT ALU MODEL. (16 BIT)

module ALU(A, B, SEL,EN,Y,Z);

input [7:0] A, B;

input EN;

input [2:0] SEL;

output [7:0] Y;

output [15:0] Z;

reg [7:0]Y; reg [15:0]Z;

always @(A ,B , SEL)

begin

if (EN==1)

begin

case (SEL)

3'b000:Y=A+B;

3'b001:Y=A-B;

3'b010:Y=~A;

3'b011:Z=A*B;

3'b100:Y=A&B;

3'b101:Y=A|B;

3'b110:Y=~(A|B);

3'b111:Y=A^B;

endcase

end

end

endmodule

10 a). VHDL CODE FOR S R F/F.

ENTITY SRFF IS

PORT (

S: IN BIT; -- S BIT INPUT

R: IN BIT; -- R BIT INPUT

CLK: IN BIT; -- GLOBAL CLOCK

Q: BUFFER STD_LOGIC );

S-R

FLIP-FLOP

S

CLK

R

Q

QBAR

RST

Page 20: HDL Lab Manual

HDL LAB (06ECL48)

20 Department of Electronics & Communication, K.I.T, Tiptur

END SRFF;

ARCHITECTURE S_R_FF_ARCH OF SRFF IS

BEGIN

PROCESS(CLK)

BEGIN

IF CLK='1' AND CLK'EVENT THEN

IF(S='0' AND R='0')THEN Q<=Q;

ELSIF(S='0' AND R='1')THEN Q<='0';

ELSIF(S='1' AND R='0')THEN Q<='1';

ELSIF (S='1' AND R='1')THEN Q<='X';

END IF;

END IF;

END PROCESS;

END S_R_FF_ARCH;

10 b). VERILOG CODE FOR SR F/F

module sr_ff(s ,r ,clk , rst , q , qbar);

input s;

input r;

input clk;

input rst;

output q;

output qbar;

reg q,qbar;

always@(posedge clk ,rst , s , r)

begin

if(rst==0)

begin

q=0;

qbar=1;

end

else

begin

if(s==0&&r==0)

begin

q=q;

qbar=qbar;

end

if(s==1&&r==0)

begin

q=1;

qbar=0;

end

if(s==0&&r==1)

begin

q=0;

qbar=1;

end

if (s==1&&r==1)

begin

q=1'bx;

qbar=1'bx;

end

end

end

Page 21: HDL Lab Manual

HDL LAB (06ECL48)

21 Department of Electronics & Communication, K.I.T, Tiptur

endmodule

RESULT:

INPUTS OUTPUTS

RST S R Q QBAR

0 0 1

1 0 0 0 1

1 0 1 0 1

1 1 0 1 0

1 1 1 ?

WAVEFORM

11 a). VHDL CODE FOR D F/F.

ENTITY DFF IS

PORT (CLK: IN STD_LOGIC;

D: IN STD_LOGIC;

Q: OUT STD_LOGIC );

END DFF;

ARCHITECTURE D_FF_ARCH OF DFF IS

D

FLIP-FLOP

D

CLK

RST

Q

QBAR

Page 22: HDL Lab Manual

HDL LAB (06ECL48)

22 Department of Electronics & Communication, K.I.T, Tiptur

BEGIN

PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

Q<=D;

END IF;

END PROCESS;

END D_FF_ARCH;

11 b). VERILOG CODE FOR D-FLIPFLOP.

module D_FF(D, RESET, CLK, Q, QBAR);

input D;

input RESET;

input CLK;

output Q,QBAR;

reg Q,QBAR;

always@(posedge CLK , posedge RESET)

begin

if (RESET==0)

begin

Q=0;

QBAR=1;

end

else

begin

Q=D;

QBAR=~D;

end

end

endmodule

RESULT:-

RESET D Q QBAR

0 0 1

1 0 0 1

1 1 1 0

WAVEFORM

12 a). VHDL CODE FOR JK F/F .

ENTITY JKFF IS

PORT (

CLK : IN BIT; .

J : IN BIT; .

K : IN BIT;

RESET :IN BIT;

Q : BUFFER BIT );

J-K

FLIP-FLOP

J

CLK

K

Q

QBAR

RST

Page 23: HDL Lab Manual

HDL LAB (06ECL48)

23 Department of Electronics & Communication, K.I.T, Tiptur

END JKFF;

ARCHITECTURE JKFF_ARCH OF JKFF IS

BEGIN

PROCESS(CLK,RESET)

BEGIN

IF(RESET='1')THEN

Q<='0';

ELSIF(CLK'EVENT AND CLK='1')THEN

IF(J='0' AND K='0') THEN

Q<=Q;

ELSIF(J='0' AND K='1') THEN

Q<='0';

ELSIF(J='1' AND K='0') THEN

Q<='1';

ELSIF(J='1' AND K='1') THEN

Q<=NOT Q;

END IF;

END IF;

END PROCESS;

END JKFF_ARCH;

12 b). VERILOG CODE FOR JK-FLIPFLOP.

module JK_FF(J, K, CLK, RESET, Q, QBAR);

input J;

input K;

input CLK;

input RESET;

output Q;

output QBAR;

reg Q, QBAR;

always @ (posedge CLK , posedge RESET)

begin

if(RESET==0)

begin

Q=0;

QBAR=1;

end

else if (J==0 && K==0)

begin

Q=Q;

QBAR=QBAR;

end

else if (J==0 && K==1)

begin

Q=0;

QBAR=1;

end

else if (J==1 && K==0)

begin

Q=1;

QBAR=0;

end

else

begin

Q=~Q;

Page 24: HDL Lab Manual

HDL LAB (06ECL48)

24 Department of Electronics & Communication, K.I.T, Tiptur

QBAR=~QBAR;

end

end

endmodule

RESULT:-

RESET J K Q QBAR

0 0 1

1 0 0 0 1

1 0 1 0 1

1 1 0 1 0

1 1 1 TOOGLE

WAVEFORM

13 a). VHDL CODE FOR T F/F.

ENTITY TFF IS

PORT ( T,RST: IN STD_LOGIC; -- INPUT T

CLK: IN STD_LOGIC; -- GLOBAL CLOCK SIGNAL

Q: INOUT STD_LOGIC ); -- Q OUTPUT

END TFF;

ARCHITECTURE T_FF_ARCH OF TFF IS

BEGIN

Page 25: HDL Lab Manual

HDL LAB (06ECL48)

25 Department of Electronics & Communication, K.I.T, Tiptur

PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF RST=’1’ THEN

Q<=’0’;

ELSE

IF (T=’0’) THEN

Q<=Q;

ELSE

Q<= NOT Q;

END IF;

END IF;

END IF;

END PROCESS;

END T_FF_ARCH;

13 b). VERILOG CODE FOR T-FLIPFLOP.

module T_FF(T, CLK, RESET, Q, QBAR);

input T, CLK,RESET;

output Q, QBAR;

reg Q,QBAR;

always @ (posedge CLK or RESET)

begin

if (RESET==1)

begin

Q=0;

QBAR=1;

end

else if (T==0) RESULT:

begin

Q=Q;

QBAR=QBAR;

end

else

begin

Q=~Q;

QBAR=~QBAR;

end

end

endmodule

WAVE FORM

14 a). VHDL CODE FOR 4-BIT SYNCHRONOUS COUNTER

ENTITY SYNC_COUNTER IS

PORT ( CLK : IN STD_LOGIC;

RESET : IN STD_LOGIC;

COUNT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END SYNC_COUNTER;

RESET T Q QBAR

1 X 0 1

0 0 0 1

0 1 TOGGLE

T

FLIP-FLOP

T

CLK

RST

Q

QBAR

Page 26: HDL Lab Manual

HDL LAB (06ECL48)

26 Department of Electronics & Communication, K.I.T, Tiptur

ARCHITECTURE BEHAVIORAL OF SYNC_COUNTER IS

SIGNAL TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF CLK='1' AND CLK'EVENT THEN

IF (RESET='1' )THEN --SYNCRONOUS RESET

TEMP<="0000";--RESET COUNT

ELSE

TEMP<=TEMP+1;

END IF;

END IF;

END PROCESS;

COUNT<=TEMP;

END BEHAVIORAL;

14 b). A VHDL CODE FOR 4-BIT SYNCHRONOUS COUNTER.(FOR HARDWARE

IMPLEMENTATION)

ENTITY SYNC_COUNTER IS

PORT( CLK: IN STD_LOGIC;

RESET: IN STD_LOGIC;

COUNT: OUT

STD_LOGIC_VECTOR( 3 DOWNTO 0));

END SYNC_COUNTER;

ARCHITECTURE COUNTER_ARCH OF SYNC_COUNTER IS

SIGNAL TEMP:STD_LOGIC_VECTOR( 3 DOWNTO 0);

SIGNAL DCLK:STD_LOGIC_VECTOR(20

DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

DCLK<=DCLK+’1’;

END IF;

END PROCESS;

PROCESS (DCLK(18))

BEGIN

IF DCLK(18)='1' AND DCLK(18)'EVENT THEN

IF RESET='1' THEN –SYNCHRONOUS RESET

TEMP <= (OTHERS=>'0');

ELSE

TEMP <= TEMP + 1;

END IF;

END IF;

COUNT<= TEMP;

END PROCESS;

END COUNTER_ARCH;

14 c). VERILOG CODE FOR 4 BIT SYNCHRONOUS COUNTER

module sync2(clk, reset, count);

input clk;

input reset;

output [3:0] count;

reg[3:0]count;

Page 27: HDL Lab Manual

HDL LAB (06ECL48)

27 Department of Electronics & Communication, K.I.T, Tiptur

always@(posedge clk , posedge reset)

begin

if(reset==1)

count=4'b0000;

else

count=count+1;

end

endmodule

14 d). VERILOG CODE FOR 4 BIT SYNCHRONOUS COUNTER.(FOR HARDWARE IMPLEMENTATION

module counter(clk, reset, count);

input clk;

input reset;

output [3:0] count;

reg[3:0] count;

integer timer_count1 = 0,timer_count2 = 0;

reg clk_msec,clk_sec;

always@(posedge clk)

begin

if(timer_count1==3999)

begin

timer_count1=0;

clk_msec=1'b1;

end

else

begin

timer_count1=timer_count1+1;

clk_msec=1'b0;

end

end

always@(posedge clk_msec)

begin

if(timer_count2==999)

begin

timer_count2=0;

clk_sec=1'b1;

end

else

begin

timer_count2=timer_count2+1;

clk_sec=1'b0;

end

end

always@(posedge clk_sec)

begin

if(~reset)

count = 4'b0000;

else

count = count+1;

end

endmodule

RESULT:-

Clock Q3 Q2 Q1 Q0

Page 28: HDL Lab Manual

HDL LAB (06ECL48)

28 Department of Electronics & Communication, K.I.T, Tiptur

WAVEFORM

15 a). VHDL CODE FOR 4-BIT ASYNCHRONOUS BINARY COUNTER

ENTITY ASYNC_C IS

PORT ( CLK : IN STD_LOGIC;

RESET : IN STD_LOGIC;

COUNT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END ASYNC_C;

ARCHITECTURE BEHAVIORAL OF ASYNC_C IS

SIGNAL TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(CLK,RESET)

BEGIN

IF RESET='1' THEN --ASYNCHRONOUS RESET

TEMP<=(OTHERS=>'0');

ELSIF CLK='1' AND CLK'EVENT THEN

TEMP<=TEMP+1;

END IF;

END PROCESS;

COUNT<=TEMP;

END BEHAVIORAL;

15 b). 4-BIT ASYNCHRONOUS BINARY COUNTER.(FOR HARDWARE IMPLEMENTATION)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY ASYNC_COUNTER IS

0 0 0 0 0

1 0 0 0 1

2 0 0 1 0

3 0 0 1 1

4 0 1 0 0

5 0 1 0 1

6 0 1 1 0

7 0 1 1 1

8 1 0 0 0

9 1 0 0 1

10 1 0 1 0

11 1 0 1 1

12 1 1 0 0

13 1 1 0 1

14 1 1 1 0

15 1 1 1 1

Page 29: HDL Lab Manual

HDL LAB (06ECL48)

29 Department of Electronics & Communication, K.I.T, Tiptur

PORT( CLK: IN STD_LOGIC;

RESET: IN STD_LOGIC;

COUNT: OUT STD_LOGIC_VECTOR( 3 DOWNTO 0));

END ASYNC_COUNTER;

ARCHITECTURE COUNTER_ARCH OF ASYNC_COUNTER IS

SIGNAL DIV:STD_LOGIC_VECTOR(22 DOWNTO 0);

SIGNAL CLKDIV:STD_LOGIC;

BEGIN

PROCESS (CLK)--CLKDIVIDE

BEGIN

IF CLK='1' AND CLK'EVENT THEN

DIV<=DIV+1;

ENDIF;

END PROCESS;

CLKDIV<=DIV(22);

PROCESS(CLKDIV,RESET)

BEGIN

IF RESET='1' THEN

COUNT <= “0000”;

ELSIF (CLKDIV='1' AND CLKDIV' EVENT) THEN

COUNT <= COUNT + 1;

END IF;

END PROCESS;

END COUNTER_ARCH;

15 c). VERILOG CODE FOR ASYNCHRONOUS COUNTER

module synk(clk, reset, count);

input clk;

input reset;

output [3:0] count;

reg [3:0]count;

always@(posedge clk , posedge reset)

begin

if(reset==1)

count=4'b0000;

else

count=count+1;

end

endmodule

15 d). VERILOG CODE FOR 4-BIT ASYNCHRONOUS BINARY COUNTER.(FOR HARDWARE

IMPLEMENTATION)

------- ASSIGNMENT--------

RESULT:-

Clock Q3 Q2 Q1 Q0

0 0 0 0 0

1 0 0 0 1

2 0 0 1 0

3 0 0 1 1

Page 30: HDL Lab Manual

HDL LAB (06ECL48)

30 Department of Electronics & Communication, K.I.T, Tiptur

4 0 1 0 0

5 0 1 0 1

6 0 1 1 0

7 0 1 1 1

8 1 0 0 0

9 1 0 0 1

10 1 0 1 0

11 1 0 1 1

12 1 1 0 0

13 1 1 0 1

14 1 1 1 0

15 1 1 1 1

16 a). VHDL CODE FOR 4-bit synchronous BCD counter ENTITY SYNC_COUNTER IS

PORT ( CLK : IN STD_LOGIC;

RESET : IN STD_LOGIC;

COUNT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END SYNC_COUNTER;

ARCHITECTURE BEHAVIORAL OF SYNC_COUNTER IS

SIGNAL TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF CLK='1' AND CLK'EVENT THEN

IF (RESET='1' OR TEMP =”1010” )THEN --SYNCRONOUS RESET

TEMP<="0000";--RESET COUNT

ELSE

TEMP<=TEMP+1;

END IF;

END IF;

END PROCESS;

COUNT<=TEMP;

END BEHAVIORAL;

16 b).VHDL CODE FOR 4-bit synchronous BCD counter.(FOR HARDWARE IMPLEMENTATION)

entity sync_counter is

port( CLK: in STD_LOGIC; -- GLOBAL CLOCK SIGNAL

RESET: in STD_LOGIC; -- Global Reset Signal

COUNT: out STD_LOGIC_VECTOR( 3 DOWNTO 0)); --Counter Output

end sync_counter;

architecture counter_arch of sync_counter is

Page 31: HDL Lab Manual

HDL LAB (06ECL48)

31 Department of Electronics & Communication, K.I.T, Tiptur

begin

process (CLK)

begin

if CLK='1' and CLK'event then

if (RESET='1' or COUNT=”1010”) then --Synchronous reset

COUNT <= “0000”; --set intial value of COUNT for any sequence counter

ELSE

COUNT <= COUNT + 1;

end if;

end if;

end process;

end counter_arch;

16 c).verilog CODE FOR 4-bit synchronous BCD counter. module bcd (clk, reset, count);

input clk, reset;

output [3:0] count;

reg[3:0]count;

always@(posedge clk , posedge reset)

begin

if(reset==1 | count==4'b1010)

begin

count=4'b0000;

end

else

count=count+1;

end

endmodule

16 d).verilog CODE FOR 4-bit synchronous BCD counter(FOR HARDWARE

IMPLEMENTATION)

----- ASSIGNMENT------

RESULT:

INTERFACING

--Package for LCD Display (This Package must be added to display all the messages on

LCD)

-- Package File Template

-- Purpose: This package defines supplemental types, subtypes, constants, and functions

library IEEE;

Clock Q3 Q2 Q1 Q0

0 0 0 0 0

1 0 0 0 1

2 0 0 1 0

3 0 0 1 1

4 0 1 0 0

5 0 1 0 1

6 0 1 1 0

7 0 1 1 1

8 1 0 0 0

9 1 0 0 1

10 1 0 1 0

11 0 0 0 0

Page 32: HDL Lab Manual

HDL LAB (06ECL48)

32 Department of Electronics & Communication, K.I.T, Tiptur

use IEEE.STD_LOGIC_1164.all;

package LCD_GRAP is

-- THE NUMBERS

constant ONE : std_logic_vector(7 downto 0) := "00110001";

constant TWO : std_logic_vector(7 downto 0) := "00110010";

constant THREE : std_logic_vector(7 downto 0) := "00110011";

constant FOUR : std_logic_vector(7 downto 0) := "00110100";

constant FIVE : std_logic_vector(7 downto 0) := "00110101";

constant SIX : std_logic_vector(7 downto 0) := "00110110";

constant SEVEN : std_logic_vector(7 downto 0) := "00110111";

constant EIGHT : std_logic_vector(7 downto 0) := "00111000";

constant NINE : std_logic_vector(7 downto 0) := "00111001";

constant ZERO : std_logic_vector(7 downto 0) := "00110000";

-- THE CHARACTERS

constant A : std_logic_vector(7 downto 0) := "01000001";

constant B : std_logic_vector(7 downto 0) := "01000010";

constant C : std_logic_vector(7 downto 0) := "01000011";

constant D : std_logic_vector(7 downto 0) := "01000100";

constant E : std_logic_vector(7 downto 0) := "01000101";

constant F : std_logic_vector(7 downto 0) := "01000110";

constant G : std_logic_vector(7 downto 0) := "01000111";

constant H : std_logic_vector(7 downto 0) := "01001000";

constant I : std_logic_vector(7 downto 0) := "01001001";

constant J : std_logic_vector(7 downto 0) := "01001010";

constant K : std_logic_vector(7 downto 0) := "01001011";

constant L : std_logic_vector(7 downto 0) := "01001100";

constant M : std_logic_vector(7 downto 0) := "01001101";

constant N : std_logic_vector(7 downto 0) := "01001110";

constant O : std_logic_vector(7 downto 0) := "01001111";

constant P : std_logic_vector(7 downto 0) := "01010000";

constant Q: std_logic_vector(7 downto 0) := "01010001";

constant R : std_logic_vector(7 downto 0) := "01010010";

constant S : std_logic_vector(7 downto 0) := "01010011";

constant T : std_logic_vector(7 downto 0) := "01010100";

constant U : std_logic_vector(7 downto 0) := "01010101";

constant V : std_logic_vector(7 downto 0) := "01010110";

constant W : std_logic_vector(7 downto 0) := "01010111";

constant X : std_logic_vector(7 downto 0) := "01011000";

constant Y : std_logic_vector(7 downto 0) := "01011001";

constant Z : std_logic_vector(7 downto 0) := "01011010";

-- SMAL LETTERS

constant SA : std_logic_vector(7 downto 0) := "01100001";

constant SB : std_logic_vector(7 downto 0) := "01100010";

constant SC : std_logic_vector(7 downto 0) := "01100011";

constant SD : std_logic_vector(7 downto 0) := "01100100";

Page 33: HDL Lab Manual

HDL LAB (06ECL48)

33 Department of Electronics & Communication, K.I.T, Tiptur

constant SE : std_logic_vector(7 downto 0) := "01100101";

constant SF : std_logic_vector(7 downto 0) := "01100110";

constant SG : std_logic_vector(7 downto 0) := "01100111";

constant SH : std_logic_vector(7 downto 0) := "01101000";

constant SI : std_logic_vector(7 downto 0) := "01101001";

constant SJ : std_logic_vector(7 downto 0) := "01101010";

constant SK : std_logic_vector(7 downto 0) := "01101011";

constant SL : std_logic_vector(7 downto 0) := "01101100";

constant SM : std_logic_vector(7 downto 0) := "01101101";

constant SN : std_logic_vector(7 downto 0) := "01101110";

constant SO : std_logic_vector(7 downto 0) := "01101111";

constant SP : std_logic_vector(7 downto 0) := "01110000";

constant SQ : std_logic_vector(7 downto 0) := "01110001";

constant SR : std_logic_vector(7 downto 0) := "01110010";

constant SS : std_logic_vector(7 downto 0) := "01110011";

constant ST : std_logic_vector(7 downto 0) := "01110100";

constant SU : std_logic_vector(7 downto 0) := "01110101";

constant SV : std_logic_vector(7 downto 0) := "01110110";

constant SW : std_logic_vector(7 downto 0) := "01110111";

constant SX : std_logic_vector(7 downto 0) := "01111000";

constant SY : std_logic_vector(7 downto 0) := "01111001";

constant SZ : std_logic_vector(7 downto 0) := "01111010";

---THE SYMBOLS

constant SPACE: std_logic_vector(7 downto 0) := "00100000";

constant SLASH: std_logic_vector(7 downto 0) := "00101111";

constant MINUS: std_logic_vector(7 downto 0) := "00101101";

constant EQUAL: std_logic_vector(7 downto 0) := "00111101";

constant PLUS : std_logic_vector(7 downto 0) := "00101011";

constant STAR : std_logic_vector(7 downto 0) := "00101010";

constant DOT : std_logic_vector(7 downto 0) := "00101110";

end LCD_GRAP;

1a.WRITE VHDL CODE TO DISPLAY MESSAGES ON THE GIVEN LCD ACCEPTING HEX KEY

PAD INPUT DATA.

AIM: TO DISPLAY THE MESSAGE ON THE LCD PANEL BY ACCEPTING HEX KEY BOARD DATA AS

INPUT.

PROCEDURE:

1. Make the connection between FRC5 of the FPGA board to the LCD display Connector of the VTU card1.

2. Make the connection between FRC 4 of the FPGA board to the keyboard Connector of the VTU card1.

3. Make the connection between FRC 6 of the FPGA board to the dipswitch Connector of the VTU card1.

4. Connect the downloading cable and power supply to the FPGA board

Page 34: HDL Lab Manual

HDL LAB (06ECL48)

34 Department of Electronics & Communication, K.I.T, Tiptur

5. Then open the xilinx impact software (refer ISE flow) select the slave Serial mode and select the respective

bit file and click program.

6. Make the reset switch on (active low).

7. Press the hex keys and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE WORK.LCD_GRAP.ALL;

ENTITY HEXKEY_LCD IS

PORT (

CLK: IN STD_LOGIC; -- 16 MHZ CLOCK

RESET: IN STD_LOGIC; -- MASTER RESET PIN

LCD_RW : OUT STD_LOGIC;

LCD_SELECT : OUT STD_LOGIC;

LCD_ENABLE : OUT STD_LOGIC;

ROW: IN STD_LOGIC_VECTOR(0 TO 3); -- THIS ARE THE ROW LINES

LCD_DATA: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -- GIVES REGISTERED DATA OUTPUT

COL: INOUT STD_LOGIC_VECTOR(0 TO 3));

END HEXKEY_LCD;

ARCHITECTURE HEXKEY_BEH OF HEXKEY_LCD IS

TYPE KEYPAD_STATE_TYPE IS (WAIT_R_0, C3, C2, C1, C0, FOUND, SAMPLE, WAIT_R_1); --

STATE NAMES

TYPE STATE_TYPE IS (INITIAL,DISPLAY,CLEAR,LOCATION,PUTCHAR);

SIGNAL STATE,NEXT_STATE: STATE_TYPE;

-- CLEAR SCREEN.

CONSTANT CLR: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001";

-- DISPLAY ON, WITHOUT CURSOR.

CONSTANT DON: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001100";

-- FUNCTION SET FOR 8-BIT DATA TRANSFER AND 2-LINE DISPLAY

CONSTANT SET: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111000";

--FREQUENCY DIVIDER

CONSTANT BIG_DELAY: INTEGER :=16;

CONSTANT SMALL_DELAY: INTEGER :=2;

CONSTANT REG_SETUP: INTEGER :=1;

SIGNAL CS, NS: KEYPAD_STATE_TYPE; -- SIGNALS FOR CURRENT AND NEXT STATES

SIGNAL DIV_REG: STD_LOGIC_VECTOR (16 DOWNTO 0); -- CLOCK DIVIDE REGISTER

SIGNAL DCLK,DDCLK: STD_LOGIC; -- THIS HAS THE DIVIDED CLOCK.

SIGNAL COL_REG_VALUE: STD_LOGIC_VECTOR (0 TO 3);

SIGNAL R1: STD_LOGIC; -- ROW DETECTION SIGNAL

SIGNAL KEY_VALUE: STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL DATA: STD_LOGIC_VECTOR (7 DOWNTO 0);

BEGIN

R1 <= ROW(3) OR ROW(2) OR ROW(1) OR ROW(0);

---------------------------- BEGINING OF FSM1 (KEYPAD SCANNER) -------------------------------

SYNC_PROC: PROCESS (DCLK, RESET, KEY_VALUE) -- THIS IS THE SYNCHRONOUS PART

BEGIN

IF (RESET = '0') THEN -- YOU MUST HAVE A RESET FOR FSM TO SYNTHESIZE PROPERLY

CS <= WAIT_R_0;

ELSIF (DCLK'EVENT AND DCLK = '1') THEN

CS <= NS;

END IF;

END PROCESS;

COMB_PROC: PROCESS (CS, R1, COL_REG_VALUE) -- THIS IS THE COMBINATIONAL PART

Page 35: HDL Lab Manual

HDL LAB (06ECL48)

35 Department of Electronics & Communication, K.I.T, Tiptur

BEGIN

CASE CS IS

---------------------------------------------------------------------------------------------------

WHEN WAIT_R_0 => -- WAITS TILL A BUTTON IS PRESSED

COL <= "1111"; -- KEEP ALL COLUMNS ACTIVATED

IF R1 = '1' THEN -- A BUTTON WAS PRESSED. BUT WHICH ONE?

NS <= C3; -- LET'S FIND OUT

ELSE

NS <= WAIT_R_0;

END IF;

---------------------------------------------------------------------------------------------------

WHEN C3 => --

COL <= "0001"; -- ACTIVATE COLUMN 3

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 3

NS <= C2; -- SO CHECK IF IT WAS IN COLUMN 2

ELSE NS <= FOUND; -- BUTTON WAS IN COLUMN 3

END IF;

---------------------------------------------------------------------------------------------------

WHEN C2 => --

COL <= "0010"; -- ACTIVATE COLUMN 2

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 2

NS <= C1; -- SO CHECK IF IT WAS IN COLUMN 1

ELSE

NS <= FOUND; -- BUTTON WAS IN COLUMN 2

END IF;

---------------------------------------------------------------------------------------------------

WHEN C1 => --

COL <= "0100"; -- ACTIVATE COLUMN 1

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 1

NS <= C0; -- SO CHECK IF IT WAS IN COLUMN 0

ELSE

NS <= FOUND; -- BUTTON WAS IN COLUMN 1

END IF;

---------------------------------------------------------------------------------------------------

WHEN C0 => --

COL <= "1000"; -- ACTIVATE COLUMN 0

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 0 ??

NS <= WAIT_R_0; -- SO THE BUTTON MUST HAVE BEEN DEPRESSED FAST

ELSE

NS <= FOUND; -- BUTTON WAS IN COLUMN 3

END IF;

---------------------------------------------------------------------------------------------------

WHEN FOUND => --

COL <= COL_REG_VALUE;

IF R1 = '0' THEN -- THIS MEANS BUTTON IS DEPRESSED

NS <= WAIT_R_0; -- SO GO BACK TO INITIAL STATE

ELSE

NS <= SAMPLE; -- OTHERWISE WRITE THE KEY VALUE TO DATA REGISTER

END IF;

---------------------------------------------------------------------------------------------------

WHEN SAMPLE => -- THIS STATE WILL GENERATE A SIGNAL WITH ONE CLOCK PERIOD FOR

SAMPLING

COL <= COL_REG_VALUE;

NS <= WAIT_R_1; -- OTHERWISE WAIT TILL BUTTON IS PRESSED

---------------------------------------------------------------------------------------------------

WHEN WAIT_R_1 => --

Page 36: HDL Lab Manual

HDL LAB (06ECL48)

36 Department of Electronics & Communication, K.I.T, Tiptur

COL <= COL_REG_VALUE;

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS DEPRESSED

NS <= WAIT_R_0; -- SO GO BACK TO INITIAL STATE

ELSE

NS <= WAIT_R_1; -- OTHERWISE WAIT TILL BUTTON IS PRESSED

END IF;

---------------------------------------------------------------------------------------------------

END CASE;

END PROCESS;

---------------------------------------------------------------------------------------------------

WRITE_DATA: PROCESS (DCLK, CS, KEY_VALUE) -- WRITE VALID DATA TO REGISTER

BEGIN

IF DCLK'EVENT AND DCLK = '0' THEN -- ON THE FALLING EDGE

IF CS = FOUND THEN

DATA <= KEY_VALUE;

END IF;

END IF;

END PROCESS; -- WRITE_DATA

---------------------------------------------------------------------------------------------------

COL_REG: PROCESS (DCLK, CS, COL) -- THIS IS THE COLUMN VALUE REGISTER

BEGIN

IF (DCLK'EVENT AND DCLK = '0') THEN -- REGISTER THE COL VALUE ON THE FALLING EDGE

IF (CS = C3 OR CS = C2 OR CS = C1 OR CS = C0) THEN -- PROVIDED WE'RE IN STATES C3 THRU C0

ONLY

COL_REG_VALUE <= COL; -- OTHERWISE THE COLUMN VALUE IS NOT VALID

END IF;

END IF;

END PROCESS; -- COL_REG

---------------------------------------------------------------------------------------------------

DECODER: PROCESS(ROW, COL_REG_VALUE) -- DECODES BINARY VALUE OF PRESSED KEY

FROM ROW AND

COLUMN

VARIABLE CODE: STD_LOGIC_VECTOR (0 TO 7);

BEGIN

CODE := (ROW & COL_REG_VALUE);

CASE CODE IS

-- COL

-- ROW 0 0123

WHEN "00010001" => KEY_VALUE <= ZERO;--KEY 0

WHEN "00010010" => KEY_VALUE <= ONE;--KEY 1

WHEN "00010100" => KEY_VALUE <= TWO;--KEY 2

WHEN "00011000" => KEY_VALUE <= THREE;--KEY 3

-- ROW 1

WHEN "00100001" => KEY_VALUE <= FOUR;--KEY 4

WHEN "00100010" => KEY_VALUE <= FIVE;--KEY 5

WHEN "00100100" => KEY_VALUE <= SIX;--KEY 6

WHEN "00101000" => KEY_VALUE <= SEVEN;--KEY 7

-- ROW 2

WHEN "01000001" => KEY_VALUE <= EIGHT;--KEY 8

WHEN "01000010" => KEY_VALUE <= NINE;--KEY 9

WHEN "01000100" => KEY_VALUE <= A;--KEY A

WHEN "01001000" => KEY_VALUE <= B;--KEY B

-- ROW 3

WHEN "10000001" => KEY_VALUE <= C;--KEY C

WHEN "10000010" => KEY_VALUE <= D;--KEY D

WHEN "10000100" => KEY_VALUE <= E;--KEY E

Page 37: HDL Lab Manual

HDL LAB (06ECL48)

37 Department of Electronics & Communication, K.I.T, Tiptur

WHEN "10001000" => KEY_VALUE <= F;--KEY F

WHEN OTHERS => KEY_VALUE <= SPACE; -- JUST IN CASE

END CASE;

END PROCESS; -- DECODER

---------------------------- END OF FSM1 (KEYPAD SCANNER) ---------------------------------------

-- SELECT THE APPROPRIATE LINES FOR SETTING FREQUENCY

CLK_DIV: PROCESS (CLK, DIV_REG) -- CLOCK DIVIDER

BEGIN

IF (CLK'EVENT AND CLK='1') THEN

DIV_REG <= DIV_REG + 1;

END IF;

END PROCESS;

DCLK <= DIV_REG(8);

DDCLK<=DIV_REG(10);

---------------------------- END OF CLOCK DIVIDER -------------------------------------------------

LCD_RW<='0';

PROCESS (DDCLK,RESET)

VARIABLE COUNT: INTEGER RANGE 0 TO BIG_DELAY;

VARIABLE C1 : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF RESET = '0' THEN

STATE<=INITIAL;

COUNT:=0;

LCD_ENABLE<='0';

LCD_SELECT<='0';

C1 := "01111111";

ELSIF DDCLK'EVENT AND DDCLK = '1' THEN

CASE STATE IS

WHEN INITIAL => -- TO SET THE FUNCTION

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=SET;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=DISPLAY;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN DISPLAY => -- TO SET DISPLAY ON

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=DON;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=CLEAR;COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN CLEAR => -- CLEAR THE SCREEN

Page 38: HDL Lab Manual

HDL LAB (06ECL48)

38 Department of Electronics & Communication, K.I.T, Tiptur

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=CLR;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN LOCATION => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

IF COUNT=0 THEN

IF C1="10001111" THEN

C1:="11000000";

ELSIF C1="11001111" THEN

C1:="10000000";

ELSE

C1:=C1+'1';

END IF;

END IF;

LCD_DATA <= C1 ;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=PUTCHAR;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN PUTCHAR=> -- DISPLAY THE CHARACTER ON THE LCD

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

CASE C1 IS

WHEN "10000000" => LCD_DATA<= H ;--SIGLE LINE

WHEN "10000001" => LCD_DATA<= E ;--SIGLE LINE

WHEN "10000010" => LCD_DATA<= X ;--SIGLE LINE

WHEN "10000011" => LCD_DATA<= SPACE ;--SIGLE LINE

WHEN "10000100" => LCD_DATA<= SPACE ;--SIGLE LINE

WHEN "10000101" => LCD_DATA<= K ;--SIGLE LINE

WHEN "10000110" => LCD_DATA<= E ;--SIGLE LINE

WHEN "10000111" => LCD_DATA<= Y ;--SIGLE LINE

WHEN "10001000" => LCD_DATA<= B ;

WHEN "10001001" => LCD_DATA<= O ;

WHEN "10001010" => LCD_DATA<= A ;

WHEN "10001011" => LCD_DATA<= R ;

WHEN "10001100" => LCD_DATA<= D ;

Page 39: HDL Lab Manual

HDL LAB (06ECL48)

39 Department of Electronics & Communication, K.I.T, Tiptur

WHEN "10001101" => LCD_DATA<= SPACE ;

WHEN "10001110" => LCD_DATA<= SPACE ;

WHEN "10001111" => LCD_DATA<= SPACE;

WHEN "11000000" => LCD_DATA<= K ;--SIGLE LINE

WHEN "11000001" => LCD_DATA<= E ;--SIGLE LINE

WHEN "11000010" => LCD_DATA<= Y ;--SIGLE LINE

WHEN "11000011" => LCD_DATA<= P ;--SIGLE LINE

WHEN "11000100" => LCD_DATA<= R ;--SIGLE LINE

WHEN "11000101" => LCD_DATA<= E ;--SIGLE LINE

WHEN "11000110" => LCD_DATA<= S ;--SIGLE LINE

WHEN "11000111" => LCD_DATA<= S ;--SIGLE LINE

WHEN "11001000" => LCD_DATA<= E ;

WHEN "11001001" => LCD_DATA<= D ;

WHEN "11001010" => LCD_DATA<= SPACE ;

-- WHEN "11001011" => LCD_DATA<= RIGHT_ARROW ;

WHEN "11001100" => LCD_DATA<= SPACE ;

WHEN "11001101" => LCD_DATA<= DATA ;

WHEN "11001110" => LCD_DATA<= SPACE ;

WHEN "11001111" => LCD_DATA<= SPACE;

WHEN OTHERS => NULL;

END CASE ;

LCD_SELECT<='1';

IF COUNT=SMALL_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

END CASE;

END IF;

END PROCESS;

END HEXKEY_BEH;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P52" ;

NET "COL<0>" LOC = "P139" ;

NET "COL<1>" LOC = "P134" ;

NET "COL<2>" LOC = "P136" ;

NET "COL<3>" LOC = "P132" ;

NET "LCD_DATA<0>" LOC = "P21" ;

NET "LCD_DATA<1>" LOC = "P23" ;

NET "LCD_DATA<2>" LOC = "P22" ;

NET "LCD_DATA<3>" LOC = "P26" ;

NET "LCD_DATA<4>" LOC = "P27" ;

Page 40: HDL Lab Manual

HDL LAB (06ECL48)

40 Department of Electronics & Communication, K.I.T, Tiptur

NET "LCD_DATA<5>" LOC = "P30" ;

NET "LCD_DATA<6>" LOC = "P29" ;

NET "LCD_DATA<7>" LOC = "P31" ;

NET "LCD_ENABLE" LOC = "P19" ;

NET "LCD_RW" LOC = "P20" ;

NET "LCD_SELECT" LOC = "P4" ;

NET "RESET" LOC = "P41" ;

NET "ROW<0>" LOC = "P126" ;

NET "ROW<1>" LOC = "P129" ;

NET "ROW<2>" LOC = "P124" ;

NET "ROW<3>" LOC = "P122" ;

===============================================================

1b. WRITE VHDL CODE TO DISPLAY MESSAGES ON THE GIVEN SEVEN SEGMENT DISPLAY

ACCEPTING HEX KEY PAD INPUT DATA.

AIM: TO DISPLAY THE MESSAGE ON THE SEVEN SEGMENT DISPLAY BY ACCEPTING HEX KEY PAD

INPUT

DATA.

PROCEDURE:

1. Make the connection between FRC5 of the FPGA board to the seven-segment connector of the VTUcard1.

2. Make the connection between FRC 4 of the FPGA board to the keyboard connector of the VTU card1.

3. Make the connection between FRC 6 of the FPGA board to the dipswitch connector of the VTU card1.

4. Connect the downloading cable and power supply to the fpga board.

5. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

Page 41: HDL Lab Manual

HDL LAB (06ECL48)

41 Department of Electronics & Communication, K.I.T, Tiptur

6. Make the reset switch on (active low).

7. Press the hex keys and analyze the data.

VHDL CODING

------------------------------------

--CODE FOR SIMULATING 16 KEYS USING

--KEYBOARD PROVIDED ON SPARTAN BOARD

------------------------------------

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY KEY IS

PORT ( COLUMN : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0)=”0001”;

ROW_READ : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

CLK : IN STD_LOGIC;

DISP_SELECT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

SEVEN_SEG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END KEY;

ARCHITECTURE BEHAVIORAL OF KEY IS

BEGIN

---------------------------

--CLOCK DIVISION TO 4KHZ

--------------------------

PROCESS(CLK)

BEGIN

IF CLK='1' AND CLK'EVENT THEN

COLUMN <=COLUMN(2 DOWNTO 0)& COLUMN (3); --SHIFTING

END IF;

END PROCESS;

DISP_SELECT <=”1110”; ----TO SELECT DISPLAY

PROCESS(ROW_READ,COLUMN)

BEGIN

CASE COLUMN IS

WHEN "0001" => CASE ROW_READ IS

WHEN "0001" => SEVEN_SEG <= "1111110";

WHEN "0010" => SEVEN_SEG <= "0110011";

WHEN "0100" => SEVEN_SEG <= "1111111";

WHEN "1000" => SEVEN_SEG <= "1001110";

WHEN OTHERS=> SEVEN_SEG <= "0000000";

END CASE;

WHEN "0010" => CASE ROW_READ IS

WHEN "0001" => SEVEN_SEG <= "0110000";

WHEN "0010" => SEVEN_SEG <= "1011011";

WHEN "0100" => SEVEN_SEG <= "1111011";

WHEN "1000" => SEVEN_SEG <= "0111101";

WHEN OTHERS=> SEVEN_SEG <= "0000000";

END CASE;

WHEN "0100" => CASE ROW_READ IS

WHEN "0001" => SEVEN_SEG <= "1101101";

WHEN "0010" => SEVEN_SEG <= "1011111";

WHEN "0100" => SEVEN_SEG <= "1110111";

WHEN "1000" => SEVEN_SEG <= "1001111";

WHEN OTHERS=> SEVEN_SEG <= "0000000";

END CASE;

WHEN "1000" => CASE ROW_READ IS

Page 42: HDL Lab Manual

HDL LAB (06ECL48)

42 Department of Electronics & Communication, K.I.T, Tiptur

WHEN "0001" => SEVEN_SEG <= "1111001";

WHEN "0010" => SEVEN_SEG <= "1110000";

WHEN "0100" => SEVEN_SEG <= "0011111";

WHEN "1000" => SEVEN_SEG <= "1000111";

WHEN OTHERS=> SEVEN_SEG <= "0000000";

END CASE;

WHEN OTHERS=> NULL;

END CASE;

END PROCESS;

END BEHAVIORAL;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P52";

NET "DISP_CNT<0>" LOC = "P30";

NET "DISP_CNT<1>" LOC = "P29";

NET "DISP_CNT<2>" LOC = "P31";

NET "DISP_CNT<3>" LOC = "P38";

NET "DISP<0>" LOC = "P26";

NET "DISP<1>" LOC = "P22";

NET "DISP<2>" LOC = "P23";

NET "DISP<3>" LOC = "P21";

NET "DISP<4>" LOC = "P19";

NET "DISP<5>" LOC = "P20";

NET "DISP<6>" LOC = "P4";

NET "READ_L_IN<0>" LOC = "P122";

NET "READ_L_IN<1>" LOC = "P124";

NET "READ_L_IN<2>" LOC = "P129";

NET "READ_L_IN<3>" LOC = "P126";

NET "SCAN_L<0>" LOC = "P132";

NET "SCAN_L<1>" LOC = "P136";

NET "SCAN_L<2>" LOC = "P134";

NET "SCAN_L<3>" LOC = "P139";

===============================================================

2a. WRITE A VHDL CODE TO CONTROL SPEED, DIRECTION OF DC MOTOR.

AIM: TO CONTROL SPEED AND DIRECTION OF DC MOTOR.

PROCEDURE:

1. Make the connection between FRC9 of the FPGA board to the dc motor connector of the VTU card2.

2. Make the connection between FRC7 of the FPGA board to the keyboard connector of the VTUcard2.

3. Make the connection between frc1 of the FPGA board to the dip switch connector of the VTU card2.

4. Connect the downloading cable and power supply to the FPGA board.

5. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the

respective bit file and click program.

6. Make the reset switch on (active low).

7. Press the hex keys and analyze the speed changes.

Page 43: HDL Lab Manual

HDL LAB (06ECL48)

43 Department of Electronics & Communication, K.I.T, Tiptur

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

LIBRARY UNISIM;

USE UNISIM.VCOMPONENTS.ALL;

ENTITY DCMOTOR IS

PORT ( M_ENABLE,MTR1,MTR2: OUT STD_LOGIC;

RESET,CLK: IN STD_LOGIC;

ROW: IN STD_LOGIC_VECTOR(3 DOWNTO 0) ); -- THIS ARE THE ROW LINES

END DCMOTOR;

ARCHITECTURE DCMOTOR1 OF DCMOTOR IS

SIGNAL COUNTER : STD_LOGIC_VECTOR(BITS - 7 DOWNTO 0):="11111110";

SIGNAL D_CLK : STD_LOGIC_VECTOR (20 DOWNTO 0); -- THIS HAS THE DIVIDED CLOCK.

SIGNAL DUTY_CYCLE: INTEGER RANGE 0 TO 255;

SIGNAL TICK : STD_LOGIC;

BEGIN

-- SELECT THE APPROPRIATE LINES FOR SETTING FREQUENCY

PROCESS (CLK) -- CLOCK DIVIDER

BEGIN

IF (CLK'EVENT AND CLK='1') THEN

D_CLK <= D_CLK + 1;

END IF;

END PROCESS;

--------------------------- END OF CLOCK DIVIDER -------------------------------------------------

TICK <= ROW(0) AND ROW(1) AND ROW(2) AND ROW(3);

PROCESS(D_CLK(12))

BEGIN

IF RISING_EDGE(D_CLK(13)) THEN

COUNTER<= COUNTER +1;

END IF;

END PROCESS;

PROCESS(TICK)

BEGIN

IF FALLING_EDGE(TICK) THEN

CASE ROW IS

WHEN "1110" => DUTY_CYCLE <= 255 ; --MOTOR SPEED 1

WHEN "1101" => DUTY_CYCLE <= 200 ; --MOTOR SPEED 2

WHEN "1011" => DUTY_CYCLE <= 150 ; --MOTOR SPEED 3

WHEN "0111" => DUTY_CYCLE <= 100 ; --MOTOR SPEED 4

WHEN OTHERS => DUTY_CYCLE <= 100;

END CASE;

END IF;

END PROCESS;

PROCESS(RESET)

BEGIN

IF RESET = '0' THEN

M_ENABLE<=’0’;

ELSE

Page 44: HDL Lab Manual

HDL LAB (06ECL48)

44 Department of Electronics & Communication, K.I.T, Tiptur

M_ENABLE<=’1’;

MTR2 <= ‘0’;

IF COUNTER >= DUTY_CYCLE THEN

MTR1 <= '1';

ELSE

MTR1 <= '0';

END IF;

END IF;

END PROCESS;

END DCMOTOR1;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P52" ;

NET "PWM<0>" LOC = "P5" ;

NET "PWM<1>" LOC = "P141" ;

NET "RESET" LOC = "P74" ;

NET "RLY" LOC = "P3" ;

NET "ROW<0>" LOC = "P64" ;

NET "ROW<1>" LOC = "P63" ;

NET "ROW<2>" LOC = "P60" ;

NET "ROW<3>" LOC = "P58" ;

===============================================================

2b. WRITE A VHDL CODE TO CONTROL SPEED, DIRECTION OF STEPPER MOTOR.

AIM: TO CONTROL SPEED AND DIRECTION OF STEPPER MOTOR.

PROCEDURE:

1. Make the connection between FRC9 of the FPGA board to the stepper motor connector of the VTUcard2.

2. Make the connection between FRC7 of the FPGA board to the keyboard connector of the VTUcard2.

3. Make the connection between FRC1 of the FPGA board to the dip switch connector of the VTUcard2.

4. Connect the downloading cable and power supply to the FPGA board.

5. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

6. Make the reset switch on (active low).

7. Press the hex keys and analyze the speed changes.

Page 45: HDL Lab Manual

HDL LAB (06ECL48)

45 Department of Electronics & Communication, K.I.T, Tiptur

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY STEPPER IS

PORT ( DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

CLK,RESET : IN STD_LOGIC

DIRE: IN STD_LOGIC);

END STEPPER;

ARCHITECTURE BEHAVIORAL OF STEPPER IS

SIGNAL CLK_DIV : STD_LOGIC_VECTOR(20 DOWNTO 0);

SIGNAL CLK_INT: STD_LOGIC;

SIGNAL SHIFT_REG : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE (CLK) THEN

CLK_DIV <= CLK_DIV + '1';

END IF;

END PROCESS;

CLK_INT <= CLK_DIV(16);

PROCESS(RESET,CLK_INT)

BEGIN

IF RESET='0' THEN

SHIFT_REG <= "0001";

ELSIF RISING_EDGE(CLK_INT) THEN

CASE DIRE IS

WHEN ‘0’ =>SHIFT_REG <= SHIFT_REG(2 DOWNTO 0) & SHIFT_REG(3);

WHEN ‘1’ =>SHIFT_REG <= SHIFT_REG(0) & SHIFT_REG(3 DOWNTO 1);

WHEN OTHERS => NULL;

END CASE;

END IF;

END PROCESS;

DOUT <= SHIFT_REG;

END BEHAVIORAL;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18"; NET "DOUT<0>" LOC = "P7";

NET "DOUT<1>" LOC = "P5"; NET "DOUT<2>" LOC = "P3";

NET "DOUT<3>" LOC = "P141"; NET "RESET" LOC = "P74";

===============================================================

3.a. WRITE A VHDL CODE TO GENERATE SINE WAVEFORMS USING DAC CHANGE THE

FREQUENCY ANDAMPLITUDE.

AIM: TO GENERATE SINE WAVE USING DAC CHANGE THE FREQUENCY AND AMPLITUDE.

PROCEDURE:

1. Make the connection between FRC5 of the FPGA board to the DAC connector of the VTU card2.

2. Make the connection between FRC1 of the FPGAboard to the dip switch connector of the VTU card2.

3. Connect the downloading cable and power supply to the FPGA board.

4. Then open the xilinx impact software (refer ise flow) select the slave serial mode and select the respective bit

file and click program.

5. Make the reset switch on (active low) and analyze the data.

VHDL CODE

LIBRARY IEEE;

Page 46: HDL Lab Manual

HDL LAB (06ECL48)

46 Department of Electronics & Communication, K.I.T, Tiptur

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY DIGITAL_SINE_WAVE IS

PORT ( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

DAC_OUT : OUT STD_LOGIC_VECTOR(0 TO 7));

END DIGITAL_SINE_WAVE ;

ARCHITECTURE BEHAVIORAL OF DIGITAL_SINE_WAVE IS

SIGNAL i: INTEGER RANGE 0 TO 23;

TYPE LOOK_UP IS ARRAY(0 TO 23) OF STD_LOGIC_VECTOR(7 DOWNTO 0);

CONSTANTSINE_LOOKUP:LOOK_UP:=(“01111111”,”10100000”,10111110”,”11011001”,

”11101101”,”11111001”,”11111110”, --0 TO 90°°°°

“11111001”,”11101101”,”11011001”,”10111110”,”10100000”,”01111111”, --TILL 180°°°°

“01011110”,”00111111”,”00100101”,”00010001”,”00000100”,”00000000”, --TILL 270°°°°

“00000100”,”00010001”,”00100101”,”00111111”,”01011110”);

SIGNAL TEMP : STD_LOGIC_VECTOR(2 DOWNTO 0):=”000”;

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

TEMP <= TEMP + '1' ;

END IF;

END PROCESS;

PROCESS(TEMP(2))

BEGIN

IF TEMP(2)= '1' AND TEMP(2)’EVENT THEN

IF RST='1' THEN

DAC <= "00000000";

ELSE

i <= i +1;

DAC<=SINE_LOOKUP(I);

IF i=23 THEN

i<=0;

END IF;

END IF;

END PROCESS;

END BEHAVIORAL;

3b. WRITE A VHDL CODE TO GENERATE SQUARE WAVEFORMS USING DAC CHANGE THE

FREQUENCY AND AMPLITUDE.

AIM: TO GENERATE SQUARE WAVE USING DAC. CHANGE THE FREQUENCY AND AMPLITUDE.

PROCEDURE:

1. Make the connection between FRC5 of the FPGA board to the DACconnector of the VTU card2.

2. Make the connection between FRC1 of the fpga board to the dip switch connector of the VTU card2.

3. Connect the downloading cable and power supply to the fpga board.

4. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

5. Make the reset switch on (active low) and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

========================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18" ;

NET "DAC_OUT<0>" LOC = "P27" ;

NET "DAC_OUT<1>" LOC = "P26" ;

NET "DAC_OUT<2>" LOC = "P22" ;

NET "DAC_OUT<3>" LOC = "P23" ;

NET "DAC_OUT<4>" LOC = "P21" ;

NET "DAC_OUT<5>" LOC = "P19" ;

NET "DAC_OUT<6>" LOC = "P20" ;

NET "DAC_OUT<7>" LOC = "P4" ;

NET "RST" LOC = "P74" ;

Page 47: HDL Lab Manual

HDL LAB (06ECL48)

47 Department of Electronics & Communication, K.I.T, Tiptur

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SQUARE_WAVE IS

PORT ( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

DAC_OUT : OUT STD_LOGIC_VECTOR(0 TO 7));

END SQUARE_WAVE;

ARCHITECTURE BEHAVIORAL OF SQUARE_WAVE IS

SIGNAL TEMP : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL COUNTER : STD_LOGIC_VECTOR(0 TO 7);

SIGNAL EN :STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

TEMP <= TEMP + '1' ;

END IF;

END PROCESS;

PROCESS(TEMP(3))

BEGIN

IF RST='1' THEN

COUNTER <= "00000000";

ELSIF RISING_EDGE(TEMP(3)) THEN

IF COUNTER<255 AND EN='0' THEN

COUNTER <= COUNTER + 1 ;

EN<='0';

DAC_OUT <="00000000"; --DAC_OUT<=COUNTER;(FOR TRIANGULAR WAVE)

ELSIF COUNTER=0 THEN

EN<='0';

ELSE

EN<='1';

COUNTER <= COUNTER-1;

DAC_OUT <="11111111"; --DAC_OUT<=COUNTER;(FOR TRIANGULAR WAVE)

END IF;

END IF;

END PROCESS;

END BEHAVIORAL;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18" ;

NET "DAC_OUT<0>" LOC = "P27" ;

NET "DAC_OUT<1>" LOC = "P26" ;

NET "DAC_OUT<2>" LOC = "P22" ;

NET "DAC_OUT<3>" LOC = "P23" ;

NET "DAC_OUT<4>" LOC = "P21" ;

NET "DAC_OUT<5>" LOC = "P19" ;

NET "DAC_OUT<6>" LOC = "P20" ;

NET "DAC_OUT<7>" LOC = "P4" ;

NET "RST" LOC = "P74" ;

===============================================================

Page 48: HDL Lab Manual

HDL LAB (06ECL48)

48 Department of Electronics & Communication, K.I.T, Tiptur

3.c. WRITE A VHDL CODE TO GENERATE TRAINGULAR WAVEFORMS USING DAC CHANGE

THE FREQUENCY AND AMPLITUDE.

AIM: TO GENERATE TRIANGULAR WAVE USING DAC. CHANGE THE FREQUENCY AND AMPLITUDE.

PROCEDURE:

1. Make the connection between FRC5 of the fpga board to the DACconnector of the VTUcard2.

2. Make the connection between frc1 of the fpga board to the dip switch connector of the VTUcard2.

3. Connect the downloading cable and power supply to the fpga board.

4. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

5. Make the reset switch on (active low) and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

Page 49: HDL Lab Manual

HDL LAB (06ECL48)

49 Department of Electronics & Communication, K.I.T, Tiptur

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY TRIANGULAR_WAVE IS

PORT ( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

DAC_OUT : OUT STD_LOGIC_VECTOR(0 TO 7));

END TRIANGULAR_WAVE ;

ARCHITECTURE BEHAVIORAL OF TRIANGULAR_WAVE IS

SIGNAL COUNTER : STD_LOGIC_VECTOR(0 TO 8);

SIGNAL TEMP : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL EN :STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

TEMP <= TEMP + '1' ;

END IF;

END PROCESS;

PROCESS(TEMP(3))

BEGIN

IF RST='1' THEN

COUNTER <= "000000000";

ELSIF RISING_EDGE(TEMP(3)) THEN

COUNTER <= COUNTER + 1 ;

IF COUNTER(0)='1' THEN

DAC_OUT <=COUNTER(1 TO 8);

ELSE

DAC_OUT <=NOT(COUNTER(1 TO 8));

END IF;

END IF;

END PROCESS;

END BEHAVIORAL;

3.d. WRITE A VHDL CODE TO GENERATE RAMP WAVEFORMS USING DAC CHANGE THE

FREQUENCY AND AMPLITUDE.

AIM: TO GENERATE RAMP WAVE USING DAC CHANGE THE FREQUENCY AND AMPLITUDE.

PROCEDURE:

1. Make the connection between FRC5 of the FPGA board to the DAC connector of the VTU card2.

2. Make the connection between FRC1 of the FPGA board to the dip switch connector of the VTU card2.

3. Connect the downloading cable and power supply to the FPGA board.

4. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

5. Make the reset switch on (active low) and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18" ;

NET "DAC_OUT<0>" LOC = "P27" ;

NET "DAC_OUT<1>" LOC = "P26" ;

NET "DAC_OUT<2>" LOC = "P22" ;

NET "DAC_OUT<3>" LOC = "P23" ;

NET "DAC_OUT<4>" LOC = "P21" ;

NET "DAC_OUT<5>" LOC = "P19" ;

NET "DAC_OUT<6>" LOC = "P20" ;

NET "DAC_OUT<7>" LOC = "P4" ;

NET "RST" LOC = "P74" ;

================================================

Page 50: HDL Lab Manual

HDL LAB (06ECL48)

50 Department of Electronics & Communication, K.I.T, Tiptur

ENTITY RAMP_WAVE IS

PORT ( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

DAC_OUT : OUT STD_LOGIC_VECTOR(0 TO 7));

END RAMP_WAVE;

ARCHITECTURE BEHAVIORAL OF RAMP_WAVE IS

SIGNAL TEMP : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL COUNTER : STD_LOGIC_VECTOR(0 TO 7);

SIGNAL EN :STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

TEMP <= TEMP + '1' ;

END IF;

END PROCESS;

PROCESS(TEMP(3))

BEGIN

IF RST='1' THEN

COUNTER <= "00000000";

ELSIF RISING_EDGE(TEMP(3)) THEN

COUNTER <= COUNTER + 15 ;

END IF;

END PROCESS;

DAC_OUT <=COUNTER;

END BEHAVIORAL;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18" ; NET "DAC_OUT<0>" LOC = "P27" ;

NET "DAC_OUT<1>" LOC = "P26" ; NET "DAC_OUT<2>" LOC = "P22" ;

NET "DAC_OUT<3>" LOC = "P23" ; NET "DAC_OUT<4>" LOC = "P21" ;

NET "DAC_OUT<5>" LOC = "P19" ; NET "DAC_OUT<6>" LOC = "P20" ;

NET "DAC_OUT<7>" LOC = "P4" ; NET "RST" LOC = "P74" ;

===============================================================

3.e. WRITE A VHDL CODE TO GENERATE SAWTOOTH WAVEFORMS USING DAC CHANGE

THE FREQUENCY AND AMPLITUDE.

AIM: TO GENERATE SAWTOOTH WAVE USING DAC CHANGE THE FREQUENCY AND AMPLITUDE.

PROCEDURE:

1. Make the connection between frc5 of the FPGA board to the DAC connector of the vtu card2.

2. Make the connection between frc1 of the FPGA board to the dip switch connector of the vtu card2.

3. Connect the downloading cable and power supply to the fpga board.

4. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

5. Make the reset switch on (active low) and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SWATOOTH_WAVE IS

Page 51: HDL Lab Manual

HDL LAB (06ECL48)

51 Department of Electronics & Communication, K.I.T, Tiptur

PORT ( CLK : IN STD_LOGIC;

RST : IN STD_LOGIC;

DAC_OUT : OUT STD_LOGIC_VECTOR(0 TO 7));

END SWATOOTH_WAVE;

ARCHITECTURE BEHAVIORAL OF SWATOOTH_WAVE IS

SIGNAL TEMP : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL COUNTER : STD_LOGIC_VECTOR(0 TO 7);

SIGNAL EN :STD_LOGIC;

BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

TEMP <= TEMP + '1' ;

END IF;

END PROCESS;

PROCESS(TEMP(3))

BEGIN

IF RST='1' THEN

COUNTER <= "00000000";

ELSIF RISING_EDGE(TEMP(3)) THEN

COUNTER <= COUNTER + 1 ;

END IF;

END PROCESS;

DAC_OUT <=COUNTER;

END BEHAVIORAL;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18" ; NET "DAC_OUT<0>" LOC = "P27" ;

NET "DAC_OUT<1>" LOC = "P26" ; NET "DAC_OUT<2>" LOC = "P22" ;

NET "DAC_OUT<3>" LOC = "P23" ; NET "DAC_OUT<4>" LOC = "P21" ;

NET "DAC_OUT<5>" LOC = "P19" ; NET "DAC_OUT<6>" LOC = "P20" ;

===============================================================

4. WRITE A VHDL CODE TO CONTROL EXTERNAL LIGHTS USING RELAYS.

AIM: TO CONTROL EXTERNAL LIGHTS USING RELAYS.

PROCEDURE:

1. Make the connection between frc9 of theFPGAboard to the external light connector of the VTU card2.

2. Make the connection between frc1 of the FPGA board to the dip switch connector of the VTU card2.

3. Connect the downloading cable and power supply to the FPGA board.

4. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

5. Make the reset switch on (active low) and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY EXTLIGHT IS

PORT ( CNTRL1,CNTRL2 : IN STD_LOGIC;

LIGHT : OUT STD_LOGIC);

Page 52: HDL Lab Manual

HDL LAB (06ECL48)

52 Department of Electronics & Communication, K.I.T, Tiptur

END EXTLIGHT;

ARCHITECTURE BEHAVIORAL OF EXTLIGHT IS

BEGIN

LIGHT<= CNTRL1 OR CNTRL2 ;

END BEHAVIORAL;

===============================================================

UCF FILE(USER CONSTRAINT

NET "CNTRL1" LOC = "P74";

NET "CNTRL2" LOC = "P75";

NET "LIGHT" LOC = "P7";

5a. WRITE A VHDL CODE TO ACCEPT 8 CHANNEL ANALOG SIGNAL, TEMPERATURE

SENSORS AND DISPLAY THE DATA ON LCD PANEL OR SEVEN SEGMENT DISPLAY.

AIM: TO ACCEPT 8 CHANNEL ANALOG SIGNAL, AND DISPLAY THE DATA ON LCD PANEL DISPLAY.

PROCEDURE:

1. Make the connection between frc5 of the FPGA board to the LCD display connector of the VTU card1.

2. Make the connection between frc10 of the FPGA board to the ADC connector of the VTU card1.

3. Make the connection between frc6 of the FPGA board to the dip switch connector of the VTU card1.

4. Short the jumper j1 to the vin to get the analog signal.

5. Connect the downloading cable and power supply to the fpga board.

6. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

7. Make the reset switch on (active low).

8. Press the hex keys and analyze the data.

VHDL CODING

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE WORK.LCD_GRAP.ALL;

Page 53: HDL Lab Manual

HDL LAB (06ECL48)

53 Department of Electronics & Communication, K.I.T, Tiptur

LIBRARY UNISIM;

USE UNISIM.VCOMPONENTS.ALL;

ENTITY ADC_LCD IS

PORT ( CLK: IN STD_LOGIC; -- 4 MHZ CLOCK

RESET: IN STD_LOGIC; -- MASTER RESET PIN

INTR: IN STD_LOGIC;

ADC_OUT: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

CS,RD,WR:OUT STD_LOGIC;

LCD_RW : OUT STD_LOGIC;

LCD_SELECT : OUT STD_LOGIC;

LCD_ENABLE : OUT STD_LOGIC;

LCD_DATA: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); -- GIVES REGISTERED DATA OUTPUT

END ADC_LCD;

ARCHITECTURE ADC_BEH OF ADC_LCD IS

TYPE STATE_TYPE IS (INITIAL,DISPLAY,CLEAR,LOCATION,PUTCHAR);

SIGNAL STATE,NEXT_STATE: STATE_TYPE;

-- CLEAR SCREEN.

CONSTANT CLR: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001";

-- DISPLAY ON, WITHOUT CURSOR.

CONSTANT DON: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001100";

-- FUNCTION SET FOR 8-BIT DATA TRANSFER AND 2-LINE DISPLAY

CONSTANT SET: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111000";

--FREQUENCY DIVIDER

SIGNAL COUNTER : STD_LOGIC_VECTOR(18 DOWNTO 0);

SIGNAL CLK_DIV :STD_LOGIC;

CONSTANT BIG_DELAY: INTEGER :=16;

CONSTANT SMALL_DELAY: INTEGER :=2;

CONSTANT REG_SETUP: INTEGER :=1;

SIGNAL DIGITAL_DATA1,DATA1,DATA2: STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL DIGITAL_DATA : INTEGER RANGE 0 TO 255;

SIGNAL NTR :STD_LOGIC;

BEGIN

IBUF_INST : IBUF

-- EDIT THE FOLLOWING GENERIC TO SPECIFY THE I/O STANDARD FOR THIS PORT.

GENERIC MAP (

IOSTANDARD => "LVCMOS25")

PORT MAP (

O => NTR, -- BUFFER OUTPUT

I => INTR -- BUFFER INPUT (CONNECT DIRECTLY TO TOP-LEVEL PORT));

PROCESS(CLK)

BEGIN

IF CLK='1' AND CLK'EVENT THEN

COUNTER<=COUNTER+'1';

END IF;

END PROCESS;

CLK_DIV<=COUNTER(7);

CS <='0';

WR <=NTR;

DIGITAL_DATA1 <= ADC_OUT ;

RD <='0';

DIGITAL_DATA<=CONV_INTEGER(DIGITAL_DATA1) ;

PROCESS(DIGITAL_DATA)

BEGIN

CASE (DIGITAL_DATA) IS

WHEN 0 TO 100 => DATA1 <= ONE ; DATA2 <= NINE ;

WHEN 101 TO 110 => DATA1 <= TWO ; DATA2 <= ZERO ;

Page 54: HDL Lab Manual

HDL LAB (06ECL48)

54 Department of Electronics & Communication, K.I.T, Tiptur

WHEN 111 TO 120 => DATA1 <= TWO ; DATA2 <= ONE ;

WHEN 121 TO 130 => DATA1 <= TWO ; DATA2 <= TWO ;

WHEN 131 TO 140 => DATA1 <= TWO ; DATA2 <= THREE ;

WHEN 141 TO 150 => DATA1 <= TWO ; DATA2 <= FOUR ;

WHEN 151 TO 160 => DATA1 <= TWO ; DATA2 <= FIVE ;

WHEN 161 TO 170 => DATA1 <= TWO ; DATA2 <= SIX ;

WHEN 171 TO 180 => DATA1 <= TWO ; DATA2 <= SEVEN ;

WHEN 181 TO 190 => DATA1 <= TWO ; DATA2 <= EIGHT ;

WHEN 191 TO 200 => DATA1 <= TWO ; DATA2 <= NINE ;

WHEN 201 TO 205 => DATA1 <= THREE ; DATA2 <= ZERO ;

WHEN 206 TO 210 => DATA1 <= THREE ; DATA2 <= ONE ;

WHEN 211 TO 215 => DATA1 <= THREE ; DATA2 <= TWO ;

WHEN 216 TO 220 => DATA1 <= THREE ; DATA2 <= THREE ;

WHEN 221 TO 225 => DATA1 <= THREE ; DATA2 <= FOUR ;

WHEN 226 TO 230 => DATA1 <= THREE ; DATA2 <= FIVE ;

WHEN 231 TO 235 => DATA1 <= THREE ; DATA2 <= SIX ;

WHEN 236 TO 240 => DATA1 <= THREE ; DATA2 <= SEVEN ;

WHEN 241 TO 245 => DATA1 <= THREE ; DATA2 <= EIGHT ;

WHEN 246 TO 250 => DATA1 <= THREE ; DATA2 <= NINE ;

WHEN OTHERS => DATA1 <= FOUR ; DATA2 <= ZERO ;

END CASE;

END PROCESS;

LCD_RW<='0';

PROCESS (CLK_DIV,RESET)

VARIABLE COUNT: INTEGER RANGE 0 TO BIG_DELAY;

VARIABLE C1 : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF RESET = '1' THEN

STATE<=INITIAL;

COUNT:=0;

LCD_ENABLE<='0';

LCD_SELECT<='0';

C1 := "01111111";

ELSIF CLK_DIV'EVENT AND CLK_DIV = '1' THEN

CASE STATE IS

WHEN INITIAL => -- TO SET THE FUNCTION

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=SET;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=DISPLAY;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN DISPLAY => -- TO SET DISPLAY ON

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=DON;

Page 55: HDL Lab Manual

HDL LAB (06ECL48)

55 Department of Electronics & Communication, K.I.T, Tiptur

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=CLEAR;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN CLEAR => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=CLR;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN LOCATION => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

IF COUNT=0 THEN

IF C1="10001111" THEN

C1:="10000000";

ELSE

C1:=C1+'1';

END IF;

END IF;

LCD_DATA <= C1 ;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=PUTCHAR;

COUNT:=0; ELSE

COUNT:=COUNT+1;

END IF;

WHEN PUTCHAR=> -- DISPLAY THE CHARACTER ON THE LCD

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE LCD_ENABLE<='0';

END IF;

CASE C1 IS

WHEN "10000000" => LCD_DATA<= A ;

WHEN "10000001" => LCD_DATA<= D ;

WHEN "10000010" => LCD_DATA<= C ;

WHEN "10000011" => LCD_DATA<= SPACE ;

WHEN "10000100" => LCD_DATA<= V ;

WHEN "10000101" => LCD_DATA<= O ;

WHEN "10000110" => LCD_DATA<= L ;

WHEN "10000111" => LCD_DATA<= T ;

WHEN "10001000" => LCD_DATA<= A ;

Page 56: HDL Lab Manual

HDL LAB (06ECL48)

56 Department of Electronics & Communication, K.I.T, Tiptur

WHEN "10001001" => LCD_DATA<= G ;

WHEN "10001010" => LCD_DATA<= E ;

WHEN "10001011" => LCD_DATA<= SPACE ;

WHEN "10001100" => LCD_DATA<= EQUAL ;

WHEN "10001101" => LCD_DATA<= DATA1 ;

WHEN "10001110" => LCD_DATA<= DOT ;

WHEN "10001111" => LCD_DATA<= DATA2;

WHEN "11000000" => LCD_DATA<= SPACE ;

WHEN "11000001" => LCD_DATA<= SPACE ;

WHEN "11000010" => LCD_DATA<= SPACE;

WHEN "11000011" => LCD_DATA<= SPACE ;

WHEN "11000100" => LCD_DATA<= SPACE ;

WHEN "11000101" => LCD_DATA<= SPACE ;

WHEN "11000110" => LCD_DATA<= SPACE ;

WHEN "11000111" => LCD_DATA<= SPACE ;

WHEN "11001000" => LCD_DATA<= SPACE;

WHEN "11001001" => LCD_DATA<= SPACE ;

WHEN "11001010" => LCD_DATA<= SPACE ;

WHEN "11001011" => LCD_DATA<= SPACE ;

WHEN "11001100" => LCD_DATA<= SPACE ;

WHEN "11001101" => LCD_DATA<= SPACE ;

WHEN "11001110" => LCD_DATA<= SPACE ;

WHEN "11001111" => LCD_DATA<= SPACE;

WHEN OTHERS => NULL;

END CASE ;

LCD_SELECT<='1';

IF COUNT=SMALL_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

END CASE;

END IF;

END PROCESS;

END ADC_BEH;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "RESET" LOC = "P40" ;

NET "CLK" LOC = "P18" ;

NET "CS" LOC = "P6" ;

NET "INTR" LOC = "P12" ;

NET "ADC_OUT<0>" LOC = "P13" ;

NET "ADC_OUT<1>" LOC = "P43" ;

NET "ADC_OUT<2>" LOC = "P44" ;

NET "ADC_OUT<3>" LOC = "P46" ;

NET "ADC_OUT<4>" LOC = "P47" ;

NET "ADC_OUT<5>" LOC = "P49" ;

NET "ADC_OUT<6>" LOC = "P59" ;

NET "ADC_OUT<7>" LOC = "P62" ;

NET "WR" LOC = "P11";

NET "RD" LOC = "P10";

NET "LCD_RW" LOC = "P20";

NET "LCD_SELECT" LOC = "P4";

NET "LCD_ENABLE" LOC = "P19" ;

NET "LCD_DATA<0>" LOC = "P21" ;

Page 57: HDL Lab Manual

HDL LAB (06ECL48)

57 Department of Electronics & Communication, K.I.T, Tiptur

NET "LCD_DATA<1>" LOC = "P23" ;

NET "LCD_DATA<2>" LOC = "P22" ;

NET "LCD_DATA<3>" LOC = "P26" ;

NET "LCD_DATA<4>" LOC = "P27" ;

NET "LCD_DATA<5>" LOC = "P30" ;

NET "LCD_DATA<6>" LOC = "P29" ;

NET "LCD_DATA<7>" LOC = "P31" ;

===============================================================

5b.WRITE A VHDL CODE TO ACCEPT 8 CHANNEL ANALOG SIGNAL, TEMPERATURE

SENSORS AND DISPLAY THE DATA ON LCD PANEL OR SEVEN SEGMENT DISPLAY.

AIM: TO ACCEPT TEMPERATURE SENSORS, AND DISPLAY THE DATA ON LCD PANEL DISPLAY.

PROCEDURE:

1. Make the connection between FRC of the FPGA board to the LCD display connector of the VTU card1.

2. Make the connection between FRC10 of the FPGA board to the ADC connector of the VTU card1.

3. Make the connection between FRC6 of the fpga board to the dip switch connector of the VTU card1.

4. Short the jumper j1 to the tc to sense the temperature.

5. Connect the downloading cable and power supply to the FPGA board.

6. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

7. Make the reset switch on (active low).

8. Press the hex keys and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE WORK.LCD_GRAP.ALL;

LIBRARY UNISIM;

USE UNISIM.VCOMPONENTS.ALL;

Page 58: HDL Lab Manual

HDL LAB (06ECL48)

58 Department of Electronics & Communication, K.I.T, Tiptur

ENTITY TEMP_LCD IS

PORT ( CLK: IN STD_LOGIC; -- 4 MHZ CLOCK

RESET: IN STD_LOGIC; -- MASTER RESET PIN

INTR: IN STD_LOGIC;

ADC_OUT: IN STD_LOGIC_VECTOR(7 DOWNTO 0);

CS,RD,WR:OUT STD_LOGIC;

LCD_RW : OUT STD_LOGIC;

LCD_SELECT : OUT STD_LOGIC;

LCD_ENABLE : OUT STD_LOGIC;

LCD_DATA: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); -- GIVES REGISTERED DATA OUTPUT

END TEMP_LCD;

ARCHITECTURE TEMP_BEH OF TEMP_LCD IS

TYPE STATE_TYPE IS (INITIAL,DISPLAY,CLEAR,LOCATION,PUTCHAR);

SIGNAL STATE,NEXT_STATE: STATE_TYPE;

-- CLEAR SCREEN.

CONSTANT CLR: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001";

-- DISPLAY ON, WITHOUT CURSOR.

CONSTANT DON: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001100";

-- FUNCTION SET FOR 8-BIT DATA TRANSFER AND 2-LINE DISPLAY

CONSTANT SET: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111000";

--FREQUENCY DIVIDER

SIGNAL COUNTER : STD_LOGIC_VECTOR(18 DOWNTO 0);

SIGNAL CLK_DIV :STD_LOGIC;

--SIGNAL C: STD_LOGIC_VECTOR(7 DOWNTO 0);

CONSTANT BIG_DELAY: INTEGER :=16;

CONSTANT SMALL_DELAY: INTEGER :=2;

CONSTANT REG_SETUP: INTEGER :=1;

SIGNAL DIGITAL_DATA1,DATA1,DATA2: STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL DIGITAL_DATA : INTEGER RANGE 0 TO 255;

SIGNAL NTR :STD_LOGIC;

BEGIN

IBUF_INST : IBUF

-- EDIT THE FOLLOWING GENERIC TO SPECIFY THE I/O STANDARD FOR THIS PORT.

GENERIC MAP (

IOSTANDARD => "LVCMOS25")

PORT MAP (

O => NTR, -- BUFFER OUTPUT

I => INTR -- BUFFER INPUT (CONNECT DIRECTLY TO TOP-LEVEL PORT));

PROCESS(CLK)

BEGIN

IF CLK='1' AND CLK'EVENT THEN

COUNTER<=COUNTER+'1';

END IF;

END PROCESS;

CLK_DIV<=COUNTER(7);

CS <='0';

WR <=NTR;

DIGITAL_DATA1 <= ADC_OUT ;

RD <='0';

DIGITAL_DATA<=CONV_INTEGER(DIGITAL_DATA1) ;

PROCESS(DIGITAL_DATA)

BEGIN

CASE (DIGITAL_DATA) IS

WHEN 0 TO 60 => DATA1 <= ZERO ; DATA2 <= NINE ;

WHEN 61 TO 65 => DATA1 <= ONE ; DATA2 <= ZERO ;

WHEN 66 TO 70 => DATA1 <= ONE ; DATA2 <= ONE ;

Page 59: HDL Lab Manual

HDL LAB (06ECL48)

59 Department of Electronics & Communication, K.I.T, Tiptur

WHEN 71 TO 75 => DATA1 <= ONE ; DATA2 <= TWO ;

WHEN 76 TO 80 => DATA1 <= ONE ; DATA2 <= THREE ;

WHEN 81 TO 85 => DATA1 <= ONE ; DATA2 <= FOUR ;

WHEN 86 TO 90 => DATA1 <= ONE ; DATA2 <= FIVE ;

WHEN 91 TO 95 => DATA1 <= ONE; DATA2 <= SIX ;

WHEN 96 TO 100 => DATA1 <= ONE ; DATA2 <= SEVEN ;

WHEN 101 TO 105 => DATA1 <= ONE ; DATA2 <= EIGHT ;

WHEN 106 TO 110 => DATA1 <= ONE ; DATA2 <= NINE ;

WHEN 111 TO 115 => DATA1 <= TWO ; DATA2 <= ZERO ;

WHEN 116 TO 120 => DATA1 <= TWO ; DATA2 <= ONE ;

WHEN 121 TO 125 => DATA1 <= TWO ; DATA2 <= TWO ;

WHEN 126 TO 130 => DATA1 <= TWO ; DATA2 <= THREE ;

WHEN 131 TO 135 => DATA1 <= TWO ; DATA2 <= FOUR ;

WHEN 136 TO 140 => DATA1 <= TWO ; DATA2 <= FIVE ;

WHEN 141 TO 145 => DATA1 <= TWO ; DATA2 <= SIX ;

WHEN 146 TO 150 => DATA1 <= TWO ; DATA2 <= SEVEN ;

WHEN 151 TO 155 => DATA1 <= TWO ; DATA2 <= EIGHT ;

WHEN 156 TO 160 => DATA1 <= TWO ; DATA2 <= NINE ;

WHEN 161 TO 165 => DATA1 <= THREE ; DATA2 <= ZERO ;

WHEN 166 TO 170 => DATA1 <= THREE ; DATA2 <= TWO ;

WHEN 171 TO 175 => DATA1 <= THREE ; DATA2 <= THREE ;

WHEN 176 TO 180 => DATA1 <= THREE ; DATA2 <= FOUR ;

WHEN 181 TO 185 => DATA1 <= THREE ; DATA2 <= FIVE ;

WHEN 186 TO 190 => DATA1 <= THREE ; DATA2 <= SIX ;

WHEN 191 TO 195 => DATA1 <= THREE ; DATA2 <= SEVEN ;

WHEN 196 TO 200 => DATA1 <= THREE ; DATA2 <= EIGHT ;

WHEN 201 TO 205 => DATA1 <= THREE ; DATA2 <= NINE ;

WHEN 206 TO 210 => DATA1 <= FOUR ; DATA2 <= ZERO ;

WHEN 211 TO 214 => DATA1 <= FOUR ; DATA2 <= ONE ;

WHEN 215 TO 219 => DATA1 <= FOUR ; DATA2 <= TWO ;

WHEN 220 TO 224 => DATA1 <= FOUR ; DATA2 <= THREE ;

WHEN 225 TO 229 => DATA1 <= FOUR ; DATA2 <= FOUR ;

WHEN 230 TO 234 => DATA1 <= FOUR ; DATA2 <= FIVE;

WHEN 235 TO 239 => DATA1 <= FOUR ; DATA2 <= SIX ;

WHEN 240 TO 244 => DATA1 <= FOUR ; DATA2 <= SEVEN ;

WHEN 245 TO 249 => DATA1 <= FOUR ; DATA2 <= EIGHT;

WHEN 250 TO 255 => DATA1 <= FOUR; DATA2 <= NINE ;

WHEN OTHERS => DATA1 <= FIVE ; DATA2 <= ZERO ;

END CASE;

END PROCESS;

LCD_RW<='0';

PROCESS (CLK_DIV,RESET)

VARIABLE COUNT: INTEGER RANGE 0 TO BIG_DELAY;

VARIABLE C1 : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF RESET = '1' THEN

STATE<=INITIAL;

COUNT:=0;

LCD_ENABLE<='0';

LCD_SELECT<='0';

C1 := "01111111";

ELSIF CLK_DIV'EVENT AND CLK_DIV = '1' THEN

CASE STATE IS

WHEN INITIAL => -- TO SET THE FUNCTION

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

Page 60: HDL Lab Manual

HDL LAB (06ECL48)

60 Department of Electronics & Communication, K.I.T, Tiptur

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=SET;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=DISPLAY;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN DISPLAY => -- TO SET DISPLAY ON

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=DON;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=CLEAR;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN CLEAR => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

LCD_DATA<=CLR;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN LOCATION => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

IF COUNT=0 THEN

IF C1="10001111" THEN

C1:="10000000";

ELSE

C1:=C1+'1';

END IF;

END IF;

LCD_DATA <= C1 ;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=PUTCHAR;

Page 61: HDL Lab Manual

HDL LAB (06ECL48)

61 Department of Electronics & Communication, K.I.T, Tiptur

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

WHEN PUTCHAR=> -- DISPLAY THE CHARACTER ON THE LCD

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE

LCD_ENABLE<='0';

END IF;

CASE C1 IS

WHEN "10000000" => LCD_DATA<= T ;

WHEN "10000001" => LCD_DATA<= E ;

WHEN "10000010" => LCD_DATA<= M ;

WHEN "10000011" => LCD_DATA<= P ;

WHEN "10000100" => LCD_DATA<= E ;

WHEN "10000101" => LCD_DATA<= R ;

WHEN "10000110" => LCD_DATA<= A ;

WHEN "10000111" => LCD_DATA<= T ;

WHEN "10001000" => LCD_DATA<= U ;

WHEN "10001001" => LCD_DATA<= R ;

WHEN "10001010" => LCD_DATA<= E ;

WHEN "10001011" => LCD_DATA<= SPACE ;

WHEN "10001100" => LCD_DATA<= EQUAL ;

WHEN "10001101" => LCD_DATA<= DATA1 ;

WHEN "10001110" => LCD_DATA<= DATA2 ;

WHEN "10001111" => LCD_DATA<= C;

WHEN "11000000" => LCD_DATA<= SPACE ;

WHEN "11000001" => LCD_DATA<= SPACE ;

WHEN "11000010" => LCD_DATA<= SPACE;

WHEN "11000011" => LCD_DATA<= SPACE ;

WHEN "11000100" => LCD_DATA<= SPACE ;

WHEN "11000101" => LCD_DATA<= SPACE ;

WHEN "11000110" => LCD_DATA<= SPACE ;

WHEN "11000111" => LCD_DATA<= SPACE ;

WHEN "11001000" => LCD_DATA<= SPACE;

WHEN "11001001" => LCD_DATA<= SPACE ;

WHEN "11001010" => LCD_DATA<= SPACE ;

WHEN "11001011" => LCD_DATA<= SPACE ;

WHEN "11001100" => LCD_DATA<= SPACE ;

WHEN "11001101" => LCD_DATA<= SPACE ;

WHEN "11001110" => LCD_DATA<= SPACE ;

WHEN "11001111" => LCD_DATA<= SPACE;

WHEN OTHERS => NULL;

END CASE;

LCD_SELECT<='1';

IF COUNT=SMALL_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE

COUNT:=COUNT+1;

END IF;

END CASE;

END IF;

END PROCESS;

END TEMP_BEH;

Page 62: HDL Lab Manual

HDL LAB (06ECL48)

62 Department of Electronics & Communication, K.I.T, Tiptur

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "RESET" LOC = "P40" ;

NET "CLK" LOC = "P18" ;

NET "CS" LOC = "P6" ;

NET "INTR" LOC = "P12" ;

NET "ADC_OUT<0>" LOC = "P13" ;

NET "ADC_OUT<1>" LOC = "P43" ;

NET "ADC_OUT<2>" LOC = "P44" ;

NET "ADC_OUT<3>" LOC = "P46" ;

NET "ADC_OUT<4>" LOC = "P47" ;

NET "ADC_OUT<5>" LOC = "P49" ;

NET "ADC_OUT<6>" LOC = "P59" ;

NET "ADC_OUT<7>" LOC = "P62" ;

NET "WR" LOC = "P11";

NET "RD" LOC = "P10";

NET "LCD_RW" LOC = "P20";

NET "LCD_SELECT" LOC = "P4";

NET "LCD_ENABLE" LOC = "P19" ;

NET "LCD_DATA<0>" LOC = "P21" ;

NET "LCD_DATA<1>" LOC = "P23" ;

NET "LCD_DATA<2>" LOC = "P22" ;

NET "LCD_DATA<3>" LOC = "P26" ;

NET "LCD_DATA<4>" LOC = "P27" ;

NET "LCD_DATA<5>" LOC = "P30" ;

NET "LCD_DATA<6>" LOC = "P29" ;

NET "LCD_DATA<7>" LOC = "P31" ;

===============================================================

6. WRITE A VHDL CODE TO SIMULATE ELEVATOR OPERATIONS.

AIM: TO OPERATE ELEVATOR AND OBSERVE THE SIMULATION RESULTS ON LCD.

PROCEDURE:

1. Make the connection between FRC5 of the FPGA board to the LCD display connector of the VTU card1.

2. Make the connection between FRC1 of the FPGA board to the keyboard connector of the VTUcard1.

3. make the connection between FRC6 of the FPGA board to the dip switch connector of the VTU card1.

4. Connect the downloading cable and power supply to the FPGA board.

5. Then open the xilinx impact software (refer ISE flow) select the slave serial mode and select the respective

bit file and click program.

6. Make the reset switch on (active low).

7. Press the hex keys and analyze the data.

VHDL CODE

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

USE WORK.LCD_GRAP.ALL;

ENTITY ELEVATOR IS

GENERIC(BITS : INTEGER := 8 ); -- NUMBER OF BITS USED FOR DUTY CYCLE.

-- ALSO DETERMINES PWM PERIOD.

PORT ( CLK: IN STD_LOGIC; -- 4 MHZ CLOCK

RESET,EN: IN STD_LOGIC; -- MASTER RESET PIN

Page 63: HDL Lab Manual

HDL LAB (06ECL48)

63 Department of Electronics & Communication, K.I.T, Tiptur

LCD_RW : OUT STD_LOGIC;

PWM : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);

LCD_SELECT : OUT STD_LOGIC;

LCD_ENABLE : OUT STD_LOGIC;

ROW: IN STD_LOGIC_VECTOR(0 TO 3); -- THIS ARE THE ROW LINES

LCD_DATA: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -- GIVES REGISTERED DATA OUTPUT

COL: INOUT STD_LOGIC_VECTOR(0 TO 3));

END ELEVATOR;

ARCHITECTURE RTL OF ELEVATOR IS

SIGNAL COUNTER : STD_LOGIC_VECTOR(BITS - 1 DOWNTO 0):="00000000";

TYPE KEYPAD_STATE_TYPE IS (WAIT_R_0, C3, C2, C1, C0, FOUND, SAMPLE, WAIT_R_1);

-- STATE NAMES

TYPE STATE_TYPE IS (INITIAL,DISPLAY,CLEAR,LOCATION,PUTCHAR);

SIGNAL STATE,NEXT_STATE: STATE_TYPE;

-- CLEAR SCREEN.

CONSTANT CLR: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001";

-- DISPLAY ON, WITHOUT CURSOR.

CONSTANT DON: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001100";

-- FUNCTION SET FOR 8-BIT DATA TRANSFER AND 2-LINE DISPLAY

CONSTANT SET: STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111000";

--FREQUENCY DIVIDER

CONSTANT BIG_DELAY: INTEGER :=16;

CONSTANT SMALL_DELAY: INTEGER :=2;

CONSTANT REG_SETUP: INTEGER :=1;

SIGNAL CS, NS: KEYPAD_STATE_TYPE; -- SIGNALS FOR CURRENT AND NEXT STATES

SIGNAL DUTY_CYCLE,DUTY_CYCLE1 : STD_LOGIC_VECTOR(BITS - 1 DOWNTO 0);

SIGNAL DIV_REG: STD_LOGIC_VECTOR (22 DOWNTO 0); -- CLOCK DIVIDE REGISTER

SIGNAL DCLK,DDCLK: STD_LOGIC; -- THIS HAS THE DIVIDED CLOCK.

SIGNAL COL_REG_VALUE: STD_LOGIC_VECTOR (0 TO 3);

SIGNAL R1,CLK_D,START,STOP: STD_LOGIC; -- ROW DETECTION SIGNAL

SIGNAL KEY_VALUE1,FLOOR,KEY_VALUE: INTEGER RANGE 0 TO 15;

SIGNAL DATA,DATA1,FLOOR_NUM: STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL TEMP1,TEMP2,TEMP3,TEMP4: STD_LOGIC_VECTOR (7 DOWNTO 0);

SIGNAL TEMP5,TEMP6,TEMP7,TEMP8: STD_LOGIC_VECTOR (7 DOWNTO 0);

BEGIN

--CLK_OUT <= DCLK;

R1 <= ROW(3) OR ROW(2) OR ROW(1) OR ROW(0);

---------------------------- BEGINING OF FSM1 (KEYPAD SCANNER) -------------------------------

SYNC_PROC: PROCESS (DCLK, RESET, KEY_VALUE) -- THIS IS THE SYNCHRONOUS PART

BEGIN

IF (RESET = '0') THEN -- YOU MUST HAVE A RESET FOR FSM TO SYNTHESIZE PROPERLY

CS <= WAIT_R_0;

ELSIF (DCLK'EVENT AND DCLK = '1') THEN

CS <= NS;

END IF; END PROCESS;

COMB_PROC: PROCESS (CS, R1, COL_REG_VALUE) -- THIS IS THE COMBINATIONAL PART

BEGIN

CASE CS IS

WHEN WAIT_R_0 => -- WAITS TILL A BUTTON IS PRESSED

COL <= "1111"; -- KEEP ALL COLUMNS ACTIVATED

IF R1 = '1' THEN -- A BUTTON WAS PRESSED. BUT WHICH ONE?

NS <= C3; -- LET'S FIND OUT

ELSE

NS <= WAIT_R_0;

END IF;

---------------------------------------------------------------------------------------------------

Page 64: HDL Lab Manual

HDL LAB (06ECL48)

64 Department of Electronics & Communication, K.I.T, Tiptur

WHEN C3 => --

COL <= "0001"; -- ACTIVATE COLUMN 3

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 3

NS <= C2; -- SO CHECK IF IT WAS IN COLUMN 2

ELSE NS <= FOUND; -- BUTTON WAS IN COLUMN 3

END IF;

---------------------------------------------------------------------------------------------------

WHEN C2 => --

COL <= "0010"; -- ACTIVATE COLUMN 2

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 2

NS <= C1; -- SO CHECK IF IT WAS IN COLUMN 1

ELSE

NS <= FOUND; -- BUTTON WAS IN COLUMN 2

END IF;

---------------------------------------------------------------------------------------------------

WHEN C1 => --

COL <= "0100"; -- ACTIVATE COLUMN 1

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 1

NS <= C0; -- SO CHECK IF IT WAS IN COLUMN 0

ELSE

NS <= FOUND; -- BUTTON WAS IN COLUMN 1

END IF;

---------------------------------------------------------------------------------------------------

WHEN C0 => --

COL <= "1000"; -- ACTIVATE COLUMN 0

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS NOT IN COLUMN 0 ??

NS <= WAIT_R_0; -- SO THE BUTTON MUST HAVE BEEN DEPRESSED FAST

ELSE

NS <= FOUND; -- BUTTON WAS IN COLUMN 3

END IF;

---------------------------------------------------------------------------------------------------

WHEN FOUND => --

COL <= COL_REG_VALUE;

IF R1 = '0' THEN -- THIS MEANS BUTTON IS DEPRESSED

NS <= WAIT_R_0; -- SO GO BACK TO INITIAL STATE

ELSE

NS <= SAMPLE; -- OTHERWISE WRITE THE KEY VALUE TO DATA REGISTER

END IF;

---------------------------------------------------------------------------------------------------

WHEN SAMPLE => -- THIS STATE WILL GENERATE A SIGNAL WITH ONE CLOCK PERIOD FOR

SAMPLING

COL <= COL_REG_VALUE;

NS <= WAIT_R_1; -- OTHERWISE WAIT TILL BUTTON IS PRESSED

---------------------------------------------------------------------------------------------------

WHEN WAIT_R_1 => --

COL <= COL_REG_VALUE;

IF R1 = '0' THEN -- THIS MEANS BUTTON WAS DEPRESSED

NS <= WAIT_R_0; -- SO GO BACK TO INITIAL STATE

ELSE

NS <= WAIT_R_1; -- OTHERWISE WAIT TILL BUTTON IS PRESSED

END IF;

---------------------------------------------------------------------------------------------------

END CASE;

END PROCESS;

---------------------------------------------------------------------------------------------------

WRITE_DATA: PROCESS (DCLK, CS, KEY_VALUE) -- WRITE VALID DATA TO REGISTER

Page 65: HDL Lab Manual

HDL LAB (06ECL48)

65 Department of Electronics & Communication, K.I.T, Tiptur

BEGIN

IF DCLK'EVENT AND DCLK = '0' THEN -- ON THE FALLING EDGE

IF CS = FOUND THEN

KEY_VALUE <= KEY_VALUE1;

END IF;

END IF;

END PROCESS; -- WRITE_DATA

---------------------------------------------------------------------------------------------------

COL_REG: PROCESS (DCLK, CS, COL) -- THIS IS THE COLUMN VALUE REGISTER

BEGIN

IF (DCLK'EVENT AND DCLK = '0') THEN -- REGISTER THE COL VALUE ON THE FALLING EDGE

IF (CS = C3 OR CS = C2 OR CS = C1 OR CS = C0) THEN -- PROVIDED WE'RE IN STATES C3 THRU C0

ONLY

COL_REG_VALUE <= COL; -- OTHERWISE THE COLUMN VALUE IS NOT VALID

END IF;

END IF;

END PROCESS; -- COL_REG

---------------------------------------------------------------------------------------------------

DECODER: PROCESS(ROW, COL_REG_VALUE) -- DECODES BINARY VALUE OF PRESSED KEY

FROM ROW AND

COLUMN

VARIABLE CODE: STD_LOGIC_VECTOR (0 TO 7);

BEGIN

CODE := (ROW & COL_REG_VALUE);

CASE CODE IS

-- COL

-- ROW 0 0123

WHEN "00010001" => KEY_VALUE1 <= 0;

WHEN "00010010" => KEY_VALUE1 <= 1;

WHEN "00010100" => KEY_VALUE1 <= 2;

WHEN "00011000" => KEY_VALUE1 <= 3;

-- ROW 1

WHEN "00100001" => KEY_VALUE1 <= 4;

WHEN "00100010" => KEY_VALUE1 <= 5;

WHEN "00100100" => KEY_VALUE1 <= 6;

WHEN "00101000" => KEY_VALUE1 <= 7;

-- ROW 2

WHEN "01000001" => KEY_VALUE1 <= 8;

WHEN "01000010" => KEY_VALUE1 <= 9;

WHEN "01000100" => KEY_VALUE1 <= 10;

WHEN "01001000" => KEY_VALUE1 <= 11;

-- ROW 3

WHEN "10000001" => KEY_VALUE1 <= 12;

WHEN "10000010" => KEY_VALUE1 <= 13;

WHEN "10000100" => KEY_VALUE1 <= 14;

WHEN "10001000" => KEY_VALUE1 <= 15;

WHEN OTHERS => KEY_VALUE1 <= 0;

END CASE;

END PROCESS; -- DECODER

---------------------------- END OF FSM1 (KEYPAD SCANNER) ---------------------------------------

-- SELECT THE APPROPRIATE LINES FOR SETTING FREQUENCY

CLK_DIV: PROCESS (CLK, DIV_REG) -- CLOCK DIVIDER

BEGIN

IF (CLK'EVENT AND CLK='1') THEN

DIV_REG <= DIV_REG + 1;

END IF;

Page 66: HDL Lab Manual

HDL LAB (06ECL48)

66 Department of Electronics & Communication, K.I.T, Tiptur

END PROCESS;

DCLK <= DIV_REG(8);

DDCLK<=DIV_REG(10);

CLK_D<=DIV_REG(22);

---------------------------- END OF CLOCK DIVIDER -------------------------------------------------

LCD_RW<='0';

PROCESS (DDCLK,RESET)

VARIABLE COUNT: INTEGER RANGE 0 TO BIG_DELAY;

VARIABLE C1 : STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF RESET = '0' THEN

STATE<=INITIAL;

COUNT:=0;

LCD_ENABLE<='0';

LCD_SELECT<='0';

C1 := "01111111";

ELSIF DDCLK'EVENT AND DDCLK = '1' THEN

CASE STATE IS

WHEN INITIAL => -- TO SET THE FUNCTION

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE LCD_ENABLE<='0';

END IF;

LCD_DATA<=SET;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=DISPLAY;

COUNT:=0;

ELSE COUNT:=COUNT+1;

END IF;

WHEN DISPLAY => -- TO SET DISPLAY ON

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE LCD_ENABLE<='0';

END IF;

LCD_DATA<=DON;

LCD_SELECT<='0';

IF COUNT=SMALL_DELAY THEN

STATE<=CLEAR;

COUNT:=0;

ELSE COUNT:=COUNT+1;

END IF;

WHEN CLEAR => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE LCD_ENABLE<='0';

END IF;

LCD_DATA<=CLR;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE COUNT:=COUNT+1;

END IF;

WHEN LOCATION => -- CLEAR THE SCREEN

IF COUNT=REG_SETUP THEN

Page 67: HDL Lab Manual

HDL LAB (06ECL48)

67 Department of Electronics & Communication, K.I.T, Tiptur

LCD_ENABLE<='1';

ELSE LCD_ENABLE<='0';

END IF;

IF COUNT=0 THEN

IF C1="10001111" THEN

C1:="11000000";

ELSIF C1="11001111" THEN

C1:="10000000";

ELSE C1:=C1+'1';

END IF;

END IF;

LCD_DATA <= C1;

LCD_SELECT<='0';

IF COUNT=BIG_DELAY THEN

STATE<=PUTCHAR;

COUNT:=0;

ELSE COUNT:=COUNT+1;

END IF;

WHEN PUTCHAR=> -- DISPLAY THE CHARACTER ON THE LCD

IF COUNT=REG_SETUP THEN

LCD_ENABLE<='1';

ELSE LCD_ENABLE<='0';

END IF;

CASE C1 IS

WHEN "10000000" => LCD_DATA<= F ;--SIGLE LINE

WHEN "10000001" => LCD_DATA<= L ;--SIGLE LINE

WHEN "10000010" => LCD_DATA<= O ;--SIGLE LINE

WHEN "10000011" => LCD_DATA<= O ;--SIGLE LINE

WHEN "10000100" => LCD_DATA<= R ;--SIGLE LINE

WHEN "10000101" => LCD_DATA<= SPACE ;--SIGLE LINE

WHEN "10000110" => LCD_DATA<= N ;--SIGLE LINE

WHEN "10000111" => LCD_DATA<= U ;--SIGLE LINE

WHEN "10001000" => LCD_DATA<= M ;

WHEN "10001001" => LCD_DATA<= B ;

WHEN "10001010" => LCD_DATA<= E ;

WHEN "10001011" => LCD_DATA<= R ;

WHEN "10001100" => LCD_DATA<= SPACE ;

WHEN "10001101" => LCD_DATA<= EQUAL ;

WHEN "10001110" => LCD_DATA<= FLOOR_NUM ;

WHEN "10001111" => LCD_DATA<= SPACE;

WHEN "11000000" => LCD_DATA<= S ;--SIGLE LINE

WHEN "11000001" => LCD_DATA<= T ;--SIGLE LINE

WHEN "11000010" => LCD_DATA<= A ;--SIGLE LINE

WHEN "11000011" => LCD_DATA<= T ;--SIGLE LINE

WHEN "11000100" => LCD_DATA<= U ;--SIGLE LINE

WHEN "11000101" => LCD_DATA<= S ;--SIGLE LINE

WHEN "11000110" => LCD_DATA<= SPACE ;--SIGLE LINE

WHEN "11000111" => LCD_DATA<= TEMP1 ;--SIGLE LINE

WHEN "11001000" => LCD_DATA<= TEMP2 ;

WHEN "11001001" => LCD_DATA<= TEMP3 ;

WHEN "11001010" => LCD_DATA<= TEMP4 ;

WHEN "11001011" => LCD_DATA<= SPACE ;

WHEN "11001100" => LCD_DATA<= TEMP5 ;

WHEN "11001101" => LCD_DATA<= TEMP6 ;

WHEN "11001110" => LCD_DATA<= TEMP7 ;

WHEN "11001111" => LCD_DATA<= TEMP8 ;

Page 68: HDL Lab Manual

HDL LAB (06ECL48)

68 Department of Electronics & Communication, K.I.T, Tiptur

WHEN OTHERS => NULL;

END CASE ;

LCD_SELECT<='1';

IF COUNT=SMALL_DELAY THEN

STATE<=LOCATION;

COUNT:=0;

ELSE COUNT:=COUNT+1;

END IF; END CASE; END IF; END PROCESS;

PROCESS(CLK_D,RESET)

VARIABLE COU : STD_LOGIC_VECTOR(1 DOWNTO 0);

VARIABLE START,STOP: STD_LOGIC; -- ROW DETECTION SIGNAL

BEGIN

IF RESET='0' THEN

COU:="00";

TEMP1 <= L ;

TEMP2 <= I ;

TEMP3 <= F ;

TEMP4 <= T ;

TEMP5 <= I ;

TEMP6 <= D ;

TEMP7 <= L ;

TEMP8 <= E ;

FLOOR_NUM <= ZERO ;

ELSIF RISING_EDGE(CLK_D) THEN

CASE KEY_VALUE IS

WHEN 0 => FLOOR_NUM <= ZERO ;

FLOOR <=0;

WHEN 1 => FLOOR_NUM <= ONE ;

FLOOR <=1;

WHEN 2 => FLOOR_NUM <= TWO ;

FLOOR <=2;

WHEN 3 => FLOOR_NUM <= THREE ;

FLOOR <=3;

WHEN 4 =>

TEMP1 <= D ;

TEMP2 <= O ;

TEMP3 <= O ;

TEMP4 <= R ;

TEMP5 <= O ;

TEMP6 <= P ;

TEMP7 <= E ;

TEMP8 <= N ;

WHEN 5 =>

TEMP1 <= D ;

TEMP2 <= O ;

TEMP3 <= O ;

TEMP4 <= R ;

TEMP5 <= C ;

TEMP6 <= L ;

TEMP7 <= O ;

TEMP8 <= S ;

WHEN 6 =>

START:='1';

STOP:='0';

WHEN 7 =>

STOP:='1';

Page 69: HDL Lab Manual

HDL LAB (06ECL48)

69 Department of Electronics & Communication, K.I.T, Tiptur

START:='0';

WHEN OTHERS =>

TEMP1 <= I ;

TEMP2 <= D ;

TEMP3 <= L ;

TEMP4 <= E ;

TEMP5 <= K ;

TEMP6 <= E ;

TEMP7 <= Y ;

TEMP8 <= SPACE ;

END CASE;

IF START='1' THEN

IF COU=FLOOR THEN

START := '0';

COU:=COU;

TEMP7 <= "001100" & COU ;

ELSIF COU<=FLOOR THEN

COU:=COU + '1';

TEMP1 <= U ;

TEMP2 <= P ;

TEMP3 <= SPACE ;

TEMP4 <= SPACE ;

TEMP5 <= SPACE ;

TEMP6 <= "01111110" ;

TEMP7 <= "001100" & COU ;

TEMP8 <= SPACE ;

ELSIF COU>=FLOOR THEN

COU:=COU-'1';

TEMP1 <= D ;

TEMP2 <= O ;

TEMP3 <= W ;

TEMP4 <= N ;

TEMP5 <= SPACE ;

TEMP6 <= "01111111" ;

TEMP7 <= "001100" & COU ;

TEMP8 <= SPACE ;

END IF; END IF; END IF;

END PROCESS;

END RTL;

===============================================================

UCF FILE(USER CONSTRAINT FILE)

NET "CLK" LOC = "P18" ;

NET "RESET" LOC = "P40" ;

NET "COL<0>" LOC = "P83" ;

NET "COL<1>" LOC = "P79" ;

NET "COL<2>" LOC = "P80" ;

NET "COL<3>" LOC = "P77" ;

NET "ROW<0>" LOC = "P78" ;

NET "ROW<1>" LOC = "P76" ;

NET "ROW<2>" LOC = "P75" ;

NET "ROW<3>" LOC = "P74" ;

NET "LCD_ENABLE" LOC = "P19" ;

NET "LCD_RW" LOC = "P20" ;

NET "LCD_SELECT" LOC = "P4" ;

NET "LCD_DATA<0>" LOC = "P21" ;

Page 70: HDL Lab Manual

HDL LAB (06ECL48)

70 Department of Electronics & Communication, K.I.T, Tiptur

NET "LCD_DATA<1>" LOC = "P23" ;

NET "LCD_DATA<2>" LOC = "P22" ;

NET "LCD_DATA<3>" LOC = "P26" ;

NET "LCD_DATA<4>" LOC = "P27" ;

NET "LCD_DATA<5>" LOC = "P30" ;

NET "LCD_DATA<6>" LOC = "P29" ;

NET "LCD_DATA<7>" LOC = "P31" ;

===============================================================

Page 71: HDL Lab Manual

HDL LAB (06ECL48)

71 Department of Electronics & Communication, K.I.T, Tiptur

Page 72: HDL Lab Manual

HDL LAB (06ECL48)

72 Department of Electronics & Communication, K.I.T, Tiptur

Page 73: HDL Lab Manual

HDL LAB (06ECL48)

73 Department of Electronics & Communication, K.I.T, Tiptur

Page 74: HDL Lab Manual

HDL LAB (06ECL48)

74 Department of Electronics & Communication, K.I.T, Tiptur

VIVA QUESTIONS

1) Differences between D-Latch and D flip-flop?

2) What is setup time and hold time?

3) What is racing condition?

4) What do you mean by comparator and write the truth table?

5) What is decoder and write the truth table?

6) What is encoder and write the truth table?

7) What is priority encoder, and what is the difference between encoder and priority

encoder?

8) What is the difference between decoder and encoder?

9) What is multiplexer and write the truth table?

10) Give the applications of mux?

11) What is the difference between decoder and multiplexer?

12) What do you mean by sequential circuits and combinational circuits?

13) Give the comparison between combinational and sequential circuits.

Page 75: HDL Lab Manual

HDL LAB (06ECL48)

75 Department of Electronics & Communication, K.I.T, Tiptur

14) Give the comparison between synchronous and asynchronous circuits.

15) Draw and explain the working of basic bistable element.

16) Draw and explain the working of a) SR latch b) gated SR latch c) Gated D latch.

17) Draw and explain the working of all flip-flops.

18) Explain the working of 4-bit asynchronous counter.

19) What is the difference between synchronous and asynchronous counters?

20) Explain Synchronous and Asynchronous reset.

21) How can you convert a JK flip-flop to a D flip-flop?

22) Define Clock skew , Negative Clock Skew, Positive Clock Skew.

23) Define Metastability.

24) Give the characteristic tables of RS, JK, D and T flip-flops

25) Mention and explain fundamental VHDL units

26) Comparison between VHDL and Verilog

27) Explain compilation, Simulation and synthesis

28) Explain design flow or design process for implementation of hardware

29) Why is it called VHDL code rather than VHDL program

30) Explain all the library packages in VHDL

31) Mention the design units of VHDL

32) Explain VHDL and Verilog codes

33) Explain difference between signal and variable with an example

34) Classify and explain data types in HDL

35) Explain syntax of generic statement

36) Explain structure of data type description

37) Write the syntax of sequential stamens in HDL

38) Explain CASEX and CASEZ statement

39) Explain the highlight of structural description

40) Explain

(a) Binding between entity and architecture in VHDL

(b) Binding between library and module in VHDL

(c) Binding between library and component in VHDL

(d) Binding between two modules in Verilog

41) Explain procedure, task and function in HDL with an Example

42) Difference between task and function?

43) Differences between Functions and Procedures in VHDL?

44) What is delta simulation time?

45) What is sensitivity list?

46) What is the difference between wire and reg data type?

47) What is the difference between = = = and = =?

48) What is the difference between unary and logical operators?

49) Difference between blocking and non-blocking?

50) Explain VHDL file processing

51) Explain highlight of mixed language description

52) How to invoke one language from the other

53) Mention the limitation of mixed language disruption

54) Expand the following: PLA, PAL, CPLD, and FPGA.

55) Mention difference between FPGA and CPLD

Page 76: HDL Lab Manual

HDL LAB (06ECL48)

76 Department of Electronics & Communication, K.I.T, Tiptur

56) What is LUT?

57) What is the significance of FPGAs in modern day electronics?

58) Give True or False.

(a) CPLD consumes less power per gate when compared to FPGA.

(b) CPLD has more complexity than FPGA

(c) FPGA design is slower than corresponding ASIC design.

(d) FPGA can be used to verify the design before making an ASIC.

(e) PALs have programmable OR plane.

(f) FPGA designs are cheaper than corresponding ASIC, irrespective of design

complexity.

59) What are different types of FPGA? What are you currently using and what is its clock

frequency?

60) Can you draw general structure of FPGA?

61) Why cannot initial statement be synthesizable?

62) Explain the Various steps in Synthesis?

63) Give detail about pattern generator and logic analyzer?

64) Expand XST, ISE, IDE, RTL,xc3s400-5tq144