Documente Academic
Documente Profesional
Documente Cultură
USN:
Department of
Electronics & Communication Engineering
Kalpataru Institute Of Technology
Tiptur-572202
KALPATARU VIDYA SAMSTHE®
KALPATARU INSTITUTE OF TECHNOLOGY
TIPTUR
Compiled by,
HDL Lab
B.E., V Semester, Electronics & Communication Engineering/
Telecommunication Engineering
[As per Choice Based Credit System (CBCS) scheme]
Subject Code 15ECL58 IA Marks 20
Number of Lecture 01 Hr Tutorial (Instructions) Exam Marks 80
Hours/Week + 02 Hours Laboratory = 03
Exam Hours 03
CREDITS – 02
Laboratory Experiments
Part–A (Using Xilinx Tool)
1. Write Verilog code to realize all the logic gates
2. Write a Verilog 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, de-multiplexer, comparator.
3. Write a VHDL and Verilog code to describe the functions of a Full Adder using
three modeling styles.
4. Write a Verilog code to model 32 bit ALU using the schematic diagram shown
below
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 example given 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 Verilog code for the following flip-flops, SR, D, JK and T.
6. Design a 4 bit binary, BCD counters (Synchronous reset and Asynchronous
reset) and “any sequence” counters, using Verilog code.
Part – B
INTERFACING (at least four of the following must be covered using
VHDL/Verilog
Additional programs
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
Entries in table are
ST0 ST0 ST3
next state, input A
and output Z
0 1
ST1 ST1 ST0
1 0
ST2 ST2 ST1
0 1
ST3 ST2 ST1
0 0
6) Write a HDL program for the given more FSM state diagram
A=‟1‟
Z<=‟1‟ ST1
A=‟0‟ ST1
A=‟1‟
A=‟1‟
A=‟0‟
Z<=‟1‟
ST1 A=‟0‟
ST1
Z<=‟0‟ A=‟1‟
LAB INSTRUCTIONS
Do’s Don’ts
Be regular to the lab. Do not come late to the lab.
Follow proper Dress Code. Don't interchange any part of one computer
with another.
Maintain Silence. Avoid loose connections and short
circuits.
Know the theory behind the experiment and Do not attempt to open any machines, and do
understand how to carry out an activity not touch the backs of machines when they
thoroughly before coming to the laboratory. are switched on.
Avoid unnecessary talking while doing the Do not personalize the computers, for
experiment. example: installing screen savers, changing
the desktop background, or changing the
video and audio settings.
Keep the LAB as clean as possible. Call the Do not open the system unit casing or
attender, if necessary to clean the LAB. monitor casing particularly when the power
is turned on. Some internal components hold
electric voltages of up to 300 volts, which
can be fatal.
Report any broken plugs or exposed electrical Don‟t do the experiments in the hurry.
wires to your lecturer/laboratory technician
immediately
Handle the FPGA Kit properly and Make FRC Do not spill water or any other liquid on the
connections properly. machines, in order to maintain electrical
safety.
While doing the Interfacing, connect proper Do not remove or carry anything from the
voltages to the interfacing kit. computer laboratory without permission
Keep the table clean. Do not touch, connect or disconnect any plug
or cable without your lecturer/laboratory
technician‟s permission.
Take a signature of the incharge before taking Do not plug in external devices without
the kit/components. scanning them for computer viruses.
After the completion of the experiments switch Don't do anything that can make the LAB
off the power supply and return the apparatus. dirty (like, eating, throwing waste papers
etc).
Arrange the chairs/stools and equipment Try not to touch any of the circuit boards and
properly before leaving the lab. Don't leave the power sockets when a device is connected to
computers of the LAB turned on while leaving them and switched on.
the LAB.
The computers of the LAB are responsibility of
the LAB users. Keep your computer clean and
take a good care of them.
In case of any hardware related problem, ask
LAB in charge for solution
Look away from the screen once in a while to
give your eyes a rest.
Turn off the machine once you are done using
it.
Department of Electronics & Communication Engineering , K.I.T, Tiptur.
HDL LAB (15ECL58) 2018
EXPERIMENT NO. 1
Aim: Simulation and realization of all logic
gates.
a_in not_op
and_op
ALL LOGIC nand_op
GATES or_op
nor_op
b_in xor_op
xnor_op
Block Diagram
Inputs Outputs
not_op
a_in b_in and_op nand_op or_op nor_op xor_op xnor_op
(a_in)
0 0 1 0 1 0 1 0 1
0 1 1 0 1 1 0 1 0
1 0 0 0 1 1 0 1 0
1 1 0 1 0 1 0 0 1
VERILOG CODE
module gates (a_in, b_in, not_op, and_op, nand_op, or_op, nor_op, xor_op, xnor_op);
input a_in;
input b_in;
output not_op;
output and_op;
output nand_op;
output or_op;
output nor_op;
output xor_op;
output xnor_op;
endmodule
Result: The logic gates design has been realized, simulated and implemented using FPGA/CPLD using
HDL codes.
EXPERIMENT NO. 2
Aim: Write HDL codes for the following combinational circuits. ENABLE
2. a) 2 to 4 Decoder.
D_OUT (0)
Sel (0)
2-4 D_OUT (1)
DECODER
D_OUT (2)
Sel (1)
D_OUT (3)
SEL(0)
SEL(1)
D_OUT(0)
SEL(2)
8:3
SEL(3) Encoder D_OUT(1)
SEL(4) Without
D_OUT(2)
SEL(5) Priority
SEL(6)
SEL(7)
Truth Table for 8 to 3 Encoder without Priority:
INPUTS OUTPUTS
enable sel(7) sel(6) sel(5) sel(4) sel(3) sel(2) sel(1) sel(0) d_out(2) d_out(1) d_out(0)
1 X X X X X X X X Z Z Z
0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 1 1
0 0 0 0 1 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 1 0 1
0 0 1 0 0 0 0 0 0 1 1 0
0 1 0 0 0 0 0 0 0 1 1 1
VERILOG CODE
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,en)
begin
if(en==1)
d_out=3’bzzz;
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’bzzz;
endcase
end
end
endmodule
ENABLE
2. c) 8 to 3 Encoder With Priority
SEL(0)
SEL(1) D_OUT(0)
SEL(2)
8: 3
D_OUT(1)
SEL(3) Encoder
SEL(4) With Priority D_OUT(2)
SEL(5)
SEL(6)
SEL(7)
Truth Table for 8 to 3 Encoder with Priority:
INPUTS OUTPUTS
D_OUT D_OUT D_OUT
ENABLE SEL(7) SEL(6) SEL(5) SEL(4) SEL(3) SEL(2) SEL(1) SEL(0)
(2) (1) (0)
1 X X X X X X X X 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 X 0 0 1
0 0 0 0 0 0 1 X X 0 1 0
0 0 0 0 0 1 X X X 0 1 1
0 0 0 0 1 X X X X 1 0 0
0 0 0 1 X X X X X 1 0 1
0 0 1 X X X X X X 1 1 0
0 1 X X X X X X X 1 1 1
VERILOG CODE
module encoder8_3p(en, sel, d_out);
input en;
input [7:0] sel;
output [2:0] d_out;
reg [2:0] d_out;
always @ (sel,en)
begin
if(en==1)
d_out=3’b000;
else
begin
case(sel)
8’b00000001: d_out=3'b000;
8'b0000001x: d_out =3'b001;
8'b000001xx: d_out =3'b010;
8'b00001xxx: d_out =3'b011;
8'b0001xxxx: d_out =3'b100;
8'b001xxxxx: d_out =3'b101;
8'b01xxxxxx: d_out =3'b110;
8’b1xxxxxxx:d_out =3'b111;
default: d_out=3’bzzz;
endcase
end
end
endmodule
2.d)8 to 1 Multiplexer
VERILOG CODE
module mux8_1(a, sel, mux_out);
input[7:0]a;
input [2:0] sel;
output mux_out;
reg mux_out;
always @ (a , sel )
case (sel)
3'b000: mux_out = a[0];
3'b001: mux_out = a[1];
3'b010: mux_out = a[2];
3'b011: mux_out = a[3];
3'b100: mux_out = a[4];
3'b101: mux_out = a[5];
3'b110: mux_out = a[6];
3'b111: mux_out = a[7];
default: mux_out =0;
endcase
endmodule
D_OUT (0)
D_OUT (1)
D_OUT (2)
1:8
D_OUT (3)
D_IN Demultiplexer D_OUT (4)
D_OUT (5)
D_OUT (6)
D_OUT (7)
VERILOG CODE
module d_mux1_8(sel, d_out,d_in);
input d_in;
input [2:0] sel;
output [7:0]d_out;
reg [7:0]d_out;
always @ (d_in, sel )
case (sel)
3'b000: d_out[0] = d_in;
3'b001: d_out[1] = d_in;
3'b010: d_out [2]= d_in;
3'b011: d_out [3]= d_in;
3'b100: d_out [4]= d_in;
3'b101: d_out [5]= d_in;
3'b110: d_out [6]= d_in;
3'b111: d_out [7]= d_in;
default: d_out =0;
endcase
endmodule
SEL[0] SEL[1]
VERILOG CODE
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]=1’b0;
d_out [2]=1’b0;
d_out [3]=1’b0;
end
2'b01:
begin
d_out [0]=1’b0;
d_out [1]= d_in;
d_out [2]=1’b0;
d_out [3]=1’b0;
end
2'b10:
begin
d_out [0]=1’b0;
d_out [1]=1’b0;
d_out [2]= d_in;
d_out [3]=1’b0;
end
2'b11:
begin
d_out [0]=1’b0;
d_out [1]=1’b0;
d_out [2]=1’b0;
d_out [3]= d_in;
end
default d_out =4'b0000;
endcase
endmodule
G2 G1 G0
B1 B0 B1 B0 B1 B0
B3 B2 00 01 11 10 B3 B2 00 01 11 10 B3 B2 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
VERILOG CODE
module binary_gray(g, b);
input [3:0] b;
output [3:0] g;
reg[3:0] g;
always @ (b)
begin
g[3] = b[3];
VERILOG CODE
module comparator(a, b, alb,agb,aeb);
parameter n = 1;
input [n:0] a;
input [n: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: All combinational design has been realized , simulated and implemented using FPGA/CPLD using
HDL code
EXPERIMENT NO.3
Aim: Write a VHDL and verilog code to describe the functions of a full adder using three modeling styles.
3. a)Half Adder.
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
Block Diagram For VHDL Code
Logic Diagram For VHDL Code Logic Diagram For Verilog Code
VHDL CODE FOR FULL ADDER USING COMPONENT VERILOG CODE FOR FULL ADDER
INSTANTIATION METHOD (STRUCTURAL STYLE) USING TWO HALF
ADDER.(STRUCTURAL STYLE)
LIBRARY IEEE; module FULL_2HA(A, B, C, SUM,
USE IEEE.STD_LOGIC_1164.ALL; CARRY);
USE IEEE.STD_LOGIC_ARITH.ALL; input A;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; input B;
ENTITY FULLADDER IS input C;
PORT ( A,B,C : IN STD_LOGIC; output SUM;
CARRY : OUT STD_LOGIC; output CARRY;
SUM : OUT STD_LOGIC); wire S1,T1,T2;
END FULLADDER; xor
X1(S1,A,B),
ARCHITECTURE BEHAVIORAL OF FULLADDER IS X2(SUM,S1,C);
COMPONENT HALFADDER and
PORT ( A : IN STD_LOGIC; A1(T1,S1,C),
B : IN STD_LOGIC; A2(T2,A,B);
SUM : OUT STD_LOGIC; or
CARRY : OUT STD_LOGIC); O1(CARRY,T1,T2);
END COMPONENT; endmodule
VHDL CODE USING DATA FLOW VERILOG CODE USING DATA FLOW
LIBRARY IEEE; module FULLADDER(A, B, C, SUM,
USE IEEE.STD_LOGIC_1164.ALL; CARRY);
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; input A;
input B;
ENTITY FA IS input C;
PORT (A,B,C:IN BIT; output SUM;
SUM,CARRY:OUT BIT); output CARRY;
END FA;
wire T1, T2, T3;
ARCHITECTURE FA_ARCH OF FA IS
BEGIN assign SUM=A^B^C;
assign T1=A&B;
SUM <= AXOR B XOR C; assign T2=B&C;
assign T3=C&A;
CARRY<=(A AND B )OR (B AND C) OR (C assign CARRY=(T1| T2) | T3;
AND A);
endmodule
END FA_ARCH;
Result: Three modeling styles of full adder have been realized simulated and implemented using
FPGA/CPLD using HDL Codes.
EXPERIMENT NO. 4
Aim: Write a model for 32 bit ALU using the schematic diagram shown below
Result: 32 bit ALU operations have been realized, simulated and implemented on FPGA/CPLD using HDL
codes.
EXPERIMENT NO.5
Aim: Develop the HDL code for the following flip-flop, SR, D, JK, T.
VERILOG CODE
module sr_ff(s ,r ,clk , rst , q , qbar);
input s,r,clk,rst;
output q,qbar;
reg q,qbar;
always@(posedge clk , rst , s , r)
begin
if(rst==1)
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
endmodule
5. b). D Flip-flop
D Q
Truth Table For D Flip-flop: D
RESET D Q QBAR CLK
0 0 1 FLIP-FLOP
1 0 0 1 RST QBAR
1 1 1 0
VERILOG CODE
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
VERILOG CODE
module JK_FF(J, K, CLK, RESET, Q,
QBAR);
input J;
input K;
input CLK;
input RESET;
output Q, QBAR;
reg Q, QBAR;
always @ (posedge CLK , posedge RESET)
begin
if(RESET==1)
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;
QBAR=~QBAR;
end end
endmodule
Waveform for Verilog code:
5. d).T Flip-flop
VERILOG CODE
module T_FF(T, CLK, RESET, Q, QBAR);
input T, CLK,RESET;
output Q, QBAR;
reg Q,QBAR;
if (RESET==1)
begin
Q=0;
QBAR=1;
end
else if (T==0)
begin
Q=Q;
QBAR=QBAR;
end
else
begin
Q=~Q;
QBAR=~QBAR;
end
end
endmodule
Waveform for Verilog code:
Result: Flip-flop operations have been realized, simulated and implemented on FPGA /CPLD using HDL
codes.
EXPERIMENT NO.6
Aim: Design 4 bits Binary, BCD counter, Any sequence (Synchronous reset and Asynchronous reset and
any sequence counters.
Reset Clock Q3 Q2 Q1 Q0
1 1 0 0 0 0
0 1 0 0 0 0
0 1 0 0 0 1
0 1 0 0 1 0
0 1 0 0 1 1
0 1 0 1 0 0
0 1 0 1 0 1
0 1 0 1 1 0
0 1 0 1 1 1
0 1 1 0 0 0
0 1 1 0 0 1
0 1 1 0 1 0
0 1 1 0 1 1
0 1 1 1 0 0
0 1 1 1 0 1
0 1 1 1 1 0
0 1 1 1 1 1
Clock Q3 Q2 Q1 Q0
VERILOG CODE for 4-bit 0 0 0 0 0
synchronous BCD counter. 1 0 0 0 1
module bcd (clk, reset, count); 1 0 0 1 0
1 0 0 1 1
input clk, reset; 1 0 1 0 0
output [3:0] count; 1 0 1 0 1
1 0 1 1 0
reg[3:0]count; 1 0 1 1 1
1 1 0 0 0
1 1 0 0 1
always@(posedge clk , posedge reset) 1 0 0 0 0
begin
if(reset==1 | count==4'b1001)
begin
count=4'b0000;
end
else
count=count+1;
end
endmodule
always@ (posedgeclk)
begin
if(rst)
bin_out =4'b0000;
else if (load)
bin_out= d_in;
else if (updown)
bin_out = bin_out + 4'b0001;
else
bin_out = bin_out - 4'b0001;
end
endmodule
Result: Asynchronous and synchronous counters have been realized, simulated and implemented
on FPGA/CPLD using HDL codes.
INTERFACING PROGRAMS
EXPERIMENT NO.7
Aim: Write HDL code to display messages on the given seven segment display and LCD and accepting Hex
key pad input data.
7.a).LCD 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 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.
6. Make the reset switch on (active low).
7. Press the hex keys and analyze the data.
-- 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";
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;
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);
SIGNALSTATE,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 NEXTSTATES
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
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
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
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: INTEGERRANGE 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
CASESTATE 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
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
===============================================================
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" ;
NET "LCD_DATA<5>" LOC = "P30" ;
NET "LCD_DATA<6>" LOC = "P29" ;
NET "LCD_DATA<7>" LOC = "P31" ;
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 1 of the FPGA board to the keyboard connector of the VTU card.
3. Make the connection between FRC 5 of the FPGA board to the 7segment connector of the VTU card.
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.
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;
PROCESS(CLK)
BEGIN
PROCESS(ROW_READ,COLUMN)
BEGIN
CASE COLUMN IS
END CASE;
END PROCESS;
END BEHAVIORAL;
===============================================================
UCF FILE(USER CONSTRAINT FILE)
NET "CLK" LOC = "P52";
NET "COLUMN <0>" LOC = "P78";
NET "COLUMN <1>" LOC = "P82";
NET "COLUMN <2>" LOC = "P80";
NET "COLUMN <3>" LOC = "P83";
NET "DISP_SELECT<0>" LOC = "P23";
NET "DISP_SELECT <1>" LOC = "P24";
NET "DISP_SELECT <2>" LOC = "P26";
NET "DISP_SELECT <3>" LOC = "P27";
NET "ROW_READ <0>" LOC = "P74";
NET "ROW_READ <1>" LOC = "P76";
NET "ROW_READ <2>" LOC = "P77";
NET "ROW_READ <3>" LOC = "P79";
NET "SEVEN_SEG<0>" LOC = "P18";
NET "SEVEN_SEG <1>" LOC = "P17";
NET "SEVEN_SEG <2>" LOC = "P15";
NET "SEVEN_SEG <3>" LOC = "P14";
NET "SEVEN_SEG <4>" LOC = "P13";
NET "SEVEN_SEG <5>" LOC = "P12";
NET "SEVEN_SEG <6>" LOC = "P1";
===============================================================
EXPERIMENT NO.8
Aim: To control speed and direction of DC motor and Stepper motor.
8.a). 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.
ENTITY DCMOTOR IS
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(DDCLK, RESET)
BEGIN
IF RESET = '0' THEN
COUNTER <= (OTHERS => '0');
PWM<="01";
ELSIF (DDCLK'EVENT AND DDCLK = '1') THEN
COUNTER <= COUNTER + 1;
IF COUNTER >= DUTY_CYCLE THEN
PWM(1) <= '0';
ELSE
PWM(1) <= '1';
END IF; END IF;
END PROCESS;
-- RLY<='1'; --MOTOR DIRECTION CONTROL- CLOCK WISE
RLY<=DIR;--MOTOR DIRECTION CONTROL- COUNTER CLOCK WISE
END DCMOTOR1;
==============================================================
UCF FILE (USER CONSTRAINT FILE)
NET "CLK" LOC = "P52" ;
NET "PWM<0>" LOC = "P141" ;
NET "PWM<1>" LOC = "P4" ;
NET "RESET" LOC = "P76" ;
NET "RLY" LOC = "P2" ;
NET "DIR" LOC = "P74" ;
NET "ROW<0>" LOC = "P69" ;
NET "ROW<1>" LOC = "P63" ;
NET "ROW<2>" LOC = "P59" ;
NET "ROW<3>" LOC = "P57" ;
===============================================================
8.b). 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 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).
6. Press the hex keys and analyze the speed changes.
ENTITY STEPPER IS
PORT ( DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
ROW: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RESET : IN STD_LOGIC;
DIRE: IN STD_LOGIC);
END STEPPER;
PROCESS(CLK)
BEGIN
CASE ROW IS
WHEN ”00” =>CLK_INT <= CLK_DIV(19);
WHEN ”01”=> CLK_INT<= CLK_DIV(18);
WHEN”10”=> CLK_INT<= CLK_DIV(15);
WHEN OTHERS => CLK_INT<= CLK_DIV(13);
END CASE;
END IF;
END PROCESS;
PROCESS(RESET,CLK_INT)
BEGIN
IF RESET='0' THEN
SHIFT_REG <= "1001";
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 = "P52";
NET "DIRE " LOC = "P74";
NET "DOUT<0>" LOC = "P141";
NET "DOUT<1>" LOC = "P2";
NET "DOUT<2>" LOC = "P4";
NET "DOUT<3>" LOC = "P5";
NET "RESET" LOC = "P76";
NET "ROW<0>" LOC = "P77";
NET "ROW<1>" LOC = "P79";
EXPERIMENT NO.9
Aim: To generate different waveforms (Sine, Square, Triangle, Ramp etc.,) 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.
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 ;
PROCESS(CLK)
BEGIN
IF RISING_EDGE(CLK) THEN
TEMP <= TEMP + '1' ;
END IF;
END PROCESS;
PROCESS(TEMP(2))
BEGIN
IF RST='1' THEN
DAC_OUT<= "00000000";
ELSE
I <= I +1;
DAC_OUT<=SINE_LOOKUP(I);
IF I=23 THEN
I<=0;
END IF;
END IF;
END IF;
END PROCESS;
END BEHAVIORAL;
===========================================================================
UCF FILE(USER CONSTRAINT FILE)
NET "CLK" LOC = "P52" ;
NET "DAC_OUT<0>" LOC = "P21" ;
NET "DAC_OUT<1>" LOC = "P18" ;
NET "DAC_OUT<2>" LOC = "P17" ;
NET "DAC_OUT<3>" LOC = "P15" ;
NET "DAC_OUT<4>" LOC = "P14" ;
NET "DAC_OUT<5>" LOC = "P13" ;
NET "DAC_OUT<6>" LOC = "P12" ;
NET "DAC_OUT<7>" LOC = "P1" ;
NET "RST" LOC = "P74" ;
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 = "P52" ;
NET "DAC_OUT<0>" LOC = "P21" ;
NET "DAC_OUT<1>" LOC = "P18" ;
NET "DAC_OUT<2>" LOC = "P17" ;
NET "DAC_OUT<3>" LOC = "P15" ;
NET "DAC_OUT<4>" LOC = "P14" ;
NET "DAC_OUT<5>" LOC = "P13" ;
NET "DAC_OUT<6>" LOC = "P12" ;
NET "DAC_OUT<7>" LOC = "P1" ;
NET "RST" LOC = "P74" ;
===============================================================
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;
================================================
UCF FILE(USER CONSTRAINT FILE)
NET "CLK" LOC = "P52" ;
NET "DAC_OUT<0>" LOC = "P21" ;
NET "DAC_OUT<1>" LOC = "P18" ;
NET "DAC_OUT<2>" LOC = "P17" ;
NET "DAC_OUT<3>" LOC = "P15" ;
NET "DAC_OUT<4>" LOC = "P14" ;
NET "DAC_OUT<5>" LOC = "P13" ;
NET "DAC_OUT<6>" LOC = "P12" ;
NET "DAC_OUT<7>" LOC = "P1" ;
NET "RST" LOC = "P74" ;
================================================
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;
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;
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 = "P52" ;
NET "DAC_OUT<0>" LOC = "P21" ;
NET "DAC_OUT<1>" LOC = "P18" ;
NET "DAC_OUT<2>" LOC = "P17" ;
NET "DAC_OUT<3>" LOC = "P15" ;
NET "DAC_OUT<4>" LOC = "P14" ;
NET "DAC_OUT<5>" LOC = "P13" ;
NET "DAC_OUT<6>" LOC = "P12" ;
NET "DAC_OUT<7>" LOC = "P1" ;
NET "RST" LOC = "P74" ;
===============================================================
EXPERIMENT NO.10
Aim: To accept 8 channel analog signal, and display the data on LCD panel or seven segment 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;
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 ;
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;
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 ;
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 ;
EXPERIMENT NO.11
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
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;
---------------------------------------------------------------------------------------------------
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
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;
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
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 ;
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';
START:='0';
==========================================================
WHEN OTHERS =>
UCF FILE(USER CONSTRAINT FILE)
TEMP1 <= I ;
NET "CLK" LOC = "P18" ;
TEMP2 <= D ;
NET "RESET" LOC = "P40" ;
TEMP3 <= L ;
NET "COL<0>" LOC = "P83" ;
TEMP4 <= E ;
NET "COL<1>" LOC = "P79" ;
TEMP5 <= K ;
NET "COL<2>" LOC = "P80" ;
TEMP6 <= E ;
NET "COL<3>" LOC = "P77" ;
TEMP7 <= Y ;
NET "ROW<0>" LOC = "P78" ;
TEMP8 <= SPACE ;
NET "ROW<1>" LOC = "P76" ;
END CASE;
NET "ROW<2>" LOC = "P75" ;
IF START='1' THEN
NET "ROW<3>" LOC = "P74" ;
IF COU=FLOOR THEN
NET "LCD_ENABLE" LOC = "P19" ;
START := '0';
NET "LCD_RW" LOC = "P20" ;
COU:=COU;
NET "LCD_SELECT" LOC = "P4" ;
TEMP7 <= "001100" & COU ;
NET "LCD_DATA<0>" LOC = "P21" ;
ELSIF COU<=FLOOR THEN
NET "LCD_DATA<1>" LOC = "P23" ;
COU:=COU + '1';
NET "LCD_DATA<2>" LOC = "P22" ;
TEMP1 <= U ;
NET "LCD_DATA<3>" LOC = "P26" ;
TEMP2 <= P ;
NET "LCD_DATA<4>" LOC = "P27" ;
TEMP3 <= SPACE ;
NET "LCD_DATA<5>" LOC = "P30" ;
TEMP4 <= SPACE ;
NET "LCD_DATA<6>" LOC = "P29" ;
TEMP5 <= SPACE ;
NET "LCD_DATA<7>" LOC = "P31" ;
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;
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.
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?