HDL Lab Manual for IV Sem ECE stream for VTU Syllabus.
Created by K S School of Engineering and Management, Bangalore
Copyright:
Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online from Scribd
Download as pdf or txt
You are on page 1of 64
K. S.
SCHOOL OF ENGINEERING & MANAGEMENT
# 15, Mallasandra, Off Kanakapura Road, Bangalore-560062, Karnataka, India.
DEPARTMENT OF ELECTRONICS & COMMUNICATION ENGINEERING
HDL Lab Manual Sub Code: 10ECL48 Sem : IV
Prepared By Mr. Manu D. K., Asst. Professor Mrs. Shalini Shravan, Asst. Professor Mr. Ravikiran B. A., Asst. Professor Ms. Devika N., Asst. Professor D e p a r t m e n t
o f
E C E ,
K S S E M CONTENTS
PART A: PROGRAMMI NG (using VHDL and Verilog) 1. Write HDL code to realize all the logic gates ....................................................................................... 1 2. Write a HDL program for the following combinational designs ..................................................... ................................................................................................................................... 3 b. 8 to 3 (encoder without priority & with priority) ......................................................................... 9 d. 4 bit binary to gray converter ........................................................................................................ 11 e. De-multiplexer, comparator ................. ................................................................................................ ............................................................................................... ................................................................................................. 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 AND B 5. A OR B 6. A NAND B 7. A XOR B 5. Develop the HDL code for the following flip-flops, SR, JK, D, T ................................................ OPCODE ENABLE ALU OPERATION 24 26 .....3 a. 2 to 4 decoder ..5 c. 8 to 1 multiplexer ............................................................................................................................ ..................................................................................................... 14 3. Write a HDL code to describe the functions of a Full Adder Using 3 modeling styles ....18 a. Full Adder Data Flow Description 18 b. Full Adder Behavioral Description 19 c. Full Adder Structural Description 21 D e p a r t m e n t
o f
E C E ,
K S S E M a. SR Flip Flop .................................................................................................................................. .................................................................................................................................... 6. Design 4 bit binary, BCD counters (Synchronous reset and Asynchronous reset) and any sequence counters .......................................................................................................... ....................................................................................... PART B: ......................................... ...................................................................................................................................... ................................................................................................................................. ............................................................................................................................... ...............................................................................................................................
26 b. JK Flip Flop ..................................................................................................................................
28 c. D Flip Flop 30 d. T Flip Flop .................................................................................................................................... 32 3 .....34 a. Binary Synchronous Reset 4bit Counter 34 b. Binary Asynchronous Reset 4bit Counter ..................................................................................... 35 c. BCD Synchronous Reset 4bit Counter ......................................................................................... 37 d. BCD Asynchronous Reset 4bit Counter ....................................................................................... 39 e. Binary Any Sequence up down 4bit Counter ............................................................................... 41
....43 a. Stepper Motor ............................................................................................................................... 43 b. DC Motor 50 ..................................................................................................................................... .....52 a. Sine Wave 52 b. Square Wave 56 c. Triangle Wave 58 d. Positive Ramp 60 I NTERFACI NG (at least four of the following must be covered using VHDL/Verilog)
1. Write HDL code to control speed, direction of DC and Stepper motor 46 2. Write HDL code to control external lights using relays. ..................................................................... 3. Write a HDL code to generate different waveforms (Sine, Square, Triangle, Ramp etc.,). Using DAC, change the frequency and amplitude ................................................... D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 1
EXPERIMENT 1 ALL LOGIC GATES
a_in not_op and_op nand_op or_op nor_op xor_op xnor_op b_in Logic Diagram of All Gates
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
ALL LOGIC GATES a_in b_in not_op and_op nand_op or_op nor_op xor_op xnor_op Figure 1: Block Diagram of All Logic Gates inputs outputs D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 2
entity AllLogicGates is port ( a_in : in STD_LOGIC; b_in : in STD_LOGIC; not_op : out STD_LOGIC; and_op : out STD_LOGIC; nand_op : out STD_LOGIC; or_op : out STD_LOGIC; nor_op : out STD_LOGIC; xor_op : out STD_LOGIC; xnor_op : out STD_LOGIC); end AllLogicGates;
architecture DataFlow of AllLogicGates is begin not_op <= not a_in; and_op <= a_in and b_in; nand_op <= a_in nand b_in; or_op <= a_in or b_in; nor_op <= a_in nor b_in; xor_op <= a_in xor b_in; xnor_op <= a_in xnor b_in; end DataFlow;
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 3
EXPERIMENT 2 COMBINATORIAL DESIGNS A. 2-to-4 Decoder
Decoder 2 to 4 d_in en d_op Figure 2: Block Diagram of Decoder 2 to 4 inputs outputs 2 4
Inputs Outputs en d_in(1) d_in(0) d_op(3) d_op(2) d_op(1) d_op(0) 1 X X Z Z Z Z 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0
Truth Table 2 : 2-to-4 Decoder
VHDL File Name: decoder2to4.vhd
-- decoder2to4 - Behavioral library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity decoder2to4 is Port ( d_in : in STD_LOGIC_VECTOR (1 downto 0); en : in STD_LOGIC; d_op : out STD_LOGIC_VECTOR (3 downto 0)); end decoder2to4;
architecture Behavioral of decoder2to4 is begin process(en,d_in) begin if(en/='0')then -- Active Low Enabled d_op<="ZZZZ"; else case d_in is D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 4
when "00" => d_op <= "0001"; when "01" => d_op <= "0010"; when "10" => d_op <= "0100"; when "11" => d_op <= "1000"; when others => d_op <= "ZZZZ"; end case; end if; end process; end Behavioral;
-- encoder without priority - Behavioral library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity encd_wo_prior is Port ( en : in STD_LOGIC; a_in : in STD_LOGIC_VECTOR (7 downto 0); D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 6
y_op : out STD_LOGIC_VECTOR (2 downto 0)); end encd_wo_prior;
architecture Behavioral of encd_wo_prior is begin process (en,a_in) begin if(en /= '0') then -- Active Low Enabled y_op <= "ZZZ"; else case a_in is when "00000001" => y_op <= "000"; when "00000010" => y_op <= "001"; when "00000100" => y_op <= "010"; when "00001000" => y_op <= "011"; when "00010000" => y_op <= "100"; when "00100000" => y_op <= "101"; when "01000000" => y_op <= "110"; when "10000000" => y_op <= "111"; when others => y_op <= "ZZZ"; end case; end if; end process; end Behavioral;
always @ (a_in, en) begin if(en) //Active Low Enabled y_op = 3'bZZZ; else begin case (a_in) 8'b00000001 : y_op = 3'b000; 8'b00000010 : y_op = 3'b001; 8'b00000100 : y_op = 3'b010; 8'b00001000 : y_op = 3'b011; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Encoder With Priority a_in en y_op Figure 4: Block Diagram of Encoder With Priority inputs outputs 8 3
Inputs Outputs en a_in(7 ) a_in(6 ) a_in(5 ) a_in(4 ) a_in(3 ) a_in(2) a_in(1 ) a_in (0) y_op (2) y_op (1) y_o p (0) 1 X X X X X X X X Z Z Z 0 1 X X X X X X X 1 1 1 0 0 1 X X X X X X 1 1 0 0 0 0 1 X X X X X 1 0 1 0 0 0 0 1 X X X X 1 0 0 0 0 0 0 0 1 X X X 0 1 1 0 0 0 0 0 0 1 X X 0 1 0 0 0 0 0 0 0 0 1 X 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0
Truth Table 4: Encoder With Priority
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 8
VHDL File Name: encd_w_prior.vhd
-- encd_w_prior - Dataflow library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity encd_w_prior is Port ( en : in STD_LOGIC; a_in : in STD_LOGIC_VECTOR (7 downto 0); y_op : out STD_LOGIC_VECTOR (2 downto 0)); end encd_w_prior; architecture Dataflow of encd_w_prior is begin y_op <= "ZZZ" when en = '1' else -- Active Low Enabled "111" when a_in(7)='1' else "110" when a_in(6)='1' else "101" when a_in(5)='1' else "100" when a_in(4)='1' else "011" when a_in(3)='1' else "010" when a_in(2)='1' else "001" when a_in(1)='1' else "000" when a_in(0)='1' else "ZZZ"; end Dataflow;
always @ (a_in, en) begin if (en == 1'b1) // Active Low Enabled y_op = 3'bZZZ; else begin if(a_in[7] == 1'b1) y_op = 3'b111; else if(a_in[6] == 1'b1) y_op = 3'b110; else if(a_in[5] == 1'b1) y_op = 3'b101; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Multiplexer 8 to 1 i_in en y_out Figure 5: Block Diagram of Multiplexer 8 to 1 inputs output 8 sel 3
Inputs Output en sel (2) sel (1) sel (0) i_in (7) i_in (6) i_in (5) i_in (4) i_in (3) i_in (2) i_in (1) i_in (0) y_out 1 X X X X X X X X X X X Z 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1
Truth Table 5: Mux 8 to 1
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 10
VHDL File Name: mux8to1.vhd
--mux8to1 - Behavioral library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mux8to1 is Port ( en : in STD_LOGIC; sel : in STD_LOGIC_VECTOR (2 downto 0); i_in : in STD_LOGIC_VECTOR (7 downto 0); y_out : out STD_LOGIC); end mux8to1; architecture Behavioral of mux8to1 is begin process(en,sel,i_in) begin if( en /= '0') then -- Active Low Enabled y_out <= 'Z'; else
case sel is when "000" => y_out <= i_in(0); when "001" => y_out <= i_in(1); when "010" => y_out <= i_in(2); when "011" => y_out <= i_in(3); when "100" => y_out <= i_in(4); when "101" => y_out <= i_in(5); when "110" => y_out <= i_in(6); when "111" => y_out <= i_in(7); when others => y_out <= 'Z'; end case; end if; end process; end Behavioral;
Verilog File Name: mux8to1.v
// Multiplexer 8 to 1 module mux8to1(en,i_in,sel,y_out); input en; input [2:0] sel; input [7:0] i_in; output y_out; wire en; wire [7:0] i_in; wire [2:0] sel; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 14
E. Demultiplexer 1 to 4
Demultiplexer 1 to 4 sel en Figure 7: Block Diagram of Demultiplexer 1 to 4 inputs 2 y_out outputs 4 a_in
Inputs Outputs en sel (1) sel (0) a_in y_out (3) y_out (2) y_out (1) y_out (0) 1 X X X Z Z Z Z 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 0 0
Truth Table 7: Demux 1 to 4
VHDL File Name: demux1to4.vhd
-- Demux1to4 - Behavioral library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity demux1to4 is Port ( en : in STD_LOGIC; sel : in STD_LOGIC_VECTOR(1 downto 0); a_in : in STD_LOGIC; y_out : out STD_LOGIC_VECTOR (3 downto 0)); end demux1to4;
architecture Behavioral of demux1to4 is begin process(en,sel,a_in) begin if(en /= '0') then -- Active Low Enabled y_out <= "ZZZZ"; else y_out <= "0000"; case sel is when "00" => y_out(0) <= a_in; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 15
when "01" => y_out(1) <= a_in; when "10" => y_out(2) <= a_in; when "11" => y_out(3) <= a_in; when others => y_out <= "ZZZZ"; end case; end if; end process; end Behavioral; Verilog File Name: demux1to4.v
--Comparator4bit - Behavioral library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity comparator4bit is Port ( a_in : in STD_LOGIC_VECTOR (3 downto 0); b_in : in STD_LOGIC_VECTOR (3 downto 0); g_op : out STD_LOGIC; e_op : out STD_LOGIC; L_op : out STD_LOGIC); end comparator4bit;
architecture Behavioral of comparator4bit is begin process(a_in,b_in) begin if( a_in > b_in) then g_op <= '1'; e_op <= '0'; L_op <= '0'; elsif(a_in = b_in) then g_op <= '0'; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 17
e_op <= '1'; L_op <= '0'; elsif(a_in < b_in) then g_op <= '0'; e_op <= '0'; L_op <= '1'; else g_op <= 'Z'; e_op <= 'Z'; L_op <= 'Z'; end if; end process; end Behavioral; Verilog File Name: comparator4bit.v
always@(a_in,b_in) if( a_in > b_in) begin g_op = 1; L_op = 0; e_op = 0; end else if( a_in < b_in) begin g_op = 0; L_op = 1; e_op = 0; end else if( a_in == b_in) begin g_op = 0; L_op = 0; e_op = 1; end else begin g_op = 1'bZ; L_op = 1'bZ; e_op = 1'bZ; end endmodule D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 18
EXPERIMENT 3 FULL ADDER
Full Adder sum Figure 9: Block Diagram of Full Adder inputs outputs carry a_in b_in c_in
Logic Diagram of Full Adder a_in b_in sum c_in carry x1 x2 a2 a1 o1 S1 S2 S3
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 19
A. Full Adder Data Flow Description VHDL File Name: FullAdder_DF.vhd
-- FullAdder_DF - Data_Flow library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity FullAdder_DF is Port ( a_in, b_in, c_in : in STD_LOGIC; sum, carry : out STD_LOGIC); end FullAdder_DF;
architecture Data_Flow of FullAdder_DF is begin sum <= a_in xor b_in xor c_in; carry <= (a_in and b_in) or (b_in and c_in) or (a_in and c_in); end Data_Flow;
B. Full Adder Behavioral Description VHDL File Name: FullAdder_Behav.vhd
-- Full Adder - Behavioral library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity FullAdder_Behav is Port ( a_in, b_in, c_in : in STD_LOGIC; sum, carry : out STD_LOGIC); D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 20
end FullAdder_Behav;
architecture Behavioral of FullAdder_Behav is begin process ( a_in, b_in, c_in) begin if(a_in='0' and b_in='0' and c_in = '0') then sum <= '0';carry <= '0'; elsif (( a_in='0' and b_in='0' and c_in = '1') or (a_in='0' and b_in='1' and c_in = '0') or (a_in='1' and b_in='0' and c_in = '0')) then sum <= '1';carry <= '0'; elsif (( a_in='0' and b_in='1' and c_in = '1') or (a_in='1' and b_in='0' and c_in = '1') or (a_in='1' and b_in='1' and c_in = '0')) then sum <= '0';carry <= '1'; elsif(a_in='1' and b_in='1' and c_in = '1') then sum <= '1';carry <= '1'; end if; end process; end Behavioral;
always @ ( a_in, b_in, c_in) begin if(a_in==0 & b_in==0 & c_in==0) begin sum = 0; carry = 0; end else if (( a_in==0 & b_in==0 & c_in == 1) | (a_in==0 & b_in==1 & c_in == 0) | (a_in==1 & b_in==0 & c_in == 0)) begin sum = 1; carry = 0; end
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 21
else if (( a_in==0 & b_in==1 & c_in == 1) | (a_in==1 & b_in==0 & c_in == 1) | (a_in==1 & b_in==1 & c_in == 0)) begin sum = 0; carry = 1; end else if(a_in==1 & b_in==1 & c_in == 1) begin sum = 1; carry = 1; end end endmodule
C. Full Adder Structural Description VHDL File Name: full_adder_struct.vhd
-- Full Adder - Structural library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity full_adder is port ( a_in, b_in, c_in : in STD_LOGIC; sum,carry : out STD_LOGIC); end full_adder;
architecture structural of full_adder is component xor2_1 port( a, b : in STD_LOGIC; y : out STD_LOGIC); end component; component and2_1 port( a, b : in STD_LOGIC; y : out STD_LOGIC); end component; component or2_1 port( a, b : in STD_LOGIC; y : out STD_LOGIC); end component; signal s1,s2,s3: STD_LOGIC; begin x1: xor2_1 port map (a_in, b_in, s1); a1: and2_1 port map (a_in, b_in, s2); D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 22
x2: xor2_1 port map (s1, c_in, sum); a2: and2_1 port map (s1, c_in, s3); o1: or2_1 port map (s2, s3, carry); end structural;
VHDL File Name: xor2_1.vhd
-- xor2_1 - DataFlow library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity xor2_1 is Port ( a,b : in STD_LOGIC; y : out STD_LOGIC); end xor2_1;
architecture data_flow of xor2_1 is begin y <= a xor b; end data_flow;
VHDL File Name: and2_1.vhd
-- and2_1 - DataFlow library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity and2_1 is port ( a, b : in STD_LOGIC; y : out STD_LOGIC); end and2_1;
architecture data_flow of and2_1 is begin y <= a and b; end data_flow;
VHDL File Name: or2_1.vhd
-- or2_1 - DataFlow library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 23
entity or2_1 is Port ( a,b : in STD_LOGIC; y : out STD_LOGIC); end or2_1;
architecture data_flow of or2_1 is begin y <= a or b; end data_flow; Verilog File Name: full_adder_struct.v
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity alu32bit is Port ( en : in BIT; opc : in STD_LOGIC_VECTOR (3 downto 0); a_in, b_in : in STD_LOGIC_VECTOR (31 downto 0); y_op : out STD_LOGIC_VECTOR (31 downto 0)); end alu32bit; architecture Behavioral of alu32bit is D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 25
begin process(en, a_in, b_in, opc) begin if (en = '1') then -- Active High Enabled case opc is when "0001" => y_op <= a_in + b_in; when "0010" => y_op <= a_in - b_in; when "0011" => y_op <= not a_in; when "0100" => y_op <= a_in and b_in; when "0101" => y_op <= a_in or b_in; when "0110" => y_op <= a_in nand b_in; when "0111" => y_op <= a_in xor b_in; when others => null; end case; else y_op <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; end if; end process; end behavioral;
always @ ( en, opc, a_in, b_in) if (en == 1) // Active High Enabled case (opc) 4'b0001 : y_op = a_in + b_in; 4'b0010 : y_op = a_in - b_in; 4'b0011 : y_op = ~ a_in; 4'b0100 : y_op = a_in & b_in; 4'b0101 : y_op = a_in | b_in; 4'b0110 : y_op = ~ (a_in & b_in); 4'b0111 : y_op = a_in ^ b_in; default null; endcase else y_op = 32'bZ; endmodule D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 26
EXPERIMENT 5 FLIP FLOPS A. SR Flip Flop
SR Flip Flop rst qb Figure 11: Block Diagram of SR Flip Flop inputs clk s q outputs r
Inputs Outputs rst clk s r q qb Action 1
X X q qb No Change 0
0 0 q qb No Change 0
0 1 0 1 Reset 0
1 0 1 0 Set 0
1 1 - - Illegal
Truth Table 11: S R Flip Flop
VHDL File Name: sr_ff.vhd
-- S R Flip Flop library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity sr_ff is Port ( s,r,rst,clk : in STD_LOGIC; q,qb : out STD_LOGIC); end sr_ff;
architecture Behavioral of sr_ff is signal temp : std_logic := '0'; begin D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 27
process(clk,rst) begin if(rst = '1') then temp <= '0'; elsif (clk'event and clk = '1') then if(s = '0' and r ='0') then temp <= temp; elsif(s = '0' and r ='1') then temp <= '0'; elsif(s = '1' and r ='0') then temp <= '1'; elsif(s = '1' and r ='1') then temp <= 'X'; end if; end if; end process; q <= temp; qb <= not temp; end Behavioral;
always @ ( posedge clk or posedge reset) if (reset) begin q = 1'b0; qb = ~q; end else begin case (sr) 2'd0 : q = q; 2'd1 : q = 1'b0; 2'd2 : q = 1'b1; 2'd3 : q = 1'bX; endcase qb = ~q; end endmodule
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 28
B. J K Flip Flop
JK Flip Flop rst qb Figure 12: Block Diagram of JK Flip Flop inputs clk j q outputs k
Inputs Outputs rst clk j k q qb Action 1 X X q qb No Change 0 0 0 q qb No Change 0 0 1 0 1 Reset 0 1 0 1 0 Set 0 1 1 q' q' Toggle
Truth Table 12: J K Flip Flop
VHDL File Name: jk_ff.vhd
--JK Flip Flop library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity jk_ff is Port ( j,k,rst,clk : in STD_LOGIC; q,qb : out STD_LOGIC); end jk_ff; architecture Behavioral of jk_ff is signal temp : std_logic := '0'; begin process(clk,rst) begin if(rst = '1') then temp <= '0'; elsif(clk'event and clk = '1') then if(j = '0' and k ='0') then temp <= temp; elsif(j = '0' and k ='1') then temp <= '0'; elsif(j = '1' and k ='0') then D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 29
temp <= '1'; elsif(j = '1' and k ='1') then temp <= not temp; end if; end if; end process; q <= temp; qb <= not temp; end Behavioral;
always @ ( posedge clk or posedge reset) if (reset) begin q = 1'b0; qb = ~q; end else begin case (jk) 2'd0 : q = q; 2'd1 : q = 1'b0; 2'd2 : q = 1'b1; 2'd3 : q = ~q; endcase qb = ~q; end endmodule
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 30
C. D Flip Flop D Flip Flop rst qb Figure 13: Block Diagram of D Flip Flop inputs clk d q outputs
Inputs Outputs rst clk d q qb Action 1 X q qb No Change 0 0 0 1 Reset 0 1 1 0 Set
Truth Table 13: D Flip Flop
VHDL File Name: d_ff.vhd
-- D Flip Flop library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity d_ff is Port ( d,clk,rst : in STD_LOGIC; q,qb : out STD_LOGIC); end d_ff; architecture Behavioral of d_ff is signal temp : std_logic := '0'; begin process(clk,rst) begin if(rst = '1') then temp <= '0'; elsif(clk'event and clk = '1') then temp <= d; end if; end process; q <= temp; qb <= not temp; end Behavioral; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
always @ ( posedge clk or posedge reset) if (reset) begin q = 1'b0; qb=~q; end else begin q = d; qb=~q; end endmodule
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 32
D. T Flip Flop T Flip Flop rst qb Figure 14: Block Diagram of T Flip Flop inputs clk t q outputs
Inputs Outputs rst clk t q qb Action 1 X q qb No Change 0 0 q qb No Change 0 1 q' q' Toggle
Truth Table 14: T Flip Flop
VHDL File Name: t_ff.vhd
--T Flip Flop library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity t_ff is Port ( t,clk,rst : in STD_LOGIC; q,qb : out STD_LOGIC); end t_ff;
architecture Behavioral of t_ff is signal temp : std_logic := '0'; begin process(clk,rst) begin if(rst = '1') then temp <= '0'; elsif(clk'event and clk = '1' and t = '1') then temp <= not temp; end if; end process; q <= temp; qb <= not temp; end Behavioral; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
-- Binary Synchronous reset 4bit counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity bin_counter_sync_4bit is Port ( clk,rst : in STD_LOGIC; bin_out : out STD_LOGIC_VECTOR (3 downto 0)); end bin_counter_sync_4bit; architecture Behavioral of bin_counter_sync_4bit is signal temp: std_logic_vector(3 downto 0); begin process(clk) begin if ( clk'event and clk='1') then if(rst = '1') then temp <= "0000"; else temp <= temp+'1'; end if; end if; end process; bin_out <= temp ; end Behavioral;
Verilog File Name: bin_counter_sync_4bit.v
// Binary synchronous reset 4bit counter module bin_sync_4bit ( rst, clk, count); input rst,clk; D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 35
output [3:0] count; reg [3:0] count; initial begin count = 4'b0000; end
--Binary Asynchronous reset 4bit counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bin_counter_async_4bit is Port ( clk,rst : in STD_LOGIC; bin_out : out STD_LOGIC_VECTOR (3 downto 0)); end bin_counter_async_4bit;
architecture Behavioral of bin_counter_async_4bit is signal temp: std_logic_vector(3 downto 0); begin process(clk,rst) begin if(rst = '1') then D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 36
temp <= "0000"; elsif ( clk'event and clk='1') then temp <= temp+'1'; end if; end process; bin_out <= temp ; end Behavioral;
--BCD Synchronous reset 4bit counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bcd_counter_sync is Port ( clk,rst : in STD_LOGIC; bcd_out : out STD_LOGIC_VECTOR (3 downto 0)); end bcd_counter_sync;
architecture Behavioral of bcd_counter_sync is signal temp: std_logic_vector(3 downto 0); begin process(clk) begin if ( clk'event and clk='1') then if(rst = '1' or temp = "1001") then temp <= "0000"; else temp <= temp+'1'; end if; end if; end process; bcd_out <= temp ; end Behavioral;
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
-- BCD asynchronous reset 4bit counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bcd_counter_async is
Port ( clk,rst : in STD_LOGIC; bcd_out : out STD_LOGIC_VECTOR (3 downto 0));
end bcd_counter_async;
architecture Behavioral of bcd_counter_async is signal temp: std_logic_vector(3 downto 0):= "0000"; begin process(clk,rst) begin if(rst = '1' or temp = "1010") then temp <= "0000"; elsif ( clk'event and clk='1') then temp <= temp+'1'; end if; end process; bcd_out <= temp ; end Behavioral;
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 41
E. Binary Any-Sequence Up-Down 4-bit Counter
Binary Any Sequence 4bit Counter updown Figure 19: Block Diagram of Binary Any Sequence 4bit Counter inputs clk bin_out outputs 4 rst d_in load 4
VHDL File Name: bin_counter_any_seq_4bit.vhd
-- Binary Any Sequence up down 4bit counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity bin_counter_any_seq is Port ( clk,rst,load,updown : in STD_LOGIC; d_in :in STD_LOGIC_VECTOR( 3 downto 0); bin_out : out STD_LOGIC_VECTOR (3 downto 0)); end bin_counter_any_seq;
architecture Behavioral of bin_counter_any_seq is signal temp: std_logic_vector(3 downto 0):= "0000"; begin process(clk, rst) begin if(rst = '1') then temp <= "0000"; elsif(load = '1') then temp <= d_in; elsif ( clk'event and clk='1' and load = '0') then if ( updown = '1') then temp <= temp+'1'; else temp <= temp-'1'; end if; end if; end process; bin_out <= temp ; end Behavioral;
D e p a r t m e n t
o f
E C E ,
K S S E M
HDL Laboratory (10ECL48) 4 th Sem KSSEM, Bangalore
Dept of ECE Page | 42
Verilog File Name: bin_counter_any_seq_4bit.v
// Binary Any Sequence Up Down Counter module any_seq_bin ( rst,load, clk,din,updown, count); input rst,clk,updown,load; input [3:0] din; output [3:0] count; reg [3:0] count;
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|43
PART B EXPERIMENT 1 STEPPER MOTOR AND DC MOTOR
1.(a) Write a VHDL code to control speed, direction of Stepper motor.
Figure 1 : Interfacing Diagram of CPLD Board and Stepper Motor Interfacing Card
Figure 2: Block Diagram of Stepper Motor
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|44
Procedure: 1. Make the connection between FRC9 of the FPGA board to the Stepper motor connector of the VTU card2. 2. Make the connection between FRC7 of the FPGA board to the Keyboard connector of the VTU card2. 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. VHDL CODING : library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity STEPPERnew is Port ( dout : out std_logic_vector(3 downto 0); clk,reset: in std_logic; row:in std_logic_vector(1 downto 0); dir:in std_logic); end STEPPERnew; architecture Behavioral of STEPPERnew is signal clk_div : std_logic_vector(25 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 D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|45
clk_div <= clk_div + '1'; end if; end process; clk_int<=clk_div(21) when row="00"else clk_div(19) when row="01"else clk_div(17) when row="10"else clk_div(15) ; process(reset,clk_int,dir) begin if reset='0' then shift_reg <= "1001"; elsif rising_edge(clk_int) then if dir='0' then shift_reg <= shift_reg(0) & shift_reg(3 downto 1); else shift_reg<=shift_reg(2 downto 0) & shift_reg(3); end if; end if; end process; dout <= shift_reg; end Behavioral; --------------------------------------------------------------------------------------------------------------------- UCF file(User constraint File) NET "clk" LOC = "p52" ; NET "dir" LOC = "p76" ; NET "dout<0>" LOC = "p141" ; NET "dout<1>" LOC = "p2" ; NET "dout<2>" LOC = "p4" ; NET "dout<3>" LOC = "p5" ; NET "reset" LOC = "p74" ; NET "row<0>" LOC = "p77" ; NET "row<1>" LOC = "p79" ;
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|46
1. (b) Write a VHDL code to control speed, direction of DC motor.
Figure 3 : Interfacing Diagram of CPLD Board and DC Motor Interfacing Card
Figure 4: Block Diagram 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 VTU card2. 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.
VHDL CODING : D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|47
Library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; Library UNISIM; use UNISIM.vcomponents.all; entity dcmotor 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,DIR: in STD_LOGIC; -- dircntr pwm : out std_logic_VECTOR(1 DOWNTO 0); rly: out std_logic; ROW: in STD_LOGIC_VECTOR(0 to 3) ); -- this are the row lines end dcmotor; architecture dcmotor1 of dcmotor is signal counter : std_logic_vector(bits - 1 downto 0):="11111110"; signal DIV_REG: STD_LOGIC_VECTOR (16 downto 0); -- clock divide register signal DCLK,DDCLK,datain,tick: STD_LOGIC; -- this has the divided clock. signal duty_cycle: integer range 0 to 255; signal ROW1 : STD_LOGIC_VECTOR(0 to 3); -- this are the row lines begin -- 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; DDCLK<=DIV_REG(12); ---------------------------- END OF CLOCK DIVIDER ------------------------------------------------- tick <= row(0) and row(1) and row(2) and row(3); D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|48
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<=DIR --motor direction control end dcmotor1; ---------------------------------------------------------------------------------------------------------------------
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|49
UCF file(User constraint File) NET "CLK" LOC = "p52" ; NET IR49 LOC = 7649; NET "pwm<0>" LOC = "p4" ; NET "pwm<1>" LOC = "p141" ; NET "RESET" LOC = "p74" ; NET "rly" LOC = "p44" ; NET "ROW<0>" LOC = "p69" ; NET "ROW<1>" LOC = "p63" ; NET "ROW<2>" LOC = "p59" ; NET "ROW<3>" LOC = "p57" ;
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|50
EXPERIMENT 2 EXTERNAL LIGHT
2. Write a VHDL code to control external lights using relays.
Figure 5: Interfacing Diagram of CPLD Board and Relay Interface Card
Procedure: 1. Make the connection between FRC9 of the FPGA board 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.
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|51
VHDL CODING : 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); 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 = "P76"; NET "light" LOC = "P5";
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|52
EXPERIMENT 3 SIGNAL GENERATION USING DAC 3.(a) Write a VHDL code to generate Sine waveforms using DAC . .
Figure 6: Interfacing Diagram of CPLD Board and Dac Interface Card
Figure 7: Block Diagram of Sine/Traingular/Square/Ramp Wave Generator using DAC
Procedure: D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|53
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 CODING : LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity sine is port ( clk : in std_logic; rst : in std_logic; dac_out : out std_logic_vector(0 to 7)); end sine;
architecture behavioral of sine is signal c1:std_logic_vector(7 downto 0); signal i :integer range 0 to 179; type sine is array (0 to 179) of integer range 0 to 255; constant VALUE:SINE:=(128,132,136,141,154,150,154,158,163,167,171,175,180,184,188, 192,195,199,203,206,210,213,216,220,223,226,228,231,234,236, 238,241,243,244,246,247,248,249,250,251,252,253,254,255,255, 255,255,255,254,254,253,252,251,249,246,244,243,241,238,236, 234,231,228,226,223,220,216,213,210,206,203,199,195,192,188, 184,180,175,171,167,163,158,154,150,145,141,136,132,128, D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|54
123,119,114,110,105,101,97,92,88,84,80,75,71,67,64,60,56,52, 49,45,42,39,35,32,29,27,24,21,19,17,14,12,11,9,7,6,4,3,2,1,1,0,0,0,0, 0,0,0,0,1,1,2,3,4,6,7,9,11,12,14,17,19,21,24,27,29,32,35,39,42,45,49, 52,56,60,64,67,71,75,80,84,88,92,97,101,105,110,114,119,123,128); begin process(clk,rst) begin if(rst='1') then c1<=(others=>'0'); elsif(clk'event and clk='1') then c1<=c1+1; end if; end process; process(c1(3)) begin if(c1(3)'event and c1(3)='1')then
dac_out<=conv_std_logic_vector(value(i),8); i<=i+1; if(i=179) then i<=0; end if; end if; end process; end behavioral; ---------------------------------------------------------------------------------------------------------------------
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|55
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" ;
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|56
3.(b) Write a VHDL code to generate Square waveforms using DAC . 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 CODING library IEEE; use IEEE.STD_LOGIC_1164.ALL; 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; D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|57
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"; elsif counter=0 then en<='0'; else en<='1'; counter <= counter-1; dac_out <="11111111"; 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" ;
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|58
3.(c) Write a VHDL code to generate Traingular waveforms using DAC 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 CODING : library IEEE; use IEEE.STD_LOGIC_1164.ALL; 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; D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|59
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" ;
D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|60
3.(d) Write a VHDL code to generate Ramp waveforms using DAC . 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 CODING library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; 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; D e p a r t m e n t
o f
E C E ,
K S S E M HDL Laboratory(10ECL48) 4 th Sem KSSEM,Bangalore Dept of ECE Page|61
end process; process(temp(3)) begin if rst='1' then counter <= "00000000"; elsif rising_edge(temp(3)) then counter <= counter + 08 ; 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" ;