Can a function take a boolean argument?

OP #6379858
Rate this post
• ▲ useful
▼ not useful
I've got a function that I'd like to behave slightly differently 
depending on the value of a boolean argument, an argument whose value 
can be either (true) or (false). I tried:
1
function automatic integer fillSubtree;
2
    input integer vrtcl;
3
    input integer hrzntl;
4
    input boolean pstve;
5
...
6
endfunction
but then when I used Icarus to simulate it, I got the error message:
1
lessThan.sv:34: syntax error
Line 34 is the line where I declare variable (pstve). Is there a way to 
pass a boolean argument to a function, or am I going to have to declare 
an (enum) that has values (true) and (false)?
Guest #6379871
Rate this post
• ▲ useful
▼ not useful
Which language? Verilog? I don't know Verilog very well, but you can 
change the order of the inputs.
1
function automatic integer fillSubtree;
2
    input integer vrtcl;
3
    input boolean pstve;
4
    input integer hrzntl;
5
...
6
endfunction
If the line of the error changes, the declaration is the problem, if the 
line stays the same, it is something else.

Is it boolean or bool?
OP #6379935
Rate this post
• ▲ useful
▼ not useful
Dussel wrote:
> Which language? Verilog? I don't know Verilog very well, but you
> can
> change the order of the inputs.function automatic integer fillSubtree;
>     input integer vrtcl;
>     input boolean pstve;
>     input integer hrzntl;
> ...
> endfunction
> If the line of the error changes, the declaration is the problem, if the
> line stays the same, it is something else.
>
> Is it boolean or bool?

Everything I've done recently has been in Verilog. I tried (bool) 
instead of (boolean); I got the same error message. I tried putting the 
(pstve) declaration first; I got the same error message.
Guest #6380538
Rate this post
• ▲ useful
▼ not useful
I think you should rather quote us the lines 30-40 of your code..

If as you said the error stays the same,
I'd assume line 34 or adjacent are indeed the culprit.
a simple unidentified typo may be all that needs to be fixed.

Sometimes a simple logical error
if you changed the function in whichever way,
make sure the calls to that functions are resolveable
(number, type and order of parameters for example)
I don't know verilog tbh.. but no matter what language,
function calls are usually strict about that,
so chances are that holds true for verilog as well, right ;)


'sid
Guest #6380837
Rate this post
• ▲ useful
▼ not useful
Okay, I isolated the problem in a little piece of code I wrote:
1
module sid ();
2

3
function integer execOp;
4
    input integer left;
5
    input integer right;
6
    input boolean add;
7
  begin
8
    execOp = op == add ? left + right : left * right;
9
  end
10
endfunction
11

12
endmodule
Then when I use Icarus to simulate it I get:
1
D:\Hf\Verilog\Unpacked\Common>\Icarus\bin\iverilog -g2009 -o sid.out sid.sv
2
sid.sv:6: syntax error
3
sid.sv:3: error: Syntax error defining function.
4

5
D:\Hf\Verilog\Unpacked\Common>
And switching the order of arguments gives:
1
module sid_sw ();
2

3
function integer execOp;
4
    input boolean add;
5
    input integer left;
6
    input integer right;
7
  begin
8
    execOp = op == add ? left + right : left * right;
9
  end
10
endfunction
11

12
endmodule
When I execute Icarus I get:
1
D:\Hf\Verilog\Unpacked\Common>\Icarus\bin\iverilog -g2009 -o sid_sw.out sid_sw.sv
2
sid_sw.sv:4: syntax error
3
sid_sw.sv:3: error: Syntax error defining function.
4

5
D:\Hf\Verilog\Unpacked\Common>
Note that the syntax error is now on line 4, so declaring a boolean 
input causes the syntax error both times. Any ideas why, anyone?
OP #6380917
Rate this post
• ▲ useful
▼ not useful
Wow, that was incredibly sloppy! Not only did I forget to log in prior 
to posting (causing me to be identified as a guest), but I also
included a variable in both source codes that was never declared. So I'm 
repeating that post with all those problems fixed.

Okay, I isolated the problem in a little piece of code I wrote:
1
module sid ();
2

3
function integer execOp;
4
    input integer left;
5
    input integer right;
6
    input boolean add;
7
  begin
8
    execOp = add ? left + right : left * right;
9
  end
10
endfunction
11

12
endmodule
Then when I use Icarus to simulate it I get:
1
D:\Hf\Verilog\Unpacked\Common>\Icarus\bin\iverilog -g2009 -o sid.out sid.sv
2
sid.sv:6: syntax error
3
sid.sv:3: error: Syntax error defining function.
4

5
D:\Hf\Verilog\Unpacked\Common>
And switching the order of arguments gives:
1
module sid_sw ();
2

3
function integer execOp;
4
    input boolean add;
5
    input integer left;
6
    input integer right;
7
  begin
8
    execOp = add ? left + right : left * right;
9
  end
10
endfunction
11

12
endmodule
When I execute Icarus I get:
1
D:\Hf\Verilog\Unpacked\Common>\Icarus\bin\iverilog -g2009 -o sid_sw.out sid_sw.sv
2
D:\Hf\Verilog\Unpacked\Common>\Icarus\bin\iverilog -g2009 -o sid_sw.out sid_sw.sv
3
sid_sw.sv:4: syntax error
4
sid_sw.sv:3: error: Syntax error defining function.
5

6
D:\Hf\Verilog\Unpacked\Common>
Note that the syntax error is now on line 4, so declaring a boolean 
input causes the syntax error both times. Any ideas why, anyone?

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.