mirror of
https://github.com/zachjs/sv2v.git
synced 2026-09-04 08:45:29 +02:00
improved handling of break statement
- fix preservation of loop variables when breaking - extend Yosys-compatible constant loop conversion to support loop variables declared outside of the looop
This commit is contained in:
@@ -8,8 +8,49 @@ module top;
|
||||
f = f * 2;
|
||||
end
|
||||
endfunction
|
||||
function automatic integer g;
|
||||
input integer inp;
|
||||
integer idx;
|
||||
g = 1;
|
||||
for (idx = 0; idx < inp; idx = idx + 1) begin
|
||||
if (g == 32)
|
||||
break;
|
||||
g = g * 2;
|
||||
end
|
||||
g += idx;
|
||||
endfunction
|
||||
function automatic integer h;
|
||||
input integer inp;
|
||||
integer idx;
|
||||
h = 1;
|
||||
for (idx = 0; idx + 1 < 1 + inp; idx = idx + 1) begin
|
||||
if (h == 32)
|
||||
break;
|
||||
h = h * 2;
|
||||
end
|
||||
h += idx + 1;
|
||||
endfunction
|
||||
function automatic integer j;
|
||||
input integer inp;
|
||||
for (j = 0; j < inp; j = j + 1)
|
||||
if (j == 3)
|
||||
return j;
|
||||
j *= 2;
|
||||
endfunction
|
||||
function automatic integer k;
|
||||
input integer inp;
|
||||
for (k = 0; k + 1 < 1 + inp; k = k + 1)
|
||||
if (k == 3)
|
||||
return k * 3;
|
||||
k = k * 2 + 1;
|
||||
endfunction
|
||||
integer i;
|
||||
initial
|
||||
for (i = 0; i < 10; i = i + 1)
|
||||
for (i = 0; i < 10; i = i + 1) begin
|
||||
$display("f(%0d) = %0d", i, f(i));
|
||||
$display("g(%0d) = %0d", i, g(i));
|
||||
$display("h(%0d) = %0d", i, h(i));
|
||||
$display("j(%0d) = %0d", i, j(i));
|
||||
$display("k(%0d) = %0d", i, k(i));
|
||||
end
|
||||
endmodule
|
||||
|
||||
@@ -6,8 +6,41 @@ module top;
|
||||
else
|
||||
f = 2 ** inp;
|
||||
endfunction
|
||||
function automatic integer g;
|
||||
input integer inp;
|
||||
if (inp > 5)
|
||||
g = 32 + 5;
|
||||
else
|
||||
g = 2 ** inp + inp;
|
||||
endfunction
|
||||
function automatic integer h;
|
||||
input integer inp;
|
||||
if (inp > 5)
|
||||
h = 32 + 5 + 1;
|
||||
else
|
||||
h = 2 ** inp + inp + 1;
|
||||
endfunction
|
||||
function automatic integer j;
|
||||
input integer inp;
|
||||
if (inp > 3)
|
||||
j = 3;
|
||||
else
|
||||
j = inp * 2;
|
||||
endfunction
|
||||
function automatic integer k;
|
||||
input integer inp;
|
||||
if (inp > 3)
|
||||
k = 3 * 3;
|
||||
else
|
||||
k = inp * 2 + 1;
|
||||
endfunction
|
||||
integer i;
|
||||
initial
|
||||
for (i = 0; i < 10; i = i + 1)
|
||||
for (i = 0; i < 10; i = i + 1) begin
|
||||
$display("f(%0d) = %0d", i, f(i));
|
||||
$display("g(%0d) = %0d", i, g(i));
|
||||
$display("h(%0d) = %0d", i, h(i));
|
||||
$display("j(%0d) = %0d", i, j(i));
|
||||
$display("k(%0d) = %0d", i, k(i));
|
||||
end
|
||||
endmodule
|
||||
|
||||
Reference in New Issue
Block a user