module scopes_test_01(input [3:0] k, output reg [15:0] x, y); | |
function [15:0] func_01; | |
input [15:0] x, y; | |
begin | |
func_01 = x + y; | |
begin:blk | |
reg [15:0] x; | |
x = y; | |
func_01 = func_01 ^ x; | |
end | |
func_01 = func_01 ^ x; | |
end | |
endfunction | |
function [15:0] func_02; | |
input [15:0] x, y; | |
begin | |
func_02 = x - y; | |
begin:blk | |
reg [15:0] func_02; | |
func_02 = 0; | |
end | |
end | |
endfunction | |
task task_01; | |
input [3:0] a; | |
reg [15:0] y; | |
begin | |
y = a * 23; | |
x = x + y; | |
end | |
endtask | |
task task_02; | |
input [3:0] a; | |
begin:foo | |
reg [15:0] x, z; | |
x = y; | |
begin:bar | |
reg [15:0] x; | |
x = 77 + a; | |
z = -x; | |
end | |
y = x ^ z; | |
end | |
endtask | |
always @* begin | |
x = func_01(11, 22); | |
y = func_02(33, 44); | |
task_01(k); | |
task_02(k); | |
begin:foo | |
reg [15:0] y; | |
y = x; | |
y = y + k; | |
x = y; | |
end | |
x = func_01(y, x); | |
y = func_02(y, x); | |
end | |
endmodule |