I'm still very much interested in finding out whether or not it's
possible for a Verilog function to have a boolean value as input, but
while I was waiting for input on that I decided to rewrite a version of
my Verilog code to use an (enum) instead of a (boolean). Much to my
amazement, it appears that I can't use an (enum) as an input to a
function either! I wrote the following code:
1 | module useBin ();
|
2 |
|
3 | typedef enum { ADD, MULTIPLY } binOp;
|
4 |
|
5 | function integer execOp;
|
6 | input integer left;
|
7 | input integer right;
|
8 | input binOp op;
|
9 | begin
|
10 | execOp = op == ADD ? left + right : left * right;
|
11 | end
|
12 | endfunction
|
13 |
|
14 | endmodule
|
When I ran Icarus to simulate it I got:
1 | D:\Hf\Verilog\Unpacked\Common>ive useBin
|
2 | \Icarus\bin\iverilog -g2009 -o useBin.out useBin.sv
|
3 | useBin.sv:8: syntax error
|
4 | useBin.sv:5: error: Syntax error defining function.
|
5 |
|
6 | D:\Hf\Verilog\Unpacked\Common>
|
I can kind of understand why a (boolean) might cause a problem when used
as a function input, but why in the world would it be illegal to use an
(enum) like my (binOp) as a function input?