What is wrong with the syntax in this assign statement? - syntax

What is wrong with the syntax in this?
I get an error when compiling saying:
syntax error in continuous assignment
module CONTROLROM(in, out);
input wire [63:0]in;
output wire [6:0]out;
assign out = 0000000'b7;
endmodule

You are in a country where they write from right to left.
7'b0000000

Related

Operands in verilog

I am trying to implement a PID controller using Verilog, but I faced some problems in the coding.
I try to set the position as a parameter like shown in the screens shot:
but, I faced an error which I am not aware of:
Error1:-
Error (10170): Verilog HDL syntax error at Verilog1.v(16) near text: "["; expecting an operand. Check for and fix any syntax errors that appear immediately before or at the specified keyword. The Intel FPGA Knowledge Database contains many articles with specific details on how to resolve this error. Visit the Knowledge Database at https://www.altera.com/support/support-resources/knowledge-base/search.html and search for this specific error message number.
Error2:-
Error (10170): Verilog HDL syntax error at Verilog1.v(34) near text: "["; expecting "#", or an operand. Check for and fix any syntax errors that appear immediately before or at the specified keyword. The Intel FPGA Knowledge Database contains many articles with specific details on how to resolve this error. Visit the Knowledge Database at https://www.altera.com/support/support-resources/knowledge-base/search.html and search for this specific error message number.
I also tried the like integer position= [0*IRL+1000*CIR+2000*IRR];, but still, I face the same problem. How do I fix this syntax error?
After compiling, parameter values can only be read; not modified. They are runtime constants. An integer type can only be assigned within an procedural block. You can give it an initial value at declarations, but it will not auto update. So you want a procedure assignment or a net type with continuous assignment.
Square brackets ([]) are used for indexing an array or slice of a vector. They cannot be used like parentheses (()) or curly brackets ({}). In your case non are needed.
Change:
integer position= [0*IRL+1000*CIR+2000*IRR];
To:
wire [31:0] position= 0*IRL+1000*CIR+2000*IRR;
Or:
wire [31:0] position;
assign position= 0*IRL+1000*CIR+2000*IRR;
Or:
integer position;
always #* begin
position= 0*IRL+1000*CIR+2000*IRR;
end
Also change:
Proportional<= [position/IRL+CIR+IRR]-1000;
To:
Proportional<= (position/IRL+CIR+IRR)-1000;
Assuming IRL, CIR and IRR are declared as constant type (like parameter), then you should remove the square brackets:
parameter position = 0*IRL+1000*CIR+2000*IRR;

Verilog - "timescale"

Question:
I use "timescale" before module to regulate time, but Vivado tell me there is a syntax error at the first row. Please tell me the reason and what should I write?
Display from Vivado:
Error:Syntax Error near "".
Code:
'timescale 1ns/1ns
module datactl (data,in,data_ena);
output [7:0] data;
input [7:0] in;
input data_ena;
assign data = data_ena?in:8'bzzzz_zzzz;
endmodule
It looks like you used a single quote ' instead of a backtick `. A compiler directives use a backtick. Note that there's no need for the `timescale directive unless your code has #delays or specify blocks.

"Expecting a description" error in systemverilog when instantiating a class

I think my Quartus is broken, but I'm hoping for a syntax error (the semi-colons look right). I stole this exact code from here, and since it doesn't work I'm hoping somebody knows what to check in Quartus to get this to compile.
Code:
class C;
int x;
task set (int i);
x = i;
endtask
function int get;
return x;
endfunction
endclass
Error:
Error text:
Error (10170): Verilog HDL syntax error at enable_logic_tb.sv(42) near text: "class"; expecting a description. Check for and fix any syntax errors that appear immediately before or at the specified keyword. The Intel FPGA Knowledge Database contains many articles with specific details on how to resolve this error. Visit the Knowledge Database at https://www.altera.com/support/support-resources/knowledge-base/search.html and search for this specific error message number.
Quartus does not synthesize classes. The class construct is only for simulation.

"Expression Too Complex" error on simple property assignment

I'm getting (fairly reguarly) an "Error 16: Expression too complex" runtime error on a simple assigment to a property from a class.
public property PropertyName() as double
PropertyName = mvarPropertyName
end property
The debug window points to the crash being on the assignment line in the above code.
Some inital reading here and elsewhere suggested that it was related to the line calling the property. However, that now looks like this:
variableName = ObjectName.PropertyName
And all arithmetic is done with variableName.
Even more oddly, if I just hit debug, then resume/F5 immediatley, everything is fine.
Trying to use the error handling code to do this doesn't seem to have worked however.
Any ideas what is causing this error?
Stop using Not (Not MyArray) to test for uninitialized arrays. This uses a bug in the compiler that has a known side effect of destabilizing the run-time leading to "Expression too complex" on random places.
VB6 - Returning/Detecting Empty Arrays is fairly complete thread on different ways to test for empty and uninitialized arrays.
A string expression is too complicated. Strings not assigned to variables (such as those returned by functions) are assigned to temporary locations during string expression evaluation. Having a large number of these strings can cause this error. Try assigning these strings to variables and use the variables in the expression instead.

About Ruby error 'kEnd'?

I'm having a lot of trouble with Ruby after coming back to it from a long break.
I'm getting a lot of 'unexpected kEND' errors, and I've tracked it down to lines below. I'm not having trouble with a particular piece of code, but rather, the concept of 'unexpected kEND' .
if (condition)
do-one-line-thing()
and
# inside of a loop...
if ( condition-evaluation-that-might-cause-error-during-run-time )
do-something()
end
and
myarray.each { |element|
do-soemthing-that-might-cause-error-during-run-time-for-some-but-not-all-values()
}
Question :
What other things can cause these kEND errors ? It seems like kEND is being used as a general "Badness on line ##" error? What can you tell me about kEND errors in general?
an unexpected kEND is where the end keyword was found somewhere it shouldn't be.
Generally you've closed too many code blocks, or you've got some other syntax problem.
If you paste a (complete) file which has this problem we can point out the error...
There is a syntax error in the first piece of code
if (condition)
do-one-line-thing()
You always have to explicitly close the if clause with end. You cannot omit it, like you do in many other languages, even if the block consists of a single line.

Resources