1 / 20

6.1 Highlights of Procedures, Tasks, and Functions Facts

UNIT 5 Procedures, Tasks, and Functions. 6.1 Highlights of Procedures, Tasks, and Functions Facts Procedures, Tasks, and Functions are HDL tools to optimize the style of writing the HDL code. They are implemented to refer to a segment or a construct of code.

aden
Download Presentation

6.1 Highlights of Procedures, Tasks, and Functions Facts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UNIT 5 Procedures, Tasks, and Functions • 6.1 Highlights of Procedures, Tasks, and Functions • Facts • Procedures, Tasks, and Functions are HDL tools to optimize the style of writing the HDL code. They are implemented to refer to a segment or a construct of code. • Procedures and Tasks can have more than one input and more than one output. Functions have single output but can have more than one input. • Procedures and Functions in VHDL can be called only from within process. • Tasks and Functions in Verilog can be called only from within always or initial. HDL Programming Fundamentals

  2. 6.2 Procedures (VHDL) and Tasks (Verilog) procedureexmple (signal a : in std_logic ; signal y: out std_logic) is variable x: std_logic; begin x:= a; case x is ....... end case; y <= x; end exmple; Calling the procedure is a sequential statement process (d,clk) begin ...... exmple (d,z); ......... End process exmple is the name (identifier) of the procedure HDL Programming Fundamentals

  3. task addr; output cc, dd; input aa, bb; begin cc = aa ^ bb; ............. end endtask addr is the name (identifier) of the task ............ always @ (a,b) begin addr( c,d,a,b); end HDL Programming Fundamentals

  4. Example 6.1 HDL Behavioral Description of Full Adder using Procedure and Task HDL Programming Fundamentals

  5. library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity full_add is port (x,y, cin: in std_logic; sum, cout: out std_logic); end full_add; architecture two_halfs of full_add is -- The full adder is built from two half adders procedure Haddr(sh, ch: out std_logic; ah, bh : in std_logic) is --This procedure describes a half adder begin sh := ah xor bh; ch := ah and bh; end Haddr; begin addfull: process (x,y,cin) variable sum1, c1, c2, tem1, tem2: std_logic; begin Haddr (sum1, c1, y, cin); Haddr( tem1, c2, sum1,x); --The above two statements are calls to the procedure Haddr tem2:= c1 or c2; sum <= tem1; cout <= tem2; end process; end two_halfs; HDL Programming Fundamentals

  6. Verilog module Full_add(x,y,cin,sum, cout); //The full adder is built from two half adders input x,y, cin; output sum, cout; reg sum,sum1,c1,c2, cout; always @ (x,y, cin) begin Haddr( sum1,c1,y,cin ); Haddr( sum, c2, sum1,x); //The above two statements are calls to the task Haddr. cout = c1 | c2; end task Haddr; //This task describes half adder output sh, ch; input ah, bh; begin sh = ah ^ bh; ch = ah & bh; end endtask endmodule HDL Programming Fundamentals

  7. Example 6.2 HDL Description of N-bit Ripple-Carry Adder using Procedure and Task Listing 6.2 HDL Programming Fundamentals

  8. Example 6.3 Unsigned Binary Vector to Integer Conversion using Procedure and Task library ieee; use ieee.std_logic_1164.all; Use ieee.numeric_std.all; entity Bin_Int is generic (N : natural :=3); port (X_bin: unsigned (N downto 0); Y_int: out natural; Z: out std_logic); --Y is always positive end Bin_Int; architecture convert of Bin_Int is procedure bti (bin : in unsigned ; int: out natural; signal Z: out std_logic) is -- the procedure bti is to change binary to integer --We chose flag Z to be a signal rather than a variable -- Since the binary vector is always positive we use natural variable result:natural; begin result := 0; for i in bin'Range loop --bin’Range represents the range of the unsigned vector bin --Range is a predefined attribute HDL Programming Fundamentals

  9. Verilog module Bin_Int(X_bin, Y_int, Z); parameter N =3; input [N:0] X_bin; output integer Y_int; output Z; reg Z; always @ (X_bin) begin bti(Y_int,Z, N, X_bin); end task bti; parameter P = N; output integer int; output Z; input N; input [P:0] bin; integer i, result; begin int =0; //change binary to integer for (i=0; i<=P; i=i+1) begin if (bin[i] == 1) int = int + 2**i; end if (int == 0) Z = 1'b1; else Z = 1'b0; end endtask endmodule HDL Programming Fundamentals

  10. Example 6.4 Fraction Binary to Real Conversion using Procedure and Task Listing 6.4 HDL Programming Fundamentals

  11. Example 6.5 Unsigned Integer to Binary Conversion using Procedure and Task Listing 6.5 HDL Programming Fundamentals

  12. Example 6.6 Signed Binary to Integer Conversion using Procedure and Task Listing 6.6 HDL Programming Fundamentals

  13. Example 6.7 Integer to Signed Binary Conversion using procedure Listing 6.7 HDL Programming Fundamentals

  14. Example 6.8 Signed Vector Multiplication Using Procedure and Task Listing 6.8 HDL Programming Fundamentals

  15. Example Enzyme-Substrate Activity Using procedure and task Listing 6.9 HDL Programming Fundamentals

  16. 6.3 Functions VHDL architecture Behavioral of Func_exm is function exp (a, b: in std_logic) return std_logic is variable d: std_logic; begin d := a xor b; return d; end function exp; exp is the name (identifier) of the function Verilog function exp ; input a,b; begin exp = a ^ b; end endfunction HDL Programming Fundamentals

  17. Example 6.10 Function to Find the Greater of two signed numbers library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; entity greater_2 is port (x,y : in signed (3 downto 0) ; z: out signed (3 downto 0)); end greater_2; architecture greater_2 of greater_2 is function grt(a,b : signed (3 downto 0)) return signed is --The above statement declares a function by the name of grt. -- The inputs are 4-bit signed numbers variable temp : signed (3 downto 0); begin if (a >= b) then temp := a; else temp := b; end if; return temp; end grt; begin process (x,y) begin z <= grt (x,y); --This is a function call. end process; end greater_2; VHDL HDL Programming Fundamentals

  18. module greater_2(x,y, z); input signed [3:0] x; input signed [3:0] y; output signed [3:0] z; reg signed [3:0] z; always @ (x,y) begin z = grt (x,y);//This is a function call. end function [3:0] grt; /*The above statement declares a function by the name grt; grt is also the output of the function*/ input signed [3:0] a, b; /*The above statement declares two input to the function; both are 4-bit signed numbers.*/ begin if (a >= b) grt = a; else grt = b; end endfunction endmodule Verilog HDL Programming Fundamentals

  19. Example Function to Find the floating sum y = , 0 < x < 1 Listing 6.13 HDL Programming Fundamentals

  20. 6.4 Summary VHDL Commands or Components Verilog Counterpart procedure task function function HDL Programming Fundamentals

More Related