TKGate User Documentation (Error Messages)

## C. List of Simulator Error Messages

### C.1 Run-Time Warnings/Errors

- Attempt to write to memory mem with unknown address. - Assigning a value to a memory (e.g, "`reg [7:0] mem[0:1023]`") with unknown bits in the address potentially invalidates the entire memory since there is no way of knowing which word was written to. This message informs you that such an attempt was made. The memory is not modified. This error message is not issued if the memory is completely uninitialized.
- Attempt to write to memory mem with unknown bit-range. - The bit-range given for a write to a memory contained unknown bits. For example, given the memory "`reg [7:0] mem[0:1023]`", the statement "`mem[10'h0][8'hx +: 3] = 3'b0;`" will generate this error message.
- Attempt to close non-open descriptor in task 'task'. - This error is generated when you call the `$fclose` system task with a descriptor that references files that are not open.
- Divide by zero. - A floating-point divide by zero was attempted.
- Execution of protected system task 'task' blocked. - The current security settings forbid the use of the task task. Attempts to execute that task result in issuing this error message and ignoring the system task call.
- Failed to load source file 'file'. - One of the files on the Verga command line could not be read.
- Failed to open memory file 'file'. - A file specified either through the interface or through a `$memreadb` or `$memreadh` system task could not be read.
- Illegal start value in task 'task'. - The start value in a `$readmem(b/h)` or `$writemem(b/h)` task was illegal.
- Illegal stop value in $readmemb. - The stop value in a `$readmem(b/h)` task was illegal.
- Simulation stopped on attempted execution of protected system task 'task'. - The design attempted to execute system task "task" while the current security settings are set to stop the simulation on any attempts to execute that task.
- Timing violation at line in inst[module] constrain. - This error is generated when a timing constrain specified in a `specify` block was violated. The line number in the code (line) is given with the instance name (inst), module name (module), and the constraint that was violated (constraint).

### C.2 Compile-Time Warnings

- Port size mismatch on input port 'A'. - The declared bit-size of input port "A" in the internal and external definitions of the target module do not match.
- Port size mismatch on output port 'A'. - The declared bit-size of output port "A" in the internal and external definitions of the target module do not match.
- Net 'A' has no drivers (floating net). - The net "A" has no gates that drive it to a value.
- Direct connect operator '=>' unsupported. Treated as '*>'. - A `specify` block is using the "=>" operator, but this operator not currently supported in the TkGate simulator.

### C.3 Compile-Time Errors

- Array 'mem' used in expression without index. - A variable that was defined as a memory/array such as "`reg [7:0] mem[0:1023]`" was used in an expression without an index. For example, "r = mem + 4;" would generate this error message.
- Array 'mem' used without index on left-hand-side. - A variable that was defined as a memory/array such as "`reg [7:0] mem[0:1023]`" was used in the left-hand side of an assignment without an index. For example, "mem = r;" would generate this error message.
- Auto range [*] is only valid with 'wire' declaration. - You can implicitly set the range in a wire declaration such as "`wire [*] w = 8'h0;`". This style of declaration is only valid for `wire` variables. If you attempt this type of declaration with any other variable type you will get this error.
- Bad gate instance range expression. - Primitive Verilog gates can take an bit-range to make them operate over multiple bits using the syntax "`and g1[3:0] (z,b,c);`". If the range expression `[3:0]` contains errors, this message will be produced.
- Bit-ranges on path delay specifiers unsupported. - A path delay in a `specify` block referenced individual bits in a signal. This feature is not supported by Verga.
- Delay and trigger expressions not allowed in path-delay modules. - Modules using path-delay declarations in a `specify` block can only be used to define combination logic. You can not use "`#`num" or "`@(`expr`)`" event control expressions.
- Design contains some modules with `timescale and some without. - You must use the ``timescale` directive with all modules or none of the modules.
- Event on multi-bit net 'a' can not have posedge/negedge. - You can not use the `posedge` and `negedge` keywords in a event trigger on a multi-bit signal. For example, if `a` is a multi-bit wire, then `@(posedge a)` would cause this error.
- Event wait on assign is illegal. - You attempted to use the `@(signal)` event trigger in an `assign` statement.
- Expecting identifier for argument arg of task 'task'. - You attempted to pass an expression or constant argument to a parameter of a task that requires a net be specified.
- Expression operator error in 'op'. - The operands used by op where illegal.
- Found module 'mod1' when expecting 'mod2'. - The module name specified after `module` keyword does not match the name of the module that was opened in the TkGate HDL module editor.
- Function 'func' used as task. - The identifier func was defined with the `function` keyword, but is used like a `task`.
- Hierarchical variable 'var' referenced in illegal context. - A hierarchical variable (one containing the "." character) was used in a context were they are forbidden such as in a `specify` block.
- Identifier 'a' in constant expression is not a parameter. - The non-parameter variable "a" was used in an expression that must be evaluated at compile time.
- Illegal address range on port 'p'. - The address range specified on a module port was illegal.
- Illegal address range specification 'range'. - The indicated address range was illegal.
- Illegal character (num) 'char'. - The input file contained a character that is not legal in the Verilog language.
- Illegal declaration of memory 'mem' in path-delay module - unsupported. - Modules using path-delay declarations in a `specify` block can only be used to define combination logic. Memories and register variables can not be used in such modules.
- Illegal event control expression. - The expression in an event control statement was illegal. For example "`@(4);`" will generate this error.
- Illegal redefinition of net 'net'. - The specified net was declared more than once in the same module.
- Inout connections must be net-to-net on port 'A'. - You specified an expression as the value of an `inout` port.
- Instance of undefined module 'mod'. - You attempted to include an instance of the module mod, but that module is not defined in your design.
- Invalid left-hand-side in 'assign'. - The left-hand side of an `assign` statement was illegal.
- Illegal use of '`v`' in left-hand-side of assignment. - `v` was used in a procedural assignment, but `v` is not a register type.
- Invalid left-hand-side in assignment. - The left-hand-side in a procedural assignment is invalid.
- Invalid output assignment. - An error occurred while generating an implicit `assign` statement for a module port.
- Invalid scale 'num' in `timescale declaration (must be 1, 10 or 100). - The numeric portion of the units or precision value must be a 1, 10 or 100, but a different value was used.
- Invalid syntax in `timescale declaration. - A ``timescale` directive was use with invalid syntax. A valid ``timescale` directive has the form "``timescale 1ns / 1 ns`".
- Invalid type declaration used on port 'port'. - The port port was declared with a type other than input, output or inout.
- Invalid units 'units' in `timescale declaration. - The units specified in a ``timescale` directive were illegal. The supported units are `s, ms, us, ns, ps` and `fs`.
- Loops in path-delay modules are unsupported. - Modules using path-delay declarations in a `specify` block can only be used to define combination logic. A feedback loop was detected in the module definition.
- Memories must be declared as register. - You attempted a declaration such as "`wire [7:0] mem[0:1023];`" which is illegal.
- Mixed named and unnamed ports on interface 'intf' of 'mod'. - When declaring module instance you must either use the `.`port`()` notation for all ports, or for none of the ports.
- Mixed named and unnamed parameters on interface 'intf' of 'mod'. When declaring module instance you must either use the `.`port`()` notation for all parameters, or for none of the parameters.
- More than one default: in case statement. - A case statement has more than one `default:` branch in it.
- Multiple assignment of net 'net' in path-delay module is unsupported. - Modules using path-delay declarations in a `specify` block can only be used to define combination logic. Assigning the same net more than once is not supported.
- Must specify posedge or negedge on event for A. - The `$setup`, `$hold$` and `$width` timing check tasks require that the reference event use either a `posedge` or a `negedge`. This error indicates that that keyword was missing.
- Net 'net' has no driver and is not an input in path-delay module. - Modules using path-delay declarations in a `specify` block can only be used to define combination logic. The net net is used in a path-delay module, but has no gates driving it.
- No current memory in memory file read. - A memory was loaded through the interface or through a `$memreadb` or `$memreadh` system task, but no memory was specified with the operation and there was no `@memory` declaration in the memory file.
- No matching `ifdef/`ifndef for decl declaration. - An ``endif`, ``else` or ``elseif` was found without a matching ``ifdef` or ``ifndef`.
- Non-blocking assignments to memories not implemented. - Verga only supports blocking assignments to arrays/memories using the "`=`" operator. The offending line used the "`<=`" operator to make an assignment to an array/memory.
- Non-register type used in task or function. - Tasks and functions can only declare and assign to register-type variables.
- Only input ports are allowed on functions. - A `function` was declared with ports other than `input` ports.
- Parameter 'port' is not declared as a port. - An instance of a module is passed a parameter that is not declared in the parameter list for that module. For example, "`foo #(.X(2)) f1(a,b);`" was used, but "`X`" is not declared as a parameter of `foo`.
- Parameter redefines identifier 'name'. - The variable name was defined as a `parameter`, but it has already been previously defined as something else.
- Port 'port' on interface 'intf' is not defined in module 'mod'. - A "`.`port`()`" was used in an instantiation of module mod, but port is not defined as a port on module mod.
- Port 'port' has no connections on interface 'intf' of 'mod'. - The port port defined as a port on module mod was not connected to anything when instantiating it in another module.
- Port 'port' has multiple connections on interface 'intf' of 'mod'. - Two "`.`port`()`" expressions with the same port name were used in the same module instance.
- Port count does not match definition on interface 'intf' of 'mod'. - The number of ports used in an instance of mod does not match the number of ports in the definition of mod.
- Range specification not allowed for memory reference of 'A'. - An attempt was made to reference multiple words of a memory at once. For example, a memory declared as "`reg [7:0] mem[0:1023]`" was referenced as "`mem[0:1]`".
- Redefinition of task or function 'task' in module 'mod'. - There is more than one definition of task in the module mod.
- Specified net 'net' is not a memory. - An attempt was made to read or write to net as a memory. Usually caused by the `$readmem(b/h)` or `$writemem(b/h)` system tasks.
- Syntax error. - The parser could not understand the syntax of a statement or expression.
- Task 'task' called with wrong number of arguments. - The number of arguments in a call to task does not match the number of arguments in the definition of task.
- Task 'task' can not be used in a specify block. - A task other than a constraint task such as `$setup`, `$hold` or `$width` was used in the context of a `specify` block.
- Task 'task' must be used in a specify block. - A constraint task such as `$setup`, `$hold` or `$width` was used outside the context of a `specify` block.
- Task 'task' used as function. - The identifier task was defined with the `task` keyword, but is used like a `function`.
- Too few parameter ports on instance inst. - An instance uses a parameter port list such as "`#(2, 3)`" without explicit parameter names, but the number of parameters specified is fewer than the number of parameters on the module definition.
- Too many files open in task 'task'. - Task task attempted to open a file when the maximum of 31 files are already open.
- Too many parameter ports on instance A. - An instance uses a parameter port list such as "`#(2, 3)`" without explicit parameter names, but the number of parameters specified is more than the number of parameters on the module definition.
- Top-module 'mod' not defined. - "mod" was designated as the top-module, but that module is not defined.
- Unable to open output file 'file' in task 'task'. - Task task attempted to open the file "file", but the open failed (e.g., because the user did not have write access).
- Undefined net 'net' in event control expression. - A control expression such as "`@(`net`)`" was used, but net is not defined.
- Undefined task 'task'. - An attempt was made to invoke a task that was not defined either as a system task or as a user task.
- Undefined variable 'var'. - An attempt was made to use a variable that was not defined.
- Units must be larger than precision in `timescale declaration. - The value specified as the units (the first number) in a ``timescale` must be larger than the precision (second number).
- Unsupported bit range [range] on net net (must be of form [n:0]). - Verga only supports bit ranges were 0 is the least significant bit. An attempt was made to declare a net with a unsupported bit range such as `[0:7]` or `[8:1]`.
- Unimplemented primitive gate instance type. - An attempt was made to use a Verilog primitive gate that Verga does not support such as "`tran`".
- Use of 'inout' in module with path-delay specification is unsupported. - Modules using path-delay declarations in a `specify` block can only be used to define combination logic. `inout` ports can not be used in such modules.
- Write to closed descriptor. - A system task was called that attempted to write to a descriptor that does not reference an open file.
- Wrong number of ports on primitive gate instance 'prim'. - A Verilog primitive gate was used with an incorrect number of ports. For example, an `and` was used with a single port, or a `bufif1` was used with other than three ports.