0% found this document useful (0 votes)
81 views27 pages

ECE 4514 Digital Design II Spring 2008 Functions and Tasks: A Language Lecture

This document summarizes a lecture about functions and tasks in Verilog. Functions allow code to be reused and help with modularity. Functions must execute in zero time, while tasks can contain delays and execute over multiple cycles. Functions can have local variables and access module variables. Tasks are enabled from always or initial blocks and can contain delays to execute over multiple cycles. Examples of functions like gray code conversion and tasks that model delays are provided.

Uploaded by

Harold Wilson
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
81 views27 pages

ECE 4514 Digital Design II Spring 2008 Functions and Tasks: A Language Lecture

This document summarizes a lecture about functions and tasks in Verilog. Functions allow code to be reused and help with modularity. Functions must execute in zero time, while tasks can contain delays and execute over multiple cycles. Functions can have local variables and access module variables. Tasks are enabled from always or initial blocks and can contain delays to execute over multiple cycles. Examples of functions like gray code conversion and tasks that model delays are provided.

Uploaded by

Harold Wilson
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 27

ECE 4514

Digital Design II
Spring 2008
Lecture 21:
Functions and Tasks
A Language Lecture

Patrick Schaumont
ECE 4514 Digital Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Tasks and Functions


 Help

with the reusability of writing code


module abc(...);

module abc(...);
map into a
single function
or task

call

endmodule
endmodule

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Tasks vs Functions
Tasks, as well as functions, are behavioral constructs.
They support expressions, if-then, case, loop statements
They are local to a module, and called from within
initial and always blocks.
Tasks

Functions

Can contain event control (@,


#, wait)

Cannot contain event control


(@, #, wait)

May execute in non-zero


simulation time

Must execute in zero simulation


time

Can have zero or more


arguments of type in, out, inout

Must have at least in input


argument, and has a single
output argument

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions
module andorgate(q, a, b);
output [1:0] q;
input
a, b;
function mygate;
input x, y;
input op;
case (op)
1'b0: mygate = x & y;
1'b1: mygate = x | y;
default: mygate = 1'b0;
endcase
endfunction
assign q[0] = mygate(a, b, 0); // and gate
assign q[1] = mygate(a, b, 1); // or gate
endmodule
ECE 4514 Digital Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions
module andorgate(q, a, b);
output [1:0] q;
input
a, b;
function mygate;
input x, y;
input op;
case (op)
1'b0: mygate = x & y;
1'b1: mygate = x | y;
default: mygate = 1'b0;
endcase
endfunction

op

mygate

assign q[0] = mygate(a, b, 0); // and gate


assign q[1] = mygate(a, b, 1); // or gate
endmodule
ECE 4514 Digital Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions
module andorgate(q, a, b);
output [1:0] q;
input
a, b;
function mygate;
input x, y;
input op;
case (op)
1'b0: mygate = x & y;
1'b1: mygate = x | y;
default: mygate = 1'b0;
endcase
endfunction

op

mygate

assign q[0] = mygate(a, b, 0); // and gate


assign q[1] = mygate(a, b, 1); // or gate
y op
x
endmodule
ECE 4514 Digital Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions
module andorgate(q, a, b);
output [1:0] q;
input
a, b;
function mygate;
input x, y;
input op;
case (op)
1'b0: mygate = x & y;
1'b1: mygate = x | y;
default: mygate = 1'b0;
endcase
endfunction

The logic is defined by


the function calls, not by
the function declaration

assign q[0] = mygate(a, b, 0); // and gate


assign q[1] = mygate(a, b, 1); // or gate
endmodule
ECE 4514 Digital Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions can have local variables (reg)


module addit(q, a, b, c);
output [1:0] q;
input [1:0] a, b, c;
function [1:0] myadd;
input [1:0] x, y, z;
reg [1:0] w;
begin
w
= x + y;
myadd = w + z;
end
endfunction

Two-bit output
Local variable

assign q = myadd(a, b, c);


endmodule

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions can have local variables (reg)


module addit(q, a, b, c);
output [1:0] q;
input [1:0] a, b, c;
function [1:0] myadd;
input [1:0] x, y, z;
reg [1:0] w;
begin
w
= x + y;
myadd = w + z;
end
endfunction
assign q = myadd(a, b, c);

Two-bit output
Local variable

w is shared across
all invocations of myadd
w is similar to a
static variable in C

endmodule

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Functions can access module (global) variables


module addit(q, a, b, c);
output [1:0] q;
input [1:0] a, b, c;
function [1:0] myadd;
input [1:0] x;
reg [1:0] w;
begin
w
= a + x;
myadd = w + c;
end
endfunction
assign q = myadd(c);

// will return c + a + c

endmodule

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Automatic Functions
module addit(q1, q2, a, b, c);
output [1:0] q1, q2;
input [1:0] a, b, c;
function automatic [1:0] myadd;
input [1:0] x, y, z;
reg [1:0] w;
begin
automatic ensures that
w
= x + y;
all local variables
myadd = w + z;
are truly local
end
endfunction
With automatic, each
invocation of myadd will
assign q1 = myadd(a, b, c);
use a different w
assign q2 = myadd(a, a, a);
endmodule

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Constant functions
 Don't

create logic, but do compile-time calculations

module ram(address);
parameter ram_depth = 256;
localparam w = bits(ram_depth);
input [w-1:0] address;
function bits;
input [31:0] v;
for (bits = 0; v > 1; bits = bits - 1)
v = v >> 1;
endfunction
// ..
endmodule

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Remember

Gray Code ?

 A gray code is a code where only 1 bit


flips per code word
3-bit gray code

 How

000
001
011
010
110
111
101
100

do we build a gray-to-bin function?

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Gray

 It

to Bin should convert this:

IN

OUT

000
001
011
010
110
111
101
100

000
001
010
011
100
101
110
111

can be shown that


bin-bit i = xor-sum(gray-bit i .. gray-bit N)

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Gray

 It

to Bin should convert this:

IN

OUT

000
001
011
010
110
111
101
100

000
001
010
011
100
101
110
111

bit3 = gray3 = 1

can be shown that


bin-bit i = xor-sum(gray-bit i .. gray-bit N)

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Gray

 It

to Bin should convert this:

IN

OUT

000
001
011
010
110
111
101
100

000
001
010
011
100
101
110
111

bit3 = gray3 = 1
bit2 = gray3 xor gray2 = 1 xor 1 = 0

can be shown that


bin-bit i = xor-sum(gray-bit i .. gray-bit N)

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Gray

 It

to Bin should convert this:

IN

OUT

000
001
011
010
110
111
101
100

000
001
010
011
100
101
110
111

bit3 = gray3 = 1
bit2 = gray3 xor gray2 = 1 xor 1 = 0
bit1 = gray3 xor gray2 xor gray1
= 1 xor 1 xor 0 = 0

can be shown that


bin-bit i = xor-sum(gray-bit i .. gray-bit N)

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Now

let's build the gray to bin function

function [2:0] gray_to_bin;


input [2:0] a;
reg
[2:0] q;
begin
q[2] = a[2];
q[1] = a[1] ^ a[2];
q[0] = a[0] ^ a[1] ^ a[2];
gray_to_bin = q;
end
endfunction

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Cool.

Now let's use a loop to build the gray to bin


function

function [W:0] gray_to_bin;


input [W:0] a;
reg
[W:0] q;
begin

end
endfunction

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Example: Gray to Bin Conversion Function


 Cool.

Now let's use a loop to build the gray to bin


function

function [W:0] gray_to_bin;


input [W:0] a;
reg
[W:0] q;
integer i;
begin
for (i=0; i<=W; i = i + 1)
q[i] = ^(a >> i);
gray_to_bin = q;
end
endfunction

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Tasks
module operation;
parameter delay = 5;
reg [7:0] a, b, c;
always @(a, b, c)
runtask(a, b, c);

// same as: #5 a = b + c;

task runtask;
output [7:0] x;
input [7:0] y, z;
begin
#delay x = y + z;
end
endtask
initial begin
#5 b = 0; c = 2;
#10 b = 8;
end
endmodule
ECE 4514 Digital
Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Tasks
module operation;
parameter delay = 5;
reg [7:0] a, b, c;
always @(a, b, c)
runtask(a, b, c);
task runtask;
output [7:0] x;
input [7:0] y, z;
begin
#delay x = y + z;
end
endtask
initial begin
#5 b = 0; c = 2;
#10 b = 8;
end
endmodule
ECE 4514 Digital
Design II
Lecture 21: Functions and Tasks

// same as: #5 a = b + c;
These are not inputs/outputs
of the module, but links to the
variables of the module
b

runtask
operation
Patrick Schaumont
Spring 2008

Tasks
module operation;
parameter delay = 5;
reg [7:0] a, b, c;
always @(a, b, c)
runtask(a, b, c);
task runtask;
output [7:0] x;
input [7:0] y, z;
begin
#delay x = y + z;
end
endtask
initial begin
#5 b = 0; c = 2;
#10 b = 8;
end
endmodule
ECE 4514 Digital
Design II
Lecture 21: Functions and Tasks

// same as: #5 a = b + c;
Parameters, variables, etc
can be passed down from module
into a task
delay

runtask
operation
Patrick Schaumont
Spring 2008

Tasks
module operation;
parameter delay = 5;
reg [7:0] a, b, c;
always @(a, b, c)
runtask(a, b, c);

// same as: #5 a = b + c;

task runtask;
output [7:0] x;
input [7:0] y, z;
begin
#delay x = y + z;
end
endtask
initial begin
#5 b = 0; c = 2;
#10 b = 8;
end
endmodule
ECE 4514 Digital
Design II
Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

Tasks
module operation;
parameter delay = 5;
reg [7:0] a, b, c;
always @(a, b, c) begin
runtask(a, b, c);
#30 runtask(b, c, a);
end

The moment when a task


is ready to run is called
enabling a task

task runtask;
output [7:0] x;
input [7:0] y, z;
begin
#delay x = y + z;
end
endtask
initial begin
#5 b = 0; c = 2;
#10 b = 8;
end
ECE 4514 Digital Design II
Lecture 21:endmodule
Functions and Tasks

Patrick Schaumont
Spring 2008

Tasks
module operation;
parameter delay = 5;
reg [7:0] a, b, c;
always @(a, b, c) begin
runtask(a, b, c);
#30 runtask(b, c, a);
end
task runtask;
output [7:0] x;
input [7:0] y, z;
begin
#delay x = y + z;
end
endtask
initial begin
#5 b = 0; c = 2;
#10 b = 8;
end
ECE 4514 Digital Design II
Lecture 21:endmodule
Functions and Tasks

The moment when a task


is ready to run is called
enabling a task

wait on event a, b or c
enable runtask
do runtask

wait for #30


enable runtask
do runtask
Patrick Schaumont
Spring 2008

Functions and Tasks Summary


 Functions

and Tasks enable shorthand notations


within always and initial blocks

 Functions

are single-output, and do not support event

control
 Tasks

may have more then a single output, and may


have event-control statements

 In

practice, only functions are used in synthesis

 shorthand for combinational logic


 calculation of compile-time constants

ECE 4514 Digital Design II


Lecture 21: Functions and Tasks

Patrick Schaumont
Spring 2008

You might also like