HDL Lab Manual Using VHDL
HDL Lab Manual Using VHDL
HDL
Laboratory Manual
VHDL Lab Manual
CONTENTS
Sl. No Experiment Name Page No.
1. ISE Quick Start Tutorial ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 3
2. Full Adder Data Flow / Behavioral ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 13
3. Full Adder Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 14
4. Multiplexer (8:1) ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 15
5. Demultiplexer (1:8) ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 16
6. Encoder without Priority ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 17
7. Encoder with Priority ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 18
8. Decoder (3:8) ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 19
9. 2 – Bit Comparator ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 20
10. Binary to Gray ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 21
11. Gray to Binary ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 22
12. JK Flip‐Flop ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 23
13. T Flip‐Flop ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 24
14. D Flip‐Flop ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 25
15. Asynchronous Binary Up Counter ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 26
16. Synchronous Binary Up Counter ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 27
17. BCD Up Counter ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 28
18. BCD Down Counter ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 29
19. DC Motor Interface ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 30
20. Stepper Motor Interface ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 31
21. Relay Interface ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 32
22. Seven Segment Display Interface ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 33
23. Multiplexer (8:1) Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 34
24. Binary to Gray Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 35
25. Gray to Binary Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 36
26. Decoder (3:8) Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 37
27. JK Flip‐Flop Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 38
28. T Flip‐Flop Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 39
29. D Flip‐Flop Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 40
30. 1 – Bit Comparator Structural ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 41
31. Pin Details ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ 43
Page 1
VHDL Lab Manual
Page 2
VHDL Lab Manual
ISE Quick Start Tutorial
Getting Started
Starting the ISE Software
For Windows users, start ISE from the Start menu by selecting:
Start _ Programs _ Xilinx ISE 7 _ Project Navigator
The ISE Project Navigator opens. The Project Navigator lets you manage the sources and
processes in your ISE project. All of the tasks in the Quick Start Tutorial are managed from within
Project Navigator.
Stopping and Restarting a Session
At any point during this tutorial you can stop your session and continue at a later time.
To stop the session:
• Save all source files you have opened in other applications.
• Exit the software (ISE and other applications).
The current status of the ISE project is maintained when exiting the software.
To restart your session, start the ISE software again. ISE displays the contents and state of your
project with the last saved changes.
Accessing Help
At any time during the tutorial, you can access online help for additional information about a
variety of topics and procedures in the ISE software as well as related tools.
To open Help you may do either of the following:
• Press F1 to view Help for the specific tool or function that you have selected or highlighted.
• Launch the ISE Help Contents from the Help menu. It contains information about creating
and maintaining your complete design flow in ISE.
Creating a New Project in ISE
In this section, you will create a new ISE project. A project is a collection of all files necessary to
create and to download a design to a selected FPGA or CPLD device.
To create a new project for this tutorial:
1. Select File > New Project. The New Project Wizard appears.
2. First, enter a location (directory path) for the new project.
3. Type tutorial in the Project Name field. When you type tutorial in the Project Name field, a
tutorial subdirectory is created automatically in the directory path you selected.
4. Select HDL from the Top‐Level Module Type list, indicating that the top‐level file in your
project will be HDL, rather than Schematic or EDIF.
5. Click Next to move to the project properties page.
6. Fill in the properties in the table as shown below
Device Family: CoolRunner XPLA3 CPLDs
Device: xcr3128xl
Package: TQ144
Speed Grade: 7
Top‐Level Module Type: HDL
Synthesis Tool: XST (VHDL/Verilog)
Simulator: ModelSim
Generated Simulation Language: VHDL or Verilog, depending on the language you want
to use when running behavioral simulation.
Page 3
VHDL Lab Manual
When the table is complete, your project properties should look like the following:
7. Click Next to proceed to the Create New Source window in the New Project Wizard. At the end of the next section, your new project will be
created.
This simple AND Gate design has two inputs: A and B. This design has one output called C
1. Click New Source in the New Project Wizard to add one new source to your project.
2. Select VHDL Module as the source type in the New Source dialog box.
5. Click Next.
Page 4
VHDL Lab Manual
8. Click Finish in the New Source Information dialog box to complete the new source file template.
ISE creates and displays the new project in the Sources in Project window and adds the andgate.vhd file to the project.
12. Double-click on the andgate.vhd file in the Sources in Project window to open the VHDL file in the ISE Text Editor.
The andgate.vhd file contains:
o Header information.
o Library declaration and use statements.
o Entity declaration for the counter and an empty architecture statement.
13. In the header section, fill in the following fields:
Design Name: andgate.vhd
Project Name: andgate
Target Device: xcr3128xl- TQ144
Description: This is the top level HDL file for an up/down counter.
Dependencies: None
Note: It is good design practice to fill in the header section in all source files.
14. Below the end process statement, enter the following line:
C <= A and B;
15. Save the file by selecting File > Save.
2. Click the “+” next to the Synthesize-XST process to expand the hierarchy.
Page 5
VHDL Lab Manual
4. Look in the Console tab of the Transcript window and read the output and status messages produced by any process that you run.
Caution! You must correct any errors found in your source files. If you continue without valid
syntax, you will not be able to simulate or synthesize your design.
Simulation
1. Double click Launch ModelSim Simulator in the Process View window.
Page 6
VHDL Lab Manual
5. Run the simulation by clicking the Run icon in the Main or Wave window toolbar.
Page 7
VHDL Lab Manual
7. Click the Run -All icon on the Main or Wave window toolbar. The simulation continues running until you execute a break command.
gives you options on what to retain during the restart. Click the Restart button in the Restart dialog.
1. Double-click the Assign Package Pins process found in the User Constraints process group. ISE runs the Synthesis and Translate steps
and automatically creates a User Constraints File (UCF). You will be prompted with the following message:
Page 8
VHDL Lab Manual
2. Click Yes to add the UCF file to your project. The counter.ucf file is added to your project and is visible in the Sources in Project
3. Now the Xilinx Pinout and Area Constraints Editor (PACE) opens.
4. You can see your I/O Pins listed in the Design Object List window. Enter a pin location for each pin in the Loc column as specified below:
A: p90
B: p91
C: p53
5. Click on the Package View tab at the bottom of the window to see the pins you just added. Put your mouse over grid number to verify the
pin assignment.
5. Select File _ Save. You are prompted to select the bus delimiter type based on the synthesis tool you are using. Select XST Default
6. Close PACE.
Page 9
VHDL Lab Manual
Note: Your board must be connected to your PC before proceeding. If the device on your board does not match
the device assigned to the project, you will get errors. Please refer to the iMPACT Help for more information. To
access the help, select Help > Help Topics.
2. Double-click the Configure Device (iMPACT) process. iMPACT opens and the Configure Devices dialog box is displayed.
Page 10
VHDL Lab Manual
3. In the Configure Devices dialog box, verify that Boundary-Scan Mode is selected and click Next.
4. Verify that Automatically connect to cable and identify Boundary-Scan chain is selected and click
Finish.
5. If you get a message saying that there was one device found, click OK to continue.
6. The iMPACT will now show the detected device, right click the device and select New Configuration File.
7. The Assign New Configuration File dialog box appears. Assign a configuration file to each device in the JTAG chain. Select the
8. Right-click on the counter device image, and select Program... to open the Program Options dialog box.
9. Click OK to program the device. ISE programs the device and displays Programming Succeeded if the operation was successful.
Page 11
VHDL Lab Manual
Page 12
VHDL Lab Manual
1. VHDL CODE FOR FULL A
ADDER DATA
A FLOW:
Full Adder
A B Ci
C S Co
0 0 0 0 0
0 0 1 1 0 XPRESSIONS:
EX
0 1 0 1 0
0 1 1 0 1 = A ⊕ B ⊕ Ci
S =
1 0 0 1 0 O = (A ⊕ B)Ci + AB
CO
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
libraary IEEE;
use IEEE.STD_LO OGIC_1164.A ALL;
use IEEE.STD_LO OGIC_ARITH.ALL;
use IEEE.STD_LO OGIC_UNSIGNED.ALL;
entity faa1 is
Port ( a,b,ci : in STTD_LOGIC; s,,co : out STD
D_LOGIC);
end fa1;;
archhitecture Beh havioral of faa1 is
begiin
s<=a xorr b xor ci;
co<=(a aand b)or (b aand ci)or (ci aand a);
end Behavioral;
VHDL CO
ODE FOR FULL ADDER BEEHAVIORAL::
libraary IEEE;
use IEEE.STD_LO OGIC_1164.A ALL;
use IEEE.STD_LO OGIC_ARITH.ALL;
use IEEE.STD_LO OGIC_UNSIGNED.ALL;
entity faa1 is
Port ( a,b,ci : in STTD_LOGIC; s,,co : out STD
D_LOGIC);
end fa1;;
archhitecture Beh havioral of faa1 is
begiin
process((a,b,ci)
begiin
s<=a xorr b xor ci;
co<=(a aand b)or (b aand ci)or (ci aand a);
end process;
end Behavioral;
Page 13
VHDL Lab Manual
2. VHDL CODE FOR FULL ADDER STRUCTURAL:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fa1 is
Port ( a,b,cin : in STD_LOGIC;
s,cout : out STD_LOGIC);
end fa1;
architecture struct of fa1 is
component and21
port(a,b:in std_logic; ‐‐‐components, entity and architecture
c:out std_logic); ‐‐‐ must be declared separately
end component;
component xor21
port(a,b:in std_logic; ‐‐‐components, entity and architecture
c:out std_logic); ‐‐‐ must be declared separately
end component;
component or31
port(a,b:in std_logic; ‐‐‐components, entity and architecture
d:out std_logic); ‐‐‐ must be declared separately
end component;
signal s1,s2,s3:std_logic;
begin
u1:xor21 port map(a,b,s1);
u2:xor21 port map(s1,cin,s);
u3:and21 port map(a,b,s2);
u4:and21 port map(s1,cin,s3);
u6:or31 port map(s2,s3,cout);
end struct;
Page 14
VHDL Lab Manual
3. VHDL CODE FOR MULTIPLEXER (8:1):
INPUTS SELECT LINES O/P
d(7) d(6) d(5) d(4) d(3) d(2) d(1) d(0) s(2) s(1) s(0) f
X X X X X X X 0 0 0 0 0
X X X X X X X 1 0 0 0 1
X X X X X X 0 X 0 0 1 0
X X X X X X 1 X 0 0 1 1
X X X X X 0 X X 0 1 0 0
X X X X X 1 X X 0 1 0 1
X X X X 0 X X X 0 1 1 0
X X X X 1 X X X 0 1 1 1
X X X 0 X X X X 1 0 0 0
X X X 1 X X X X 1 0 0 1
X X 0 X X X X X 1 0 1 0
X X 1 X X X X X 1 0 1 1
X 0 X X X X X X 1 1 0 0
X 1 X X X X X X 1 1 0 1
0 X X X X X X X 1 1 1 0
1 X X X X X X X 1 1 1 1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mux1 is
Port ( d : in STD_LOGIC_VECTOR (7 downto 0);
s : in STD_LOGIC_VECTOR (2 downto 0);
f : out STD_LOGIC);
end mux1;
architecture Behavioral of mux1 is
begin
f<= d(0) when s="000" else
d(1) when s="001" else
d(2) when s="010" else
d(3) when s="011" else
d(4) when s="100" else
d(5) when s="101" else
d(6) when s="110" else
d(7) when s="111";
end Behavioral;
Page 15
VHDL Lab Manual
4. VHDL CODE FOR Demultiplexer (1:8):
SELECT LINES I/P OUTPUT
s(2) s(1) s(0) f d(7) d(6) d(5) d(4) d(3) d(2) d(1) d(0)
0 0 0 0 X X X X X X X 0
0 0 0 1 X X X X X X X 1
0 0 1 0 X X X X X X 0 X
0 0 1 1 X X X X X X 1 X
0 1 0 0 X X X X X 0 X X
0 1 0 1 X X X X X 1 X X
0 1 1 0 X X X X 0 X X X
0 1 1 1 X X X X 1 X X X
1 0 0 0 X X X 0 X X X X
1 0 0 1 X X X 1 X X X X
1 0 1 0 X X 0 X X X X X
1 0 1 1 X X 1 X X X X X
1 1 0 0 X 0 X X X X X X
1 1 0 1 X 1 X X X X X X
1 1 1 0 0 X X X X X X X
1 1 1 1 1 X X X X X X X
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dmux is
port(f:in std_logic;
s:in std_logic_vector(2 downto 0);
y:out std_logic_vector(7 downto 0));
end demux;
architectural behavioral of dmux is
begin
y(0)<=f when s="000"else'0';
y(1)<=f when s="001"else'0';
y(2)<=f when s="010"else'0';
y(3)<=f when s="011"else'0';
y(4)<=f when s="100"else'0';
y(5)<=f when s="101"else'0';
y(6)<=f when s="110"else'0';
y(7)<=f when s="111"else'0';
end behavioral;
Page 16
VHDL Lab Manual
5. VHDL CODE FOR ENCODER WITHOUT PRIORITY (8:3):
SELECT LINES OUTPUT
s(2) s(1) s(0) y(7) y(6) y(5) y(4) y(3) Y(2) y(1) y(0)
0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0
1 1 1 X X X X X X X X
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity enco is
Port ( i : in STD_LOGIC_VECTOR (7 downto 0);
y : out STD_LOGIC_VECTOR (2 downto 0));
end enco;
architecture Behavioral of enco is
begin
with i select
y<="000" when "00000001",
"001" when "00000010",
"010" when "00000100",
"011" when "00001000",
"100" when "00010000",
"101" when "00100000",
"110" when "01000000",
"111" when others;
end Behavioral;
Page 17
VHDL Lab Manual
6. VHDL CODE FOR ENCODER WITH PRIORITY (8:3):
SELECT LINES OUTPUT
s(2) s(1) s(0) y(7) y(6) y(5) y(4) y(3) y(2) y(1) y(0)
0 0 0 0 0 0 0 0 1 1 1
0 0 1 0 0 0 0 0 1 1 0
0 1 0 0 0 0 0 0 1 0 1
0 1 1 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 1 1 0
1 0 1 0‐ 0 0 0 0 0 1 0
1 1 0 0 0 0 0 0 1 0 0
1 1 1 X X X X X X X X
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity enco1 is
Port ( i : in STD_LOGIC_VECTOR (7 downto 0);
y : out STD_LOGIC_VECTOR (2 downto 0));
end enco1;
architecture Behavioral of enco1 is
begin
with i select
y<="000" when "00000111",
"001" when "00000110",
"010" when "00000101",
"011" when "00000100",
"100" when "00000011",
"101" when "00000010",
"110" when "00000001",
"111" when others;
end Behavioral;
Page 18
VHDL Lab Manual
7. VHDL CODE FOR 3:8 DECODER:
SELECT LINES OUTPUT
s(2) s(1) s(0) y(7) y(6) y(5) y(4) y(3) y(2) y(1) y(0)
0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0
X X X 0 0 0 0 0 0 0 0
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dec1 is
Port ( s : in STD_LOGIC_VECTOR (2 downto 0);
y : out STD_LOGIC_VECTOR (7 downto 0));
end dec1;
architecture Behavioral of dec1 is
begin
with sel select
y<="00000001" when "000",
"00000010" when "001",
"00000100" when "010",
"00001000" when "011",
"00010000" when "100",
"00100000" when "101",
"01000000" when "110",
"10000000" when "111",
"00000000" when others;
end Behavioral;
Page 19
VHDL Lab Manual
8. VHDL CODE FOR 2‐bit comparator:
A1 A0 B1 B0 Y1 (A > B) Y2 (A = B) Y3 (A < B)
0 0 0 0 0 1 0
0 0 0 1 0 0 1
0 0 1 0 0 0 1
0 0 1 1 0 0 1
0 1 0 0 1 0 0
0 1 0 1 0 1 0
0 1 1 0 0 0 1
0 1 1 1 0 0 1
1 0 0 0 1 0 0
1 0 0 1 1 0 0
1 0 1 0 0 1 0
1 0 1 1 0 0 1
1 1 0 0 1 0 0
1 1 0 1 1 0 0
1 1 1 0 1 0 0
1 1 1 1 0 1 0
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity comp is
Port ( a,b : in STD_LOGIC_VECTOR (1 downto 0);
y : out STD_LOGIC_VECTOR (2 downto 0));
end comp;
architecture Behavioral of comp is
begin
y<= "100" when a>b else
"001" when a<b else
"010" when a=b;
end Behavioral;
Page 20
VHDL Lab Manual
9. VHDL CODE FOR Binary to gray (USING EXOR GATES):
CIRCUIT DIAGRAM: EXPRESSIONS:
G(0)=B(0) ⊕ B(1)
G(1)=B(1) ⊕ B(2)
G(2)=B(2) ⊕ B(3)
G(3)=B(3)
Inputs Outputs
B (3) B (2) B (1) B (0) G (3) G (2) G (1) G (0)
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
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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Binary_Gray is
port( b: in std_logic_vector(3 downto 0); ‐‐Binary Input
g: out std_logic_vector(3 downto 0)); ‐‐Gray Output
end binary_gray;
architecture behavioral of Binary_gray is
begin
b(3)<= g(3);
b(2)<= g(3) xor g(2);
b(1)<= g(2) xor g(1);
b(0)<= g(1) xor g(0);
end behavioral;
Page 21
VHDL Lab Manual
10. VHDL CODE FOR GRAY TO BINARY:
CIRCUIT DIAGRAM: EXPRESSIONS:
B(0)=G(0) ⊕ G(1) ⊕ G(2) ⊕ G(3)
B(1)=G(1) ⊕ G(2) ⊕ G(3)
B(2)=G(2) ⊕ G(3)
B(1)=G(3)
INPUT OUTPUT
G(3) G(2) G(1) G(0) B (3) B (2) B (1) B (0)
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 0
0 0 1 0 0 0 1 1
0 1 1 0 0 1 0 0
0 1 1 1 0 1 0 1
0 1 0 1 0 1 1 0
0 1 0 0 0 1 1 1
1 1 0 0 1 0 0 0
1 1 0 1 1 0 0 1
1 1 1 1 1 0 1 0
1 1 1 0 1 0 1 1
1 0 1 0 1 1 0 0
1 0 1 1 1 1 0 1
1 0 0 1 1 1 1 0
1 0 0 0 1 1 1 1
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity gb1 is
Port ( g : in STD_LOGIC_VECTOR (3 downto 0);
b : out STD_LOGIC_VECTOR (3 downto 0));
end gb1;
architecture Behavioral of gb1 is
begin
b(3)<= g(3);
b(2)<= g(3) xor g(2);
b(1)<= g(3) xor g(2) xor g(1);
b(0)<= g(3) xor g(2) xor g(1) xor g(0);
end behavioral;
Page 22
VHDL Lab Manual
11. VHDL CODE FOR JK FLIP FLOP WITH ASYNCHRONOUS RESET: (Master Slave JK Flip‐Flop)
Reset J K Clock Qn+1 Qn + 1 Status
1 X X X 0 1 Reset
0 0 0 Qn Qn No Change
0 0 1 0 1 Reset
0 1 0 1 0 Set
0 1 1 Qn Qn Toggle
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity jkff1 is
Port ( j,k,clk,reset : in STD_LOGIC;
Q : inout STD_LOGIC);
end jkff1;
architecture Behavioral of jkff1 is
signal div:std_logic_vector(22 downto 0);
signal clkd:std_logic;
begin
process(clk)
begin
if rising_edge(clk)then
div<= div+1;
end if;
end process;
clkd<=div(22);
process(clkd,reset)
begin
if(reset='1')then
Q<= '0';
elsif(clkd'event and clkd='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 Behavioral;
Page 23
VHDL Lab Manual
12. VHDL CODE FOR T FLIP FLOP:
Clear T Clock Qn+1 Qn+ 1
1 0 0 0 Qn
0 1 Qn Qn
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity tff is
Port ( t,clk,rst : in STD_LOGIC;
q : inout STD_LOGIC);
end tff;
architecture Behavioral of tff is
signal div:std_logic_vector(22 downto 0);
signal clkd:std_logic;
begin
process(clk)
begin
if rising_edge(clk)then
div<= div+1;
end if;
end process;
clkd<=div(20);
process(clkd,rst)
begin
if(rst='1')then
q<='0';
elsif (clkd'event and clkd='1' and t='1') then
q<= not q;
else q<=q;
end if;
end process;
end Behavioral;
r. Page 24
VHDL Lab Manual
13. VHDL CODE FOR D FLIP FLOP:
Clear D Clock Qn+1 Qn+ 1
1 0 0 0 1
0 1 1 0
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dff is
Port ( d,res,clk : in STD_LOGIC;
q : out STD_LOGIC);
end dff;
architecture Behavioral of dff is
begin
process(clk)
begin
if (res ='1')then q<='0';
elsif clk'event and clk='1'
then q<=d;
end if;
end process;
end Behavioral;
Page 25
VHDL Lab Manual
14. ASYNCHRON
NOUS BINAR
RY UP COUNTER:
3‐bitt Asynchronoous up countter
Clo
ock QC QB Q
QA
0
0 0 0 0
0
1
1 0 0 1
1
2
2 0 1 0
0
3
3 0 1 1
1
4
4 1 0 0
0
5
5 1 0 1
1
6
6 1 1 0
0
7
7 1 1 1
1
8
8 0 0 0
0
9
9 0 0 1
1
libraary IEEE;
use IEEE.STD_LO OGIC_1164.A ALL;
use IEEE.STD_LO OGIC_ARITH.ALL;
use IEEE.STD_LO OGIC_UNSIGNED.ALL;
entity assybin1 is
Port ( rs,clk : in STTD_LOGIC;
q :: inout STD__LOGIC_VECTTOR (3 down nto 0));
end asyb bin1;
archhitecture Beh havioral of assybin1 is
signal diiv:std_logic__vector(22 do ownto 0);
signal teemp:STD_LOGIC_VECTOR R (3 downto 0);
signal clkd:std_logic;
begiin
proccess(clk)
begiin
if rising__edge(clk)theen
div<= div+1;
end if;
end process;
clkd<=div(22);
proccess(clkd,rs)
begiin
if(rs='1'))then temp<=(others=>'0 0'); ‐‐for down coun
nter temp=>""1111";
elsif(clkd d='1' and clkkd'event) the
en
temp<=ttemp+1; nter temp<= temp‐1;
‐‐for down coun
q<= tem mp;
end if;
end process;
end Behavioral;
Page 26
VHDL Lab Manual
15. SYNCHRONO
OUS BINARY
Y UP COUNTER:
3‐bitt Asynchronoous up countter
Clo
ock QC QB QA A
0
0 0 0 0
0
1
1 0 0 1
1
2
2 0 1 0
0
3
3 0 1 1
1
4
4 1 0 0
0
5
5 1 0 1
1
6
6 1 1 0
0
7
7 1 1 1
1
8
8 0 0 0
0
9
9 0 0 1
1
libraary IEEE;
use IEEE.STD_LO OGIC_1164.A ALL;
use IEEE.STD_LO OGIC_ARITH.ALL;
use IEEE.STD_LO OGIC_UNSIGNED.ALL;
entity syynbicount is
Port ( rs,clk : in STTD_LOGIC;
q :: inout STD__LOGIC_VECTTOR (3 down nto 0));
end synbicount;
archhitecture Beh havioral of syynbicount is
signal diiv:std_logic__vector(22 do ownto 0);
signal teemp:STD_LOGIC_VECTOR R (3 downto 0);
signal clkd:std_logic;
begiin
proccess(clk)
begiin
if rising__edge(clk)theen
div<= div+1;
end if;
end process;
clkd<=div(22);
proccess(clkd)
begiin
if(clkd='1' and clkd'eevent) then
if(rs='1'))then temp<=(others=>'0 0'); ‐‐‐for down counter temp<="111 11"
else tem mp<=temp+1 1; ‐‐‐for do
own counterr temp<= tem
mp‐1;
end if;
q<= tem mp;
end if;
end process;
end Behavioral;
Page 27
VHDL Lab Manual
16. BCD UP COUNTER:
Clock QD QC QB QA
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 0 0 0 0
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bcdupcount is
Port ( clk,rst : in STD_LOGIC;
q : inout STD_LOGIC_VECTOR (3 downto 0));
end bcdupcount;
architecture Behavioral of bcdupcount is
signal div:std_logic_vector(22 downto 0);
signal clkd:std_logic;
begin
process(clkd)
begin
if rising_edge(clk)then
div<= div+1;
end if;
end process;
clkd<=div(22);
process(clkd,rst)
begin
if rst='0' or q="1010" then
q<="0000";
elsif clkd'event and clkd='1' then
q<=q+1;
end if;
end process;
q<=q;
end Behavioral;
Page 28
VHDL Lab Manual
17. BCD DOWN COUNTER:
Clock QD QC QB QA
0 1 0 0 1
1 1 0 0 0
2 0 1 1 1
3 0 1 1 0
4 0 1 0 1
5 0 1 0 0
6 0 0 1 1
7 0 0 1 0
8 0 0 0 1
9 0 0 0 0
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bcddowncounter1 is
Port ( clk,rst : in STD_LOGIC;
q : inout STD_LOGIC_VECTOR (3 downto 0));
end bcddowncounter1;
architecture Behavioral of bcddowncounter1 is
signal div:std_logic_vector(22 downto 0);
signal clkd:std_logic;
begin
process(clkd)
begin
if rising_edge(clk)then
div<= div+1;
end if;
end process;
clkd<=div(22);
process(clkd,rst)
begin
if rst='0' or q="1111" then
q<="1001";
elsif clkd'event and clkd='1' then
q<=q‐1;
end if;
end process;
q<=q;
end Behavioral;
Page 29
VHDL Lab Manual
18. VHDL CODE FOR DC MOTOR INTERFACE
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity dcmotor is
Port (start,dir,clk:in std_logic;
pwm_out:out std_logic;
out_dc:out std_logic_vector(1 downto 0));
end dcmotor;
architecture dcmotor_a of dcmotor is
signal clk1:std_logic;
signal div:std_logic_vector (24 downto 0);
begin
process (clk,start)
begin
if(start=’0’) then
div<=”0000000000000000000000000”;
elsif(clk’ event and clk=’1’)then
div<=div+1;
end if;
clk1<=div(19);
end process;
process(clk1)
begin
if(clk1’event and clk=’1’)then
if start=’0’ then
out_dc<=”00”;
elsif start=’1’ and dir=’1’ then
out_dc<=”10”;
pwm_out<=’1’;
elsif start=’1’ and dir=’0’ then
out_dc<=”01”;
pwm_out<=’1’;
end if;
end if;
end process;
end dcmotor_a;
PIN ASSIGNMENT
XC3128TQ144 XC2S100TQ144‐5
Connector Device pin Property Connector Device pin Property
128 Clk 18 Clk
P 18/6 6 Dir P 18/6 44 Dir
P 18/13 14 Out_dc(0) P 18/13 54 Out_dc(0)
P 18/14 15 Out_dc(1) P 18/14 56 Out_dc(1)
P 18/11 11 Pwm_out P 18/11 50 Pwm_out
P 18/5 5 Start P 18/5 43 Start
Page 30
VHDL Lab Manual
19. VHDL CODE FOR STEPPER MOTOR INTERFACE
Library ieee; lk<=dic(15);
Use ieee.std_logic_1164.all; process(lk,rst,clkwise)
Use ieee.std_logic_unsigned.all; begin
Use ieee.std_logic_arith.all; if(rst=’1’)then
entity stm_st is state<=s0;
port (clk:in std_logic; rst:in std_logic; elsif lk’event and lk=’1’ then
out_stm:out std_logic_vector(3 downto 0)); if clkwise=’0’ then
end stm_st; case state is
architecture stm_st_a of stm_st is when s0=>state<=s1;
type state_type is (s0,s1,s2,s3); when s1=>state<=s2;
signal state:state_type; when s2=>state<=s3;
signal div:st_logic_vector(20 downto 0); when s3=>state<=s0;
signal lk,clkwise,start:std_logic; when others=>null;
begin end case
process(clk,rst) end if;
begin end if;
if (rst=’0’) then end process;
div<=(others=>’0’); with state select
elsif(clk’event and clk=’1’) then out_stm<=”0110” when s0,
div<=div+1; “1010” when s1, “1001” when s2,
end if; “0101” when s3;
end process; End stm_st_a;
PIN ASSIGNMENT
XC3128TQ144 XC2S100TQ144‐5
Connector Device pin Property Connector Device pin Property
128 Clk 18 Clk
P 14/1 88 Dir P 18/5 43 Dir
P 15/1 132 Out_stm(0) P 18/21 62 Out_stm(0)
P 15/2 131 Out_stm(1) P 18/22 65 Out_stm(1)
P 15/3 121 Out_stm(2) P 18/19 60 Out_stm(2)
P 15/4 120 Out_stm(3) P 18/20 64 Out_stm(3)
125 Rst 86 Rst
Page 31
VHDL Lab Manual
20. VHDL CODE FOR SEVEN SEGMENT DISPLAY INTERFACE
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity mux_disp is
Port (clk:in std_logic ‐‐‐4mhz
Rst: in std_logic;
seg: out std_logic_vector(6 downto 0)
base: out std_logic_vector(3 downto 0));
end mux_disp;
architecture mux_disp_arch of mux_disp is
signal count : std_logic_vector(25 downto 0);
signal base_cnt: std_logic_vector(1 downto 0);
signal seg_cnt: std_logic_vector(3 downto 0);
begin
process(clk,rst)
begin
if rst = ‘1’ then
count<=(others=>’0’);
elsif
clk=’1’ and clk’event then
count<= + ‘1’;
end if;
end process;
base_cnt<=count(12 downto11);
seg_cnt<=count(25 downto 22);
Base<= ”1110” when base_cnt=”00” else
”1101” when base_cnt=”01” else
”1011” when base_cnt=”10” else
”0111” when base_cnt=”11” else
”1111”;
Seg<= ”0111111” when seg_cnt=”0000” else ‐‐‐0
”0000110” when seg_cnt=”0001” else ‐‐‐1
”1011011” when seg_cnt=”0010” else ‐‐‐2
”1001111” when seg_cnt=”0011” else ‐‐‐3
”1100110” when seg_cnt=”0100” else ‐‐‐4
”1101101” when seg_cnt=”0101” else ‐‐‐5
”1111101” when seg_cnt=”0110” else ‐‐‐6
”0000111” when seg_cnt=”0111” else ‐‐‐7
”1111111” when seg_cnt=”1000” else ‐‐‐8
”1100111” when seg_cnt=”1001” else ‐‐‐9
”1110111” when seg_cnt=”1010” else ‐‐‐A
”1111100” when seg_cnt=”1011” else ‐‐‐B
”0111001” when seg_cnt=”1100” else ‐‐‐C
”1011110” when seg_cnt=”1101” else ‐‐‐D
”1111001” when seg_cnt=”1110” else ‐‐‐E
”1110001” when seg_cnt=”0000” else ‐‐‐F
“0000000”;
End mux_disp_arch;
Page 32
VHDL Lab Manual
21. VHDL CODE FOR RELAY INTERFACE
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity relay is
Port (sw : in std_logic;
Rl1,led : out std_logic);
End realy;
Architecture behavioral of relay is
Begin
Rl1 <= ws;
Led <= sw;
End behavioral;
PIN ASSIGNMENT
XC3128TQ144 XC2S100TQ144‐5
Connector Device pin Property Connector Device pin Property
P 18/3 41 Sw P 18/3 1 Sw
P 18/5 43 Rl1 P 18/5 5 Rl1
P 18/21 62 Led P 18/21 23 Led
Page 33
VHDL Lab Manual
22. VHDL CODE FOR MULTIPLEXER (4:1)(STRUCTURAL):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mux is
Port ( i0,i1,i2,i3,s0,s1 : in STD_LOGIC;
y : out STD_LOGIC);
end mux;
architecture struct of mux is
component and1 ‐‐‐‐components, entity and architecture
port (l,m,u:in std_logic;n:out std_logic); ‐‐‐ must be declared separately
end component;
component or1 ‐‐‐‐components, entity and architecture
port (o,p,x,y:in std_logic;q:out std_logic); ‐‐‐ must be declared separately
end component;
component not1 ‐‐‐‐components, entity and architecture
port (r:in std_logic;s:out std_logic); ‐‐‐ must be declared separately
end component;
signal s2,s3,s4,s5,s6,s7:std_logic;
begin
u1:and1 port map(i0,s2,s3,s4);
u2:and1 port map(i1,s2,s1,s5);
u3:and1 port map(i2,s0,s3,s6);
u4:and1 port map(i3,s0,s1,s7);
u5:not1 port map(s0,s2);
u6:not1 port map(s1,s3);
u7:or1 port map(s4,s5,s6,s7,y);
end struct;
Page 34
VHDL Lab Manual
23. VHDL CODE FOR BINARY
Y TO GRAY (Structural):
library IEEEE;
use IEEEE.STD_LOGIC C_1164.ALL;
use IEEEE.STD_LOGIC C_ARITH.ALL;;
use IEEEE.STD_LOGIC C_UNSIGNED.ALL;
entity bg is
Port ( b : in STD_LOGIC__VECTOR (3 d downto 0);
g : out STD__LOGIC_VECTTOR (3 down nto 0));
end bg;
architeccture struct o of bg is
component xor1 port(a,b:in std_logiic; ‐‐‐‐comp ponents, enttity and architecture
c:out std_loggic); ‐‐‐ mustt be declared
d separately
end compon nent;
component and1 port(d,e:in std_loggic; ‐‐‐‐comp ponents, enttity and architecture
f:out std_loggic); ‐‐‐ mustt be declared
d separately
end compon nent;
begin
u1:and1 porrt map(b(3),b b(3),g(3));
u2:xor1 portt map(b(3),b b(2),g(2));
u3:xor1 portt map(b(2),b b(1),g(1));
u4:xor1 portt map(b(1),b b(0),g(0));
end struuct;
Page 35
VHDL Lab Manual
24. VHDL CODE FOR GRAY TTO BINARY (Structural):
library IEEE;
use IEEE.STD D_LOGIC_1164.ALL;
use IEEE.STD D_LOGIC_AR RITH.ALL;
use IEEE.STD D_LOGIC_UN NSIGNED.ALLL;
entity gb is
Portt ( g : in STD__LOGIC_VEC CTOR (3 downto 0);
b : o
out STD_LOG GIC_VECTOR R (3 downto 0 0));
end gb;
architecturee struct of gb b is
commponent xor1 1 port(a,b:in std_logic; ‐‐‐‐componeents, entity aand architectture
c:ouut std_logic); ‐‐‐ must be ddeclared sep
parately
end component;
commponent and1 port(d,e:in n std_logic; ‐‐‐‐componeents, entity aand architectture
f:out std_logic); ‐‐‐ must be ddeclared sep
parately
end component;
commponent xor1 12 port(g,h,i::in std_logic;; ‐‐‐‐components, entity and architeccture
k:ouut std_logic);; ‐‐‐ must be ddeclared sep
parately
end component;
commponent xor1 13 port(l,m,n n,o:in std_loggic; ‐‐‐‐compponents, entity and archittecture
p:ouut std_logic);; ‐‐‐ must be ddeclared sep
parately
end component;
begin
u1:and1 porrt map(g(3),gg(3),b(3));
u2:xor1 portt map(g(3),g(2),b(2));
u3:xor12 po ort map(g(3),g(2),g(1),b(1 1));
u4:xor13 po ort map(g(3),g(2),g(1),g(0 0),b(0));
end struct;
Page 36
VHDL Lab Manual
25. VHDL CODE FOR DECODER (Structural):
Y (0)
Y (1 )
Y (2 )
Y (3 )
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dec is
Port ( a,b : in STD_LOGIC;
y: out STD_LOGIC_VECTOR (3 downto 0));
end dec;
architecture Behavioral of dec is
component and1 is ‐‐‐‐components, entity and architecture
port(p,q:in std_logic;r:out std_logic); ‐‐‐ must be declared separately
end component;
component not1 is ‐‐‐‐components, entity and architecture
port (d:in std_logic;e:out std_logic); ‐‐‐ must be declared separately
end component;
signal s1,s2:std_logic;
begin
u1:and1 port map(s1,s2,y(0));
u2:and1 port map(s1,b,y(1));
u3:and1 port map(a,s2,y(2));
u4:and1 port map (a,b,y(3));
u5:not1 port map(a,s1);
u6:not1 port map(b,s2);
end Behavioral;
Page 37
VHDL Lab Manual
26. VHDL CODE FOR D FLIP FLOP (Structural):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dff1 is
Port ( d,clk,pr,clr : in STD_LOGIC;
q,qn : inout STD_LOGIC);
end dff1;
architecture struct of dff1 is
component clkdiv is ‐‐‐‐components, entity and architecture
port(clk:in std_logic;clk_d:out std_logic); ‐‐‐ must be declared separately
end component;
component nand1 is
port(a,b,c:in std_logic; ‐‐‐‐components, entity and architecture
d:out std_logic); ‐‐‐ must be declared separately
end component;
component nand12 is
port(x,y:in std_logic; ‐‐‐‐components, entity and architecture
z:out std_logic); ‐‐‐ must be declared separately
end component;
component nand13 is
port(e:in std_logic; ‐‐‐‐components, entity and architecture
f:out std_logic); ‐‐‐ must be declared separately
end component;
signal s1,s2,s3,s4,s5,s6,s7,s8,s9:std_logic;
begin
u10:clkdiv port map(clk,s7);
u1:nand1 port map(d,s7,qn,s1);
u2:nand1 port map(s9,s7,q,s2);
u3:nand1 port map(pr,s1,s4,s3);
u4:nand1 port map(s2,clr,s3,s4);
u5:nand12 port map(s3,s8,s5);
u6:nand12 port map(s8,s4,s6);
u7:nand12 port map(s5,qn,q);
u8:nand12 port map(s6,q,qn);
u9:nand13 port map(s7,s8);
u11:nand13 port map(d,s9);
end struct;
Page 38
VHDL Lab Manual
27. VHDL CODE FOR JK FLIP FLOP (Structural):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity jkff is
Port ( j,k,clk,pr,clr : in STD_LOGIC;
q,qn : inout STD_LOGIC);
end jkff;
architecture struct of jkff is
component clkdiv is ‐‐‐‐components, entity and architecture
port(clk:in std_logic;clk_d:out std_logic); ‐‐‐ must be declared separately
end component;
component nand1 is ‐‐‐‐components, entity and architecture
port(a,b,c:in std_logic; ‐‐‐ must be declared separately
d:out std_logic);
end component;
component nand12 is ‐‐‐‐components, entity and architecture
port(x,y:in std_logic; ‐‐‐ must be declared separately
z:out std_logic);
end component;
component nand13 is
port(e:in std_logic; ‐‐‐‐components, entity and architecture
f:out std_logic); ‐‐‐ must be declared separately
end component;
signal s1,s2,s3,s4,s5,s6,s7,s8:std_logic;
begin
u10:clkdiv port map(clk,s7);
u1:nand1 port map(j,qn,s7,s1);
u2:nand1 port map(k,s7,q,s2);
u3:nand1 port map(pr,s1,s4,s3);
u4:nand1 port map(s2,clr,s3,s4);
u5:nand12 port map(s3,s8,s5);
u6:nand12 port map(s8,s4,s6);
u7:nand12 port map(s5,qn,q);
u8:nand12 port map(s6,q,qn);
u9:nand13 port map(s7,s8);
end struct;
Page 39
VHDL Lab Manual
28. VHDL CODE FOR T FLIP FLOP (Structural):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity tff1 is
Port ( t,clk,pr,clr : in STD_LOGIC;
q,qn : inout STD_LOGIC);
end tff1;
architecture struct of tff1 is
component clkdiv is ‐‐‐‐components, entity and architecture
port(clk:in std_logic;clk_d:out std_logic); ‐‐‐ must be declared separately
end component;
component nand1 is
port(a,b,c:in std_logic; ‐‐‐‐components, entity and architecture
d:out std_logic); ‐‐‐ must be declared separately
end component;
component nand12 is
port(x,y:in std_logic; ‐‐‐‐components, entity and architecture
z:out std_logic); ‐‐‐ must be declared separately
end component;
component nand13 is
port(e:in std_logic; ‐‐‐‐components, entity and architecture
f:out std_logic); ‐‐‐ must be declared separately
end component;
signal s1,s2,s3,s4,s5,s6,s7,s8:std_logic;
begin
u10:clkdiv port map(clk,s7);
u1:nand1 port map(t,qn,s7,s1);
u2:nand1 port map(t,s7,q,s2);
u3:nand1 port map(pr,s1,s4,s3);
u4:nand1 port map(s2,clr,s3,s4);
u5:nand12 port map(s3,s8,s5);
u6:nand12 port map(s8,s4,s6);
u7:nand12 port map(s5,qn,q);
u8:nand12 port map(s6,q,qn);
u9:nand13 port map(s7,s8);
end struct;
Page 40
VHDL Lab Manual
29. 1 BIT COMPARATOR (structural):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity comp is
Port ( a,b : in STD_LOGIC; y : out STD_LOGIC_VECTOR (2 downto 0));
end comp;
architecture struct of comp is
component and1
port(l,m:in std_logic; ‐‐‐‐components, entity and architecture
n:out std_logic); ‐‐‐ must be declared separately
end component;
component xnor1 is
port(p,q:in std_logic; ‐‐‐‐components, entity and architecture
r:out std_logic); ‐‐‐ must be declared separately
end component;
component notgate1 is
port(s:in std_logic; ‐‐‐‐components, entity and architecture
t:out std_logic); ‐‐‐ must be declared separately
end component;
signal s1,s2:std_logic;
begin
u1:and1 port map(a,s2,y(0));
u2:and1 port map(s1,b,y(1));
u3:xnor1 port map(a,b,y(2));
u4:notgate1 port map(a,s1);
u5:notgate1 port map(b,s2);
end struct;
Page 41
VHDL Lab Manual
Page 42
VHDL Lab Manual
Page 43
VHDL Lab Manual
Page 44
VHDL Lab Manual
ur. Page 45
VHDL Lab Manual
Departm
ment of E & C, SSIT, Tumku
ur. Page 46