mirror of
https://github.com/YosysHQ/yosys
synced 2025-07-31 00:13:18 +00:00
verilog: refactored constant function evaluation
Elaboration now attempts constant evaluation of any function call with only constant arguments, regardless of the context or contents of the function. This removes the concept of "recommended constant evaluation" which previously applied to functions with `for` loops or which were (sometimes erroneously) identified as recursive. Any function call in a constant context (e.g., `localparam`) or which contains a constant-only procedural construct (`while` or `repeat`) in its body will fail as before if constant evaluation does not succeed.
This commit is contained in:
parent
baf1875307
commit
b93b6f4285
4 changed files with 176 additions and 72 deletions
33
tests/simple/const_func_shadow.v
Normal file
33
tests/simple/const_func_shadow.v
Normal file
|
@ -0,0 +1,33 @@
|
|||
module top(w, x, y, z);
|
||||
function [11:0] func;
|
||||
input reg [2:0] x;
|
||||
input reg [2:0] y;
|
||||
begin
|
||||
x = x * (y + 1);
|
||||
begin : foo
|
||||
reg [2:0] y;
|
||||
y = x + 1;
|
||||
begin : bar
|
||||
reg [2:0] x;
|
||||
x = y + 1;
|
||||
begin : blah
|
||||
reg [2:0] y;
|
||||
y = x + 1;
|
||||
func[2:0] = y;
|
||||
end
|
||||
func[5:3] = x;
|
||||
end
|
||||
func[8:6] = y;
|
||||
end
|
||||
func[11:9] = x;
|
||||
end
|
||||
endfunction
|
||||
output wire [func(2, 3) - 1:0] w;
|
||||
output wire [func(1, 3) - 1:0] x;
|
||||
output wire [func(3, 1) - 1:0] y;
|
||||
output wire [func(5, 2) - 1:0] z;
|
||||
assign w = 1'sb1;
|
||||
assign x = 1'sb1;
|
||||
assign y = 1'sb1;
|
||||
assign z = 1'sb1;
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue