Spelling fixes

Mostly comments, but a few format strings
This commit is contained in:
Larry Doolittle 2011-03-04 13:52:08 -08:00 committed by Stephen Williams
parent 09664bc52e
commit 76103f2167
58 changed files with 120 additions and 120 deletions

View File

@ -53,7 +53,7 @@ So, if your program doesn't compile, tell me so, tell me where the
error occurs, and include a complete Perfectly Valid Test Program(tm). error occurs, and include a complete Perfectly Valid Test Program(tm).
You tell me that it fails to compile for you, and I find that it You tell me that it fails to compile for you, and I find that it
compiles for me, then hooray I fixed it. It can happen, you compiles for me, then hooray I fixed it. It can happen, you
know. What's on my disk is more recent then the latest snapshot. know. What's on my disk is more recent than the latest snapshot.
If your program does compile, but generates incorrect output, I need If your program does compile, but generates incorrect output, I need
to know what it says and what you think it should say. From this I can to know what it says and what you think it should say. From this I can
@ -76,13 +76,13 @@ In this case, if possible include not only the sample verilog program,
but the generated netlist file(s) and a clear indication of what went but the generated netlist file(s) and a clear indication of what went
wrong. If it is not clear to me, I will ask for clarification. wrong. If it is not clear to me, I will ask for clarification.
* The Output is Correct, But Less Then Ideal * The Output is Correct, But Less Than Ideal
If the output is strictly correct, but just not good enough for If the output is strictly correct, but just not good enough for
practical use, I would like to know. These sorts of problems are practical use, I would like to know. These sorts of problems are
likely to be more subjective then a core dump, but are worthy of likely to be more subjective than a core dump, but are worthy of
consideration. However, realize that outright errors will get more consideration. However, realize that outright errors will get more
attention then missed optimizations. attention than missed optimizations.
THE MAKING OF A GOOD TEST PROGRAM THE MAKING OF A GOOD TEST PROGRAM
@ -104,7 +104,7 @@ module may not be needed as long as the ``-s <name>'' switch is
given. given.
So when you send a test case, ask yourself "Can poor overworked Steve So when you send a test case, ask yourself "Can poor overworked Steve
invoke the error without any Verilog other then what is included?" And invoke the error without any Verilog other than what is included?" And
while we are at it, please place a copyright notice in your test while we are at it, please place a copyright notice in your test
program and include a GPL license statement if you can. Your test program and include a GPL license statement if you can. Your test
program may find its way into the test suite, and the notices will program may find its way into the test suite, and the notices will

View File

@ -21,7 +21,7 @@ SHELL = /bin/sh
# This string is used as an installation suffix. It modifies certain # This string is used as an installation suffix. It modifies certain
# key install paths/files such that a build and install of Icarus Verilog # key install paths/files such that a build and install of Icarus Verilog
# with the same $(prefix) but a different $(suffix) will not interfere. # with the same $(prefix) but a different $(suffix) will not interfere.
# The normal configuratin leaves suffix empty # The normal configuration leaves suffix empty
suffix = @install_suffix@ suffix = @install_suffix@
prefix = @prefix@ prefix = @prefix@

View File

@ -885,7 +885,7 @@ void cprop_functor::lpm_mux(Design*des, NetMux*obj)
/* Otherwise, we cannot accurately do a substitution. If /* Otherwise, we cannot accurately do a substitution. If
one input is non-constant, then that input may have a one input is non-constant, then that input may have a
HiZ value, and there is no Verilog logic other then a HiZ value, and there is no Verilog logic other than a
MUX that can pass a HiZ value. */ MUX that can pass a HiZ value. */
flag = false; flag = false;
} }

View File

@ -28,10 +28,10 @@ extern const char*base;
extern char* iconfig_path; extern char* iconfig_path;
extern char* iconfig_common_path; extern char* iconfig_common_path;
/* Ths is the optional -M<dependfile> value, if one was supplied. */ /* This is the optional -M<dependfile> value, if one was supplied. */
extern const char*depfile; extern const char*depfile;
/* Ths is the optional -N<path> value, if one was supplied. */ /* This is the optional -N<path> value, if one was supplied. */
extern const char*npath; extern const char*npath;
/* This is the name of the output file that the user selected. */ /* This is the name of the output file that the user selected. */

View File

@ -184,7 +184,7 @@ implies the synthesis \fB-S\fP flag.
.SH "WARNING TYPES" .SH "WARNING TYPES"
These are the types of warnings that can be selected by the \fB-W\fP These are the types of warnings that can be selected by the \fB-W\fP
switch. All the warning types (other then \fBall\fP) can also be switch. All the warning types (other than \fBall\fP) can also be
prefixed with \fBno-\fP to turn off that warning. This is most useful prefixed with \fBno-\fP to turn off that warning. This is most useful
after a \fB-Wall\fP argument to suppress isolated warning types. after a \fB-Wall\fP argument to suppress isolated warning types.

View File

@ -81,7 +81,7 @@ NetNet* PEConcat::elaborate_anet(Design*des, NetScope*scope) const
concat operator from least significant to most significant, concat operator from least significant to most significant,
which is opposite from how they are given in the list. which is opposite from how they are given in the list.
Allow for a repeat count other then 1 by repeating the Allow for a repeat count other than 1 by repeating the
connect loop as many times as necessary. */ connect loop as many times as necessary. */
NetNet*osig = new NetNet(scope, scope->local_symbol(), NetNet*osig = new NetNet(scope, scope->local_symbol(),

View File

@ -192,7 +192,7 @@ NetNet* PEBinary::elaborate_net_add_(Design*des, NetScope*scope,
/* The owidth is the output width of the lpm_add_sub /* The owidth is the output width of the lpm_add_sub
device. If the desired width is greater then the width of device. If the desired width is greater than the width of
the operands, then widen the adder and let code below pad the operands, then widen the adder and let code below pad
the operands. If this is an adder, we can take advantage of the operands. If this is an adder, we can take advantage of
the carry bit. */ the carry bit. */
@ -735,7 +735,7 @@ NetNet* PEBinary::elaborate_net_cmp_(Design*des, NetScope*scope,
/* /*
* Elaborate a divider gate. This function create a NetDivide gate * Elaborate a divider gate. This function create a NetDivide gate
* which has exactly the right sized DataA, DataB and Result ports. If * which has exactly the right sized DataA, DataB and Result ports. If
* the l-value is wider then the result, then pad. * the l-value is wider than the result, then pad.
*/ */
NetNet* PEBinary::elaborate_net_div_(Design*des, NetScope*scope, NetNet* PEBinary::elaborate_net_div_(Design*des, NetScope*scope,
unsigned lwidth, unsigned lwidth,
@ -789,7 +789,7 @@ NetNet* PEBinary::elaborate_net_div_(Design*des, NetScope*scope,
// Make an output signal that is the width of the l-value. // Make an output signal that is the width of the l-value.
// Due to above calculation of rwidth, we know that the result // Due to above calculation of rwidth, we know that the result
// will be no more then the l-value, so it is safe to connect // will be no more than the l-value, so it is safe to connect
// all the result pins to the osig. // all the result pins to the osig.
NetNet*osig = new NetNet(scope, scope->local_symbol(), NetNet*osig = new NetNet(scope, scope->local_symbol(),
@ -801,7 +801,7 @@ NetNet* PEBinary::elaborate_net_div_(Design*des, NetScope*scope,
connect(div->pin_Result(idx), osig->pin(idx)); connect(div->pin_Result(idx), osig->pin(idx));
// If the lvalue is larger then the result, then pad the // If the lvalue is larger than the result, then pad the
// output with constant 0. This can happen for example in // output with constant 0. This can happen for example in
// cases like this: // cases like this:
// wire [3;0] a, b; // wire [3;0] a, b;
@ -859,7 +859,7 @@ NetNet* PEBinary::elaborate_net_mod_(Design*des, NetScope*scope,
for (unsigned idx = 0 ; idx < cnt ; idx += 1) for (unsigned idx = 0 ; idx < cnt ; idx += 1)
connect(mod->pin_Result(idx), osig->pin(idx)); connect(mod->pin_Result(idx), osig->pin(idx));
/* If the lvalue is larger then the result, then pad the /* If the lvalue is larger than the result, then pad the
output with constant 0. */ output with constant 0. */
if (cnt < osig->pin_count()) { if (cnt < osig->pin_count()) {
NetConst*tmp = new NetConst(scope, scope->local_symbol(), NetConst*tmp = new NetConst(scope, scope->local_symbol(),
@ -1030,7 +1030,7 @@ NetNet* PEBinary::elaborate_net_mul_(Design*des, NetScope*scope,
for (unsigned idx = 0 ; idx < cnt ; idx += 1) for (unsigned idx = 0 ; idx < cnt ; idx += 1)
connect(mult->pin_Result(idx), osig->pin(idx)); connect(mult->pin_Result(idx), osig->pin(idx));
/* If the lvalue is larger then the result, then pad the /* If the lvalue is larger than the result, then pad the
output with constant 0. */ output with constant 0. */
if (cnt < osig->pin_count()) { if (cnt < osig->pin_count()) {
NetConst*tmp = new NetConst(scope, scope->local_symbol(), NetConst*tmp = new NetConst(scope, scope->local_symbol(),
@ -1235,7 +1235,7 @@ NetNet* PECallFunction::elaborate_net(Design*des, NetScope*scope,
NetScope*dscope = def->scope(); NetScope*dscope = def->scope();
assert(dscope); assert(dscope);
/* This must be a ufuction that returns a signal. */ /* This must be a function that returns a signal. */
assert(def->return_sig()); assert(def->return_sig());
/* check the validity of the parameters. */ /* check the validity of the parameters. */
@ -1418,7 +1418,7 @@ NetNet* PEConcat::elaborate_net(Design*des, NetScope*scope,
concat operator from least significant to most significant, concat operator from least significant to most significant,
which is opposite from how they are given in the list. which is opposite from how they are given in the list.
Allow for a repeat count other then 1 by repeating the Allow for a repeat count other than 1 by repeating the
connect loop as many times as necessary. */ connect loop as many times as necessary. */
NetNet*osig = new NetNet(scope, scope->local_symbol(), NetNet*osig = new NetNet(scope, scope->local_symbol(),
@ -1634,7 +1634,7 @@ NetNet* PEIdent::elaborate_net(Design*des, NetScope*scope,
with the sig type. with the sig type.
Be careful to check the bit ordering. If the msb is Be careful to check the bit ordering. If the msb is
less significant then the msb, then the source is less significant than the msb, then the source is
broken. I can hack it in order to go on, but report broken. I can hack it in order to go on, but report
an error. */ an error. */
@ -2273,7 +2273,7 @@ NetNet* PETernary::elaborate_net(Design*des, NetScope*scope,
assert(expr_sig->pin_count() == 1); assert(expr_sig->pin_count() == 1);
/* This is the width of the LPM_MUX device that I'm about to /* This is the width of the LPM_MUX device that I'm about to
create. It may be smaller then the desired output, but I'll create. It may be smaller than the desired output, but I'll
handle padding below. handle padding below.
Create a NetNet object wide enough to hold the Create a NetNet object wide enough to hold the

View File

@ -243,7 +243,7 @@ bool Module::elaborate_scope(Design*des, NetScope*scope) const
} }
// Scan through all the named events in this scope. We do not // Scan through all the named events in this scope. We do not
// need anything more then the current scope to do this // need anything more than the current scope to do this
// elaboration, so do it now. This allows for normal // elaboration, so do it now. This allows for normal
// elaboration to reference these events. // elaboration to reference these events.

View File

@ -257,7 +257,7 @@ void PGAssign::elaborate(Design*des, NetScope*scope) const
assert(lval && rval); assert(lval && rval);
/* If the r-value insists on being smaller then the l-value /* If the r-value insists on being smaller than the l-value
(perhaps it is explicitly sized) the pad it out to be the (perhaps it is explicitly sized) the pad it out to be the
right width so that something is connected to all the bits right width so that something is connected to all the bits
of the l-value. */ of the l-value. */
@ -286,7 +286,7 @@ void PGBuiltin::elaborate(Design*des, NetScope*scope) const
name = scope->local_symbol(); name = scope->local_symbol();
/* If the Verilog source has a range specification for the /* If the Verilog source has a range specification for the
gates, then I am expected to make more then one gates, then I am expected to make more than one
gate. Figure out how many are desired. */ gate. Figure out how many are desired. */
if (msb_) { if (msb_) {
NetExpr*msb_exp = elab_and_eval(des, scope, msb_); NetExpr*msb_exp = elab_and_eval(des, scope, msb_);
@ -1640,7 +1640,7 @@ NetProc* PCondit::elaborate(Design*des, NetScope*scope) const
} }
} }
// If the condition expression is more then 1 bits, then // If the condition expression is more than 1 bits, then
// generate a comparison operator to get the result down to // generate a comparison operator to get the result down to
// one bit. Turn <e> into <e> != 0; // one bit. Turn <e> into <e> != 0;
@ -2260,7 +2260,7 @@ NetProc* PEventStatement::elaborate_wait(Design*des, NetScope*scope,
return 0; return 0;
} }
// If the condition expression is more then 1 bits, then // If the condition expression is more than 1 bits, then
// generate a reduction operator to get the result down to // generate a reduction operator to get the result down to
// one bit. In other words, Turn <e> into |<e>; // one bit. In other words, Turn <e> into |<e>;

View File

@ -686,7 +686,7 @@ NetEConst* NetEBComp::eval_tree()
case '<': // Less than case '<': // Less than
return eval_less_(); return eval_less_();
case '>': // Greater then case '>': // Greater than
return eval_gt_(); return eval_gt_();
default: default:

View File

@ -26,7 +26,7 @@
* iverilog -tpal -ppart=generic-22v10-plcc -opal_reg.jed pal_reg.v * iverilog -tpal -ppart=generic-22v10-plcc -opal_reg.jed pal_reg.v
* *
* The output file name (passed through the -o<file> switch) can be * The output file name (passed through the -o<file> switch) can be
* any file you desire. If the compilation and fittin all succeed, the * any file you desire. If the compilation and fitting all succeed, the
* output file will be a JEDEC file that you can take to your favorite * output file will be a JEDEC file that you can take to your favorite
* PROM programmer to program the part. * PROM programmer to program the part.
* *
@ -45,7 +45,7 @@
* *
* The output drivers are controlled by a single active low output * The output drivers are controlled by a single active low output
* enable. I used bufif0 devices in this example, but the exact same * enable. I used bufif0 devices in this example, but the exact same
* thing can be achived with a continuous assignment like so: * thing can be achieved with a continuous assignment like so:
* *
* assign out = oe? 8'hzz : Q; * assign out = oe? 8'hzz : Q;
* *
@ -76,7 +76,7 @@ endmodule
* a PLCC package. * a PLCC package.
* *
* Note that this module has no logic in it. It is a convention I use * Note that this module has no logic in it. It is a convention I use
* that I put all the functionality in a seperate module (seen above) * that I put all the functionality in a separate module (seen above)
* and isolate the Icarus Verilog specific $attribute madness into a * and isolate the Icarus Verilog specific $attribute madness into a
* top-level module. The advantage of this style is that the entire * top-level module. The advantage of this style is that the entire
* module can be `ifdef'ed out when doing simulation and you don't * module can be `ifdef'ed out when doing simulation and you don't

View File

@ -63,7 +63,7 @@
* *
* The $dumpvars task tells the simulation what variables to write to * The $dumpvars task tells the simulation what variables to write to
* the VCD output. The first parameter is how far to descend while * the VCD output. The first parameter is how far to descend while
* scanning a scope, and the remaining paramters are signals or scope * scanning a scope, and the remaining parameters are signals or scope
* names to include in the dump. If a scope name is given, all the * names to include in the dump. If a scope name is given, all the
* signals within the scope are dumped. If a wire or register name is * signals within the scope are dumped. If a wire or register name is
* given, that signal is included. * given, that signal is included.

View File

@ -20,7 +20,7 @@
*/ */
/* /*
* This module is a synthesizeable square-root function. It is also a * This module is a synthesizable square-root function. It is also a
* detailed example of how to target Xilinx Virtex parts using * detailed example of how to target Xilinx Virtex parts using
* Icarus Verilog. In fact, for no particular reason other than to * Icarus Verilog. In fact, for no particular reason other than to
* be excessively specific, I will step through the process of * be excessively specific, I will step through the process of
@ -30,7 +30,7 @@
* In addition to Icarus Verilog, you will need implementation * In addition to Icarus Verilog, you will need implementation
* software from Xilinx. As of this writing, this example was tested * software from Xilinx. As of this writing, this example was tested
* with Foundation 4.2i, but it should work the same with ISE and * with Foundation 4.2i, but it should work the same with ISE and
* Webpack software. * WebPACK software.
* *
* This example source contains all the Verilog needed to do * This example source contains all the Verilog needed to do
* everything described below. We use conditional compilation to * everything described below. We use conditional compilation to
@ -55,7 +55,7 @@
* "PASSED" and finishes the simulation. * "PASSED" and finishes the simulation.
* *
* When you take a close look at the "main" module below, you will see * When you take a close look at the "main" module below, you will see
* that it uses Verilog constructs that are not synthesizeable. This * that it uses Verilog constructs that are not synthesizable. This
* is fine, as we will never try to synthesize it. * is fine, as we will never try to synthesize it.
* *
* LIBRARY PARTS * LIBRARY PARTS
@ -78,7 +78,7 @@
* Without any preprocessor directives, the only module is the sqrt32 * Without any preprocessor directives, the only module is the sqrt32
* module, so sqrt32 is compiled as the root. The ports of the module * module, so sqrt32 is compiled as the root. The ports of the module
* are automatically made into ports of the sqrt32.edf netlist, and * are automatically made into ports of the sqrt32.edf netlist, and
* the contents of the sqrt32 module are connected approprately. * the contents of the sqrt32 module are connected appropriately.
* *
* COMPLETE CHIP DESIGNS * COMPLETE CHIP DESIGNS
* *
@ -154,7 +154,7 @@
* *
* The POST_MAP compiler directive causes the GSR manipulations * The POST_MAP compiler directive causes the GSR manipulations
* included in the test bench to be compiled in, to simulate the chip * included in the test bench to be compiled in, to simulate the chip
* startup. Other then that, the test bench runs the post-map design * startup. Other than that, the test bench runs the post-map design
* the same way the pre-synthesis design works. * the same way the pre-synthesis design works.
* *
* Run this design with the command: * Run this design with the command:
@ -183,7 +183,7 @@
* where sqrt(y) is the exact square root of y and floor(N) is the * where sqrt(y) is the exact square root of y and floor(N) is the
* largest integer <= N. * largest integer <= N.
* *
* For 32bit numbers, this will never run more then 16 iterations, * For 32bit numbers, this will never run more than 16 iterations,
* which amounts to 16 clocks. * which amounts to 16 clocks.
*/ */

View File

@ -50,7 +50,7 @@
* where sqrt(y) is the exact square root of y and floor(N) is the * where sqrt(y) is the exact square root of y and floor(N) is the
* largest integer <= N. * largest integer <= N.
* *
* For 32bit numbers, this will never run more then 16 iterations, * For 32bit numbers, this will never run more than 16 iterations,
* which amounts to 16 clocks. * which amounts to 16 clocks.
*/ */

View File

@ -249,7 +249,7 @@ exactly the same so far as the compiler is concerned.
Unfortunately, Cadence seems to feel otherwise. In particular, it has Unfortunately, Cadence seems to feel otherwise. In particular, it has
been reported that although {1'b0, 16} causes an error, {1'b0, 15+1} been reported that although {1'b0, 16} causes an error, {1'b0, 15+1}
is accepted. Further testing shows that any expression other then a is accepted. Further testing shows that any expression other than a
simple unsized constant is accepted there, even if all the operands of simple unsized constant is accepted there, even if all the operands of
all the operators that make up the expression are unsized integers. all the operators that make up the expression are unsized integers.
@ -282,12 +282,12 @@ One might note that the quote from section 4.1.14 says "Unsized
expressions...", so arguably accepting (15+1) or even (16+0) as an expressions...", so arguably accepting (15+1) or even (16+0) as an
operand to a concatenation is not a violation of the letter of the operand to a concatenation is not a violation of the letter of the
law. However, the very next sentence of the quote expresses the law. However, the very next sentence of the quote expresses the
intent, and accepting (15+1) as having a more defined size then (16) intent, and accepting (15+1) as having a more defined size than (16)
seems to be a violation of that intent. seems to be a violation of that intent.
Whatever a compiler decides the size is, the user has no way to Whatever a compiler decides the size is, the user has no way to
predict it, and the compiler should not have the right to treat (15+1) predict it, and the compiler should not have the right to treat (15+1)
any differently then (16). Therefore, Icarus Verilog takes the any differently than (16). Therefore, Icarus Verilog takes the
position that such expressions are *unsized* and are not allowed as position that such expressions are *unsized* and are not allowed as
operands to concatenations. Icarus Verilog will in general assume that operands to concatenations. Icarus Verilog will in general assume that
operations on unsized numbers produce unsized results. There are operations on unsized numbers produce unsized results. There are

View File

@ -650,7 +650,7 @@ extern const char* ivl_udp_name(ivl_udp_t net);
* ivl_lpm_decode * ivl_lpm_decode
* Return the DECODER associated with this LPM_FF device. The * Return the DECODER associated with this LPM_FF device. The
* decoder for a FF takes an input address and generates an enable * decoder for a FF takes an input address and generates an enable
* input for no more then 1 bit (can be none) of the FF device. * input for no more than 1 bit (can be none) of the FF device.
* *
* ivl_lpm_q * ivl_lpm_q
* Return the output data nexus for device types that have a single * Return the output data nexus for device types that have a single
@ -985,7 +985,7 @@ extern ivl_expr_t ivl_parameter_expr(ivl_parameter_t net);
* ivl_scope_children * ivl_scope_children
* A scope may in turn contain other scopes. This method iterates * A scope may in turn contain other scopes. This method iterates
* through all the child scopes of a given scope. If the function * through all the child scopes of a given scope. If the function
* returns any value other then 0, the iteration stops and the * returns any value other than 0, the iteration stops and the
* method returns that value. Otherwise, iteration continues until * method returns that value. Otherwise, iteration continues until
* the children run out. * the children run out.
* *
@ -1212,7 +1212,7 @@ extern ivl_statement_type_t ivl_statement_type(ivl_statement_t net);
/* /*
* The following functions retrieve specific single values from the * The following functions retrieve specific single values from the
* statement. These values are the bits of data and parameters that * statement. These values are the bits of data and parameters that
* make up the statement. Many of these functions apply to more then * make up the statement. Many of these functions apply to more than
* one type of statement, so the comment in front of them tells which * one type of statement, so the comment in front of them tells which
* statement types can be passed to the function. * statement types can be passed to the function.
* *

View File

@ -593,7 +593,7 @@ static void do_define()
} }
/* Detect the continuation sequence. If I find it, remove it /* Detect the continuation sequence. If I find it, remove it
and the white space that preceeds it, then replace all that and the white space that precedes it, then replace all that
with a single newline. */ with a single newline. */
if ((cp > yytext) && (cp[-1] == '\\')) { if ((cp > yytext) && (cp[-1] == '\\')) {

View File

@ -681,7 +681,7 @@ static verinum*make_unsized_dec(const char*ptr)
if (ptr[0] == '\'') { if (ptr[0] == '\'') {
/* The number has decorations of the form 'sd<digits>, /* The number has decorations of the form 'sd<digits>,
possibly with space between the d and the <digits>. possibly with space between the d and the <digits>.
Also, the 's' is optional, and markes the number as Also, the 's' is optional, and marks the number as
signed. */ signed. */
ptr += 1; ptr += 1;

View File

@ -49,7 +49,7 @@ handle acc_next(PLI_INT32 *type, handle scope, handle prev)
/* /*
* The acc_next_* functions need to be reentrant, so we need to * The acc_next_* functions need to be reentrant, so we need to
* rescan all the items upto the previous one, then return * rescan all the items up to the previous one, then return
* the next one. * the next one.
*/ */
iter = vpi_iterate(vpiScope, scope); // ICARUS extension iter = vpi_iterate(vpiScope, scope); // ICARUS extension

View File

@ -21,7 +21,7 @@
#include <acc_user.h> #include <acc_user.h>
/* /*
* tf_getinstance implemented using equvalent acc_ routing * tf_getinstance implemented using equivalent acc_ routing
*/ */
char *tf_getcstringp(int n) char *tf_getcstringp(int n)
{ {

View File

@ -29,7 +29,7 @@
extern char* __acc_newstring(const char*txt); extern char* __acc_newstring(const char*txt);
/* /*
* Trace file for loggint ACC and TF calls. * Trace file for logging ACC and TF calls.
*/ */
FILE* pli_trace; FILE* pli_trace;

View File

@ -20,7 +20,7 @@
/* /*
* Contains the routines required to implement veriusertfs routines * Contains the routines required to implement veriusertfs routines
* via VPI. This is extremly ugly, so don't look after eating dinner. * via VPI. This is extremely ugly, so don't look after eating dinner.
*/ */
# include <string.h> # include <string.h>

View File

@ -662,7 +662,7 @@ int main(int argc, char*argv[])
des->set_flags(flags); des->set_flags(flags);
/* Done iwth all the pform data. Delete the modules. */ /* Done with all the pform data. Delete the modules. */
for (map<perm_string,Module*>::iterator idx = pform_modules.begin() for (map<perm_string,Module*>::iterator idx = pform_modules.begin()
; idx != pform_modules.end() ; idx ++) { ; idx != pform_modules.end() ; idx ++) {

View File

@ -71,7 +71,7 @@ The msys package is available from the mingw download site. This is
not the compiler but a collection of *nix tools ported to Windows and not the compiler but a collection of *nix tools ported to Windows and
wrapped in a convenient installer. The msys package is all the various wrapped in a convenient installer. The msys package is all the various
basic tools (shells, file utils, etc) and the msysDTK is extra basic tools (shells, file utils, etc) and the msysDTK is extra
developer tools other then the compiler. developer tools other than the compiler.
Download the msys-1.x.x.exe and msysdtc-1.x.x.exe binaries. These are Download the msys-1.x.x.exe and msysdtc-1.x.x.exe binaries. These are
self-installing packages. Install msys first, and then msysDTC. Most self-installing packages. Install msys first, and then msysDTC. Most
@ -91,7 +91,7 @@ commands below.
The obvious step 2, then, is install the mingw compilers. These can be The obvious step 2, then, is install the mingw compilers. These can be
found at the web page <http://www.mingw.org>. The Mingw-5.x.x package found at the web page <http://www.mingw.org>. The Mingw-5.x.x package
is a convenient remote installer. Download this program and run is a convenient remote installer. Download this program and run
it. The installer will ask wich components you want to install. You it. The installer will ask which components you want to install. You
need only the base C compiler and the C++ compiler. (You may install need only the base C compiler and the C++ compiler. (You may install
other languages if you wish.) other languages if you wish.)
@ -150,7 +150,7 @@ You will need these gnuwin32 packages to compile Icarus Verilog:
I suggest creating a common directory for holding all your gnuwin32 I suggest creating a common directory for holding all your gnuwin32
packages. I use C:\gnuwin32. The download page at the gnuwin32 site packages. I use C:\gnuwin32. The download page at the gnuwin32 site
has a "setup" link for each of these packages. Click the setup to has a "setup" link for each of these packages. Click the setup to
download the installer for each of the desired programes, then execute download the installer for each of the desired programs, then execute
the downloaded .exe files to invoke the installer. Install into the the downloaded .exe files to invoke the installer. Install into the
c:\gunwin32 directory. c:\gunwin32 directory.

View File

@ -208,7 +208,7 @@ NexusSet* NetAssignBase::nex_input(bool rem_out)
{ {
NexusSet*result = rval_->nex_input(rem_out); NexusSet*result = rval_->nex_input(rem_out);
/* It is possible that the lval_ can hav nex_input values. In /* It is possible that the lval_ can have nex_input values. In
particular, index expressions are statement inputs as well, particular, index expressions are statement inputs as well,
so should be addressed here. */ so should be addressed here. */
for (NetAssign_*cur = lval_ ; cur ; cur = cur->more) { for (NetAssign_*cur = lval_ ; cur ; cur = cur->more) {

View File

@ -149,7 +149,7 @@ void NetPDelay::nex_output(NexusSet&out)
/* /*
* For the purposes of synthesis, system task calls have no output at * For the purposes of synthesis, system task calls have no output at
* all. This is OK because most system tasks are not synthesizeable in * all. This is OK because most system tasks are not synthesizable in
* the first place. * the first place.
*/ */
void NetSTask::nex_output(NexusSet&out) void NetSTask::nex_output(NexusSet&out)

View File

@ -548,7 +548,7 @@ class NetCLShift : public NetNode {
* This class supports the LPM_COMPARE device. * This class supports the LPM_COMPARE device.
* *
* The width of the device is the width of the inputs. If one of the * The width of the device is the width of the inputs. If one of the
* inputs is narrower then the other, it is up to the generator to * inputs is narrower than the other, it is up to the generator to
* make sure all the data pins are properly driven. * make sure all the data pins are properly driven.
* *
* NOTE: This is not the same as the device used to support case * NOTE: This is not the same as the device used to support case
@ -919,7 +919,7 @@ class NetMemory {
* EDIF LPM Version 2 1 0 standard. It is used as a structural * EDIF LPM Version 2 1 0 standard. It is used as a structural
* implementation of the * operator. The device has inputs DataA and * implementation of the * operator. The device has inputs DataA and
* DataB that can have independent widths, as can the result. If the * DataB that can have independent widths, as can the result. If the
* result is smaller then the widths of a and b together, then the * result is smaller than the widths of a and b together, then the
* device drops the least significant bits of the product. * device drops the least significant bits of the product.
*/ */
class NetMult : public NetNode { class NetMult : public NetNode {
@ -1389,7 +1389,7 @@ class NetLogic : public NetNode {
/* /*
* The UDP is a User Defined Primitive from the Verilog source. Do not * The UDP is a User Defined Primitive from the Verilog source. Do not
* expand it out any further then this in the netlist, as this can be * expand it out any further than this in the netlist, as this can be
* used to represent target device primitives. * used to represent target device primitives.
* *
* The UDP can be combinational or sequential. The sequential UDP * The UDP can be combinational or sequential. The sequential UDP
@ -1411,7 +1411,7 @@ class NetLogic : public NetNode {
* N -- (1x) * N -- (1x)
* *
* It also takes one of the following glob letters to represent more * It also takes one of the following glob letters to represent more
* then one item. * than one item.
* *
* p -- 01, 0x or x1 // check this with the lexer * p -- 01, 0x or x1 // check this with the lexer
* n -- 10, 1x or x0 // check this with the lexer * n -- 10, 1x or x0 // check this with the lexer
@ -1424,7 +1424,7 @@ class NetLogic : public NetNode {
* SEQUENTIAL * SEQUENTIAL
* These objects have a single bit of memory. The logic table includes * These objects have a single bit of memory. The logic table includes
* an entry for the current value, and allows edges on the inputs. In * an entry for the current value, and allows edges on the inputs. In
* canonical form, inly then entries that generate 0, 1 or - (no change) * canonical form, only the entries that generate 0, 1 or - (no change)
* are listed. * are listed.
* *
* COMBINATIONAL * COMBINATIONAL
@ -2596,8 +2596,8 @@ class NetProcTop : public LineInfo, public Attrib {
* % -- Arithmetic modulus * % -- Arithmetic modulus
* & -- Bit-wise AND * & -- Bit-wise AND
* | -- Bit-wise OR * | -- Bit-wise OR
* < -- Less then * < -- Less than
* > -- Greater then * > -- Greater than
* e -- Logical equality (==) * e -- Logical equality (==)
* E -- Case equality (===) * E -- Case equality (===)
* L -- Less or equal * L -- Less or equal
@ -2717,8 +2717,8 @@ class NetEBBits : public NetEBinary {
* this case the bit width of the expression is 1 bit, and the * this case the bit width of the expression is 1 bit, and the
* operands take their natural widths. The supported operators are: * operands take their natural widths. The supported operators are:
* *
* < -- Less then * < -- Less than
* > -- Greater then * > -- Greater than
* e -- Logical equality (==) * e -- Logical equality (==)
* E -- Case equality (===) * E -- Case equality (===)
* L -- Less or equal (<=) * L -- Less or equal (<=)

View File

@ -1548,7 +1548,7 @@ module_port_list_opt
| { $$ = 0; } | { $$ = 0; }
; ;
/* Module declarations include optional ANSII style module parameter /* Module declarations include optional ANSI style module parameter
ports. These are simply advance ways to declare parameters, so ports. These are simply advance ways to declare parameters, so
that the port declarations may use them. */ that the port declarations may use them. */
module_parameter_port_list_opt module_parameter_port_list_opt

View File

@ -365,7 +365,7 @@ static void process_udp_table(PUdp*udp, list<string>*table,
placed in the PUdp object. placed in the PUdp object.
The table strings are made up by the parser to be two or The table strings are made up by the parser to be two or
three substrings seperated by ';', i.e.: three substrings separated by ';', i.e.:
0101:1:1 (synchronous device entry) 0101:1:1 (synchronous device entry)
0101:0 (combinational device entry) 0101:0 (combinational device entry)

View File

@ -871,7 +871,7 @@ bool NetCase::synth_async(Design*des, NetScope*scope, bool sync_flag,
/* If after all this is an unspecified case, then get the /* If after all this is an unspecified case, then get the
input from the synchronous output. Note that we know input from the synchronous output. Note that we know
by design that there is no relevent default or accum by design that there is no relevant default or accum
input to use here, as those cases are handled above. */ input to use here, as those cases are handled above. */
if (statement_map[item] == 0) { if (statement_map[item] == 0) {
@ -2076,7 +2076,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope,
/* XXXX I really should find a way to check that the /* XXXX I really should find a way to check that the
edge used on the reset input is correct. This would edge used on the reset input is correct. This would
involve interpreting the exression that is fed by the involve interpreting the expression that is fed by the
reset expression. */ reset expression. */
//assert(ev->edge() == NetEvProbe::POSEDGE); //assert(ev->edge() == NetEvProbe::POSEDGE);
@ -2231,7 +2231,7 @@ bool NetCondit::synth_sync(Design*des, NetScope*scope,
} }
/* Detect the case that this is a *synchronous* set/reset. It /* Detect the case that this is a *synchronous* set/reset. It
is not asyncronous because we know the condition is not is not asynchronous because we know the condition is not
included in the sensitivity list, but if the if_ case is included in the sensitivity list, but if the if_ case is
constant (has no inputs) then we can model this as a constant (has no inputs) then we can model this as a
synchronous set/reset. synchronous set/reset.
@ -2402,7 +2402,7 @@ bool NetEvWait::synth_sync(Design*des, NetScope*scope,
<< endl; << endl;
} }
/* This can't be other then one unless there are named events, /* This can't be other than one unless there are named events,
which I cannot synthesize. */ which I cannot synthesize. */
assert(nevents_ == 1); assert(nevents_ == 1);
NetEvent*ev = events_[0]; NetEvent*ev = events_[0];

View File

@ -77,7 +77,7 @@ struct device_s {
* Return the device_t cookie given the name of the architecture. If * Return the device_t cookie given the name of the architecture. If
* the device is not found, return 0. * the device is not found, return 0.
* *
* This function is used if the user specifies the archetecture * This function is used if the user specifies the architecture
* explicitly, with the -parch=name flag. * explicitly, with the -parch=name flag.
*/ */
extern device_t device_from_arch(const char*arch); extern device_t device_from_arch(const char*arch);

View File

@ -69,7 +69,7 @@ struct device_s {
* Return the device_t cookie given the name of the architecture. If * Return the device_t cookie given the name of the architecture. If
* the device is not found, return 0. * the device is not found, return 0.
* *
* This function is used if the user specifies the archetecture * This function is used if the user specifies the architecture
* explicitly, with the -parch=name flag. * explicitly, with the -parch=name flag.
*/ */
extern device_t device_from_arch(const char*arch); extern device_t device_from_arch(const char*arch);

View File

@ -160,7 +160,7 @@ device pins are connected.
.SH EXAMPLES .SH EXAMPLES
.TB 8 .TB 8
.I COMPILING WITH XILINX FOUNDATION/iSE .I COMPILING WITH XILINX FOUNDATION/ISE
Compile a single-file design with command line tools like so: Compile a single-file design with command line tools like so:
.nf .nf

View File

@ -212,7 +212,7 @@ unsigned long verinum::as_ulong() const
* *
* If the value is undefined, return 0. * If the value is undefined, return 0.
* *
* This function presumes that the native format is 2s compliment * This function presumes that the native format is 2s complement
* (pretty safe these days) and masks/sets bits accordingly. If the * (pretty safe these days) and masks/sets bits accordingly. If the
* value is too large for the native form, it truncates the high bits. * value is too large for the native form, it truncates the high bits.
*/ */

View File

@ -279,7 +279,7 @@ struct lxt2_wr_symbol * lxt2_wr_symbol_add(struct lxt2_wr_trace *lt, const char
struct lxt2_wr_symbol * lxt2_wr_symbol_alias(struct lxt2_wr_trace *lt, const char *existing_name, const char *alias, int msb, int lsb); struct lxt2_wr_symbol * lxt2_wr_symbol_alias(struct lxt2_wr_trace *lt, const char *existing_name, const char *alias, int msb, int lsb);
void lxt2_wr_symbol_bracket_stripping(struct lxt2_wr_trace *lt, int doit); void lxt2_wr_symbol_bracket_stripping(struct lxt2_wr_trace *lt, int doit);
/* each granule is LXT2_WR_GRANULE_SIZE (32 or 64) timesteps, default is 256 per section */ /* each granule is LXT2_WR_GRANULE_SIZE (32 or 64) time steps, default is 256 per section */
void lxt2_wr_set_maxgranule(struct lxt2_wr_trace *lt, unsigned int maxgranule); void lxt2_wr_set_maxgranule(struct lxt2_wr_trace *lt, unsigned int maxgranule);
/* time ops */ /* time ops */

View File

@ -184,7 +184,7 @@ static void format_time(unsigned mcd, int fsize,
/* This is the number of characters to the right of the /* This is the number of characters to the right of the
decimal point. This is defined completely by the decimal point. This is defined completely by the
timeformat. It is legal for the precision to be larger then timeformat. It is legal for the precision to be larger than
the units, and in this case there will be no fraction_chars the units, and in this case there will be no fraction_chars
at all. */ at all. */
fraction_chars = timeformat_info.units - format_precision; fraction_chars = timeformat_info.units - format_precision;
@ -193,7 +193,7 @@ static void format_time(unsigned mcd, int fsize,
/* This is the number of zeros I must add to the value to get /* This is the number of zeros I must add to the value to get
the desired precision within the fraction. If this value is the desired precision within the fraction. If this value is
greater then 0, the value does not have enough characters, greater than 0, the value does not have enough characters,
so I will be adding zeros. */ so I will be adding zeros. */
fraction_pad = time_units - format_precision; fraction_pad = time_units - format_precision;
@ -213,7 +213,7 @@ static void format_time(unsigned mcd, int fsize,
/* This is the number of zeros that I must add to the integer /* This is the number of zeros that I must add to the integer
part of the output string to pad the value out to the part of the output string to pad the value out to the
desired units. This will only have a non-zero value if the desired units. This will only have a non-zero value if the
units of the value is greater then the desired units. units of the value is greater than the desired units.
Detect the special case where the value is 0. In this case, Detect the special case where the value is 0. In this case,
do not do any integer filling ever. The output should be do not do any integer filling ever. The output should be
@ -1117,7 +1117,7 @@ static PLI_INT32 sys_monitor_calltf(char*name)
vpiHandle scope = vpi_handle(vpiScope, sys); vpiHandle scope = vpi_handle(vpiScope, sys);
vpiHandle argv = vpi_iterate(vpiArgument, sys); vpiHandle argv = vpi_iterate(vpiArgument, sys);
/* If there was a previous $monitor, then remove the calbacks /* If there was a previous $monitor, then remove the callbacks
related to it. */ related to it. */
if (monitor_callbacks) { if (monitor_callbacks) {
for (idx = 0 ; idx < monitor_info.nitems ; idx += 1) for (idx = 0 ; idx < monitor_info.nitems ; idx += 1)

View File

@ -24,7 +24,7 @@
/* /*
* This file contains the implementations of the VCD related * This file contains the implementations of the VCD related
* funcitons. * functions.
*/ */
# include "vpi_user.h" # include "vpi_user.h"

View File

@ -24,7 +24,7 @@
/* /*
* This file contains the implementations of the VCD related * This file contains the implementations of the VCD related
* funcitons. * functions.
*/ */
# include "vpi_user.h" # include "vpi_user.h"

View File

@ -52,7 +52,7 @@ long rtl_dist_poisson(long*seed, long mean)
return 0; return 0;
} }
/* copied from IEEE1364-2001, with slight midifications for 64bit machines. */ /* copied from IEEE1364-2001, with slight modifications for 64bit machines. */
long rtl_dist_uniform(long*seed, long start, long end) long rtl_dist_uniform(long*seed, long start, long end)
{ {
double r; double r;
@ -175,7 +175,7 @@ static double uniform(long *seed, long start, long end )
return c; return c;
} }
/* copied from IEEE1364-2001, with slight midifications for 64bit machines. */ /* copied from IEEE1364-2001, with slight modifications for 64bit machines. */
static long poisson(long*seed, long mean) static long poisson(long*seed, long mean)
{ {
long n; long n;

View File

@ -143,7 +143,7 @@ static PLI_INT32 sys_mti_random_calltf(char*name)
context->mti = NP1; context->mti = NP1;
assert(context); assert(context);
/* squrrel away context */ /* squirrel away context */
vpi_put_userdata(call_handle, (void *)context); vpi_put_userdata(call_handle, (void *)context);
} }

View File

@ -180,7 +180,7 @@ static PLI_INT32 sys_readmem_calltf(char*name)
return 0; return 0;
} }
/* Get optional forth parameter. It must be a constant. */ /* Get optional fourth parameter. It must be a constant. */
stop_item = vpi_scan(argv); stop_item = vpi_scan(argv);
if (stop_item!=0){ if (stop_item!=0){
if (check_integer_constant(name, stop_item) == 0){ if (check_integer_constant(name, stop_item) == 0){
@ -188,7 +188,7 @@ static PLI_INT32 sys_readmem_calltf(char*name)
return 0; return 0;
} }
/* Check that ther is no 5th parameter */ /* Check that there is no 5th parameter */
if (vpi_scan(argv) != 0){ if (vpi_scan(argv) != 0){
vpi_printf("ERROR: %s accepts maximum 4 parameters!\n", name ); vpi_printf("ERROR: %s accepts maximum 4 parameters!\n", name );
vpi_free_object(argv); vpi_free_object(argv);
@ -424,7 +424,7 @@ static PLI_INT32 sys_writemem_calltf(char*name)
return 0; return 0;
} }
/* Get optional forth parameter. It must be a constant. */ /* Get optional fourth parameter. It must be a constant. */
stop_item = vpi_scan(argv); stop_item = vpi_scan(argv);
if (stop_item!=0){ if (stop_item!=0){
if (check_integer_constant(name, stop_item) == 0){ if (check_integer_constant(name, stop_item) == 0){
@ -432,7 +432,7 @@ static PLI_INT32 sys_writemem_calltf(char*name)
return 0; return 0;
} }
/* Check that ther is no 5th parameter */ /* Check that there is no 5th parameter */
if (vpi_scan(argv) != 0){ if (vpi_scan(argv) != 0){
vpi_printf("ERROR: %s accepts maximum 4 parameters!\n", name ); vpi_printf("ERROR: %s accepts maximum 4 parameters!\n", name );
vpi_free_object(argv); vpi_free_object(argv);
@ -450,7 +450,7 @@ static PLI_INT32 sys_writemem_calltf(char*name)
/* Open the data file. */ /* Open the data file. */
file = fopen(path, "w"); file = fopen(path, "w");
if (file == 0) { if (file == 0) {
vpi_printf("%s: Unable to open %s for writeing.\n", name, path); vpi_printf("%s: Unable to open %s for writing.\n", name, path);
free(path); free(path);
return 0; return 0;
} }

View File

@ -21,7 +21,7 @@
/* /*
* This file contains the implementations of the VCD related * This file contains the implementations of the VCD related
* funcitons. * functions.
*/ */
# include "vpi_user.h" # include "vpi_user.h"

View File

@ -109,7 +109,7 @@ void vcd_names_sort(struct vcd_names_list_s*tab)
The new signal will be listed as a $var, but no callback The new signal will be listed as a $var, but no callback
will be installed. This saves considerable CPU time and leads will be installed. This saves considerable CPU time and leads
to smalle VCD files. to smaller VCD files.
The _vpiNexusId is a private (int) property of IVL simulators. The _vpiNexusId is a private (int) property of IVL simulators.
*/ */

View File

@ -107,7 +107,7 @@ vpip_bit_t vpip_pair_resolve(vpip_bit_t a, vpip_bit_t b)
res = tmp; res = tmp;
} }
/* Cannonicalize the HiZ value. */ /* Canonicalize the HiZ value. */
if ((res&0x77) == 0) if ((res&0x77) == 0)
res = HiZ; res = HiZ;

View File

@ -83,7 +83,7 @@ void vpip_run_value_changes(struct __vpiSignal*sig)
/* /*
* Handle read-only synch events. This causes the callback to be * Handle read-only synch events. This causes the callback to be
* scheduled for a moment at the end of the time period. This method * scheduled for a moment at the end of the time period. This method
* handles scheduling with itme delays. * handles scheduling with time delays.
*/ */
static void go_readonly_synch(struct __vpiCallback*rfp) static void go_readonly_synch(struct __vpiCallback*rfp)
{ {

View File

@ -224,7 +224,7 @@ extern struct __vpiNull *vpip_get_null(void);
* This type represents the handle to a Verilog scope. These include * This type represents the handle to a Verilog scope. These include
* module instantiations and name begin-end blocks. The attach * module instantiations and name begin-end blocks. The attach
* function is used to attach handles to the scope by the runtime * function is used to attach handles to the scope by the runtime
* initializaiton. * initialization.
*/ */
struct __vpiScope { struct __vpiScope {
struct __vpiHandle base; struct __vpiHandle base;
@ -380,7 +380,7 @@ extern void vpip_simulation_run();
extern void vpi_mcd_init(void); extern void vpi_mcd_init(void);
/* /*
* Schedule an event to be run sometime in the future. The d parmater * Schedule an event to be run sometime in the future. The d parameter
* is the delay in simulation units before the event is processed. If * is the delay in simulation units before the event is processed. If
* the non-block flag is set, the event is scheduled to happen at the * the non-block flag is set, the event is scheduled to happen at the
* end of the time step. * end of the time step.

View File

@ -25,7 +25,7 @@
# include <stdio.h> # include <stdio.h>
/* /*
* IEEE-1364 VPI pretty much mandates the existance of this sort of * IEEE-1364 VPI pretty much mandates the existence of this sort of
* thing. (Either this or a huge memory leak.) Sorry. * thing. (Either this or a huge memory leak.) Sorry.
*/ */
static char buf_obj[128]; static char buf_obj[128];

View File

@ -29,7 +29,7 @@ semicolon that terminates a statement. Like so:
The semicolon is required, whether the comment is there or not. The semicolon is required, whether the comment is there or not.
Statements may span multiple lines, as long as there is no text (other Statements may span multiple lines, as long as there is no text (other
then the first character of a label) in the first column of the than the first character of a label) in the first column of the
continuation line. continuation line.
HEADER SYNTAX HEADER SYNTAX
@ -83,7 +83,7 @@ references symbolically.)
If the functor is part of a vector, then the symbol is the If the functor is part of a vector, then the symbol is the
vvp_ipoint_t for the first functor. The [] operator can then be used vvp_ipoint_t for the first functor. The [] operator can then be used
to reference a functor other then the first in the vector. to reference a functor other than the first in the vector.
There are some special symbols that in certain contexts have special There are some special symbols that in certain contexts have special
meanings. As inputs to functors, the symbols "C<0>", "C<1>", "C<x>" meanings. As inputs to functors, the symbols "C<0>", "C<1>", "C<x>"
@ -139,7 +139,7 @@ implementation. Most of the core gate types have built in tables.
The initial values of all the inputs and the output is x. Any other The initial values of all the inputs and the output is x. Any other
value is passed around as run-time behavior. If the inputs have C<?> value is passed around as run-time behavior. If the inputs have C<?>
symbols, then the inputs are initialized to the specified bit value, symbols, then the inputs are initialized to the specified bit value,
and if this causes the output to be something other then x, a and if this causes the output to be something other than x, a
propagation event is created to be executed at the start of run time. propagation event is created to be executed at the start of run time.
The strengths of inputs are ignored by functors, and the output has The strengths of inputs are ignored by functors, and the output has
@ -234,7 +234,7 @@ sake of VPI code that might access it. The variable is placed in the
current scope. The variable also has a width, defined by the indices current scope. The variable also has a width, defined by the indices
for the most significant and lest significant bits. If the indices are for the most significant and lest significant bits. If the indices are
equal (normally 0) the vector has width of one. If the width is greater equal (normally 0) the vector has width of one. If the width is greater
then one, a contiguous array of functors is created and the value of than one, a contiguous array of functors is created and the value of
the label is the address of the least significant bit. the label is the address of the least significant bit.
A variable does not take inputs, since its value is set behaviorally A variable does not take inputs, since its value is set behaviorally
@ -619,7 +619,7 @@ of four possible values (0, 1, x and z) so two bits are needed to
represent them. So the input of the functor is 8 bits, and the output represent them. So the input of the functor is 8 bits, and the output
2 bits. A complete lookup table for generating the 2-bit output from 2 bits. A complete lookup table for generating the 2-bit output from
an 8-bit input is 512 bits. That can be packed into 64 bytes. This is an 8-bit input is 512 bits. That can be packed into 64 bytes. This is
small enough that the table should take less space then the code to small enough that the table should take less space than the code to
implement the logic. implement the logic.
To implement the truth table, we need to assign 2-bit encodings for To implement the truth table, we need to assign 2-bit encodings for
@ -779,7 +779,7 @@ becomes:
Notice the first parameter of the .functor is the type. The type Notice the first parameter of the .functor is the type. The type
includes a truth table that describes the output with a given includes a truth table that describes the output with a given
input. If the gate is wider then four inputs, then cascade input. If the gate is wider than four inputs, then cascade
functors. For example: functors. For example:
and gate (out, i1, i2, i3, i4, i5, i6, i7, i8); and gate (out, i1, i2, i3, i4, i5, i6, i7, i8);

View File

@ -669,7 +669,7 @@ void inputs_connect(vvp_ipoint_t fdx, unsigned argc, struct symb_s*argv)
for (unsigned idx = 0; idx < argc; idx += 1) { for (unsigned idx = 0; idx < argc; idx += 1) {
/* Find the functor for this input. This assumes that /* Find the functor for this input. This assumes that
wide (more then 4 inputs) gates are consecutive wide (more than 4 inputs) gates are consecutive
functors. */ functors. */
vvp_ipoint_t ifdx = ipoint_input_index(fdx, idx); vvp_ipoint_t ifdx = ipoint_input_index(fdx, idx);
functor_t iobj = functor_index(ifdx); functor_t iobj = functor_index(ifdx);

View File

@ -59,7 +59,7 @@ m .var "m", 6,0;
;;; memory words occupy 8 bits each, that is 7 rounded up to the next ;;; memory words occupy 8 bits each, that is 7 rounded up to the next
;;; multiple of 4. ;;; multiple of 4.
;;; Four bits ber byte. Word fill bits are included. Commas are ;;; Four bits per byte. Word fill bits are included. Commas are
;;; optional, there may be a comma after the last byte. ;;; optional, there may be a comma after the last byte.
.mem/init memory[20], .mem/init memory[20],

View File

@ -9,7 +9,7 @@
EXECUTABLE INSTRUCTION OPCODES EXECUTABLE INSTRUCTION OPCODES
Instruction opcodes all start with a % character and have 0 or more Instruction opcodes all start with a % character and have 0 or more
operands. In no case are there more then 3 operands. This chapter operands. In no case are there more than 3 operands. This chapter
describes the specific behavior of each opcode, in enough detail describes the specific behavior of each opcode, in enough detail
(I hope) that its complete effect can be predicted. (I hope) that its complete effect can be predicted.
@ -160,8 +160,8 @@ same, or 0 otherwise. The eq bit is true if the values are logically
the same. That is, x and z are considered equal. In other words the eq the same. That is, x and z are considered equal. In other words the eq
bit is the same as ``=='' and the eeq bit ``===''. bit is the same as ``=='' and the eeq bit ``===''.
The lt bit is 1 if the left vector is less then the right vector, or 0 The lt bit is 1 if the left vector is less than the right vector, or 0
if greater then or equal to the right vector. It is the equivalent of if greater than or equal to the right vector. It is the equivalent of
the Verilog < operator. Combinations of these three bits can be used the Verilog < operator. Combinations of these three bits can be used
to implement all the Verilog comparison operators. to implement all the Verilog comparison operators.
@ -252,7 +252,7 @@ thread to start executing at the specified address. The new thread is
created and pushed onto the child stack. It is also marked runnable, created and pushed onto the child stack. It is also marked runnable,
but is not necessarily started until the current thread yields. but is not necessarily started until the current thread yields.
The %fork instruction has no effect other then to push a child thread. The %fork instruction has no effect other than to push a child thread.
See also %join. See also %join.
@ -327,7 +327,7 @@ will jump to T_label if bit 8 is x or z.
This is the partner to %fork. This instruction causes the thread to This is the partner to %fork. This instruction causes the thread to
wait for the top thread in the child stack to terminate, then wait for the top thread in the child stack to terminate, then
continues. It has no effect in the current thread other then to wait continues. It has no effect in the current thread other than to wait
until the top child is cleared. until the top child is cleared.
It is an error to execute %join if there are no children in the child It is an error to execute %join if there are no children in the child
@ -539,7 +539,7 @@ complete bounds checking.
The %set/x0/x instruction is the same, except the bound value is in The %set/x0/x instruction is the same, except the bound value is in
a word register instead of in the opcode. This allows for bounds that a word register instead of in the opcode. This allows for bounds that
are larger then 0xffff. are larger than 0xffff.
* %shiftl/i0 <bit>, <wid> * %shiftl/i0 <bit>, <wid>

View File

@ -53,7 +53,7 @@ struct vvp_udp_s *udp_find(char *label);
* also points to the vvp_udp_s table that is the behavior for the * also points to the vvp_udp_s table that is the behavior for the
* device. * device.
* *
* If there are more then 4 inputs to the device, then enough * If there are more than 4 inputs to the device, then enough
* edge_inputs_functor_s functors is created to receive all the * edge_inputs_functor_s functors is created to receive all the
* inputs. All the edge_inputs_functors_s ::out members point to the * inputs. All the edge_inputs_functors_s ::out members point to the
* leading udp_functor_s object, so the ::set methods all invoke the * leading udp_functor_s object, so the ::set methods all invoke the

View File

@ -11,7 +11,7 @@ System tasks and functions in Verilog are implemented in Icarus
Verilog by C routines written with VPI. This implies that the vvp Verilog by C routines written with VPI. This implies that the vvp
engine must provide at least a subset of the Verilog VPI engine must provide at least a subset of the Verilog VPI
interface. The minimalist concepts of vvp, however, make the method interface. The minimalist concepts of vvp, however, make the method
less then obvious. less than obvious.
Within a Verilog design, there is a more or less fixed web of Within a Verilog design, there is a more or less fixed web of
vpiHandles that is the design database as is available to VPI vpiHandles that is the design database as is available to VPI
@ -108,7 +108,7 @@ A scope is created with a .scope directive, like so:
The scope takes a string name as the first parameter. If there is an The scope takes a string name as the first parameter. If there is an
additional parameter, it is a label of the directive for the parent additional parameter, it is a label of the directive for the parent
scope. Scopes that have no parent are root scopes. It is an error to scope. Scopes that have no parent are root scopes. It is an error to
declare a scope with the same name more then once in a parent scope. declare a scope with the same name more than once in a parent scope.
The name string given when creating the scope is the basename for the The name string given when creating the scope is the basename for the
scope. The vvp automatically constructs full names from the scope scope. The vvp automatically constructs full names from the scope

View File

@ -227,7 +227,7 @@ extern "C" FILE *vpi_get_file(PLI_INT32 fd)
// Only deal with FD's // Only deal with FD's
if (IS_MCD(fd)) return NULL; if (IS_MCD(fd)) return NULL;
// Only know about FD_MAX indicies // Only know about FD_MAX indices
if (FD_IDX(fd) >= FD_MAX) return NULL; if (FD_IDX(fd) >= FD_MAX) return NULL;
return fd_table[FD_IDX(fd)].fp; return fd_table[FD_IDX(fd)].fp;

View File

@ -75,7 +75,7 @@ void vpip_load_module(const char*name)
sprintf(buf, "%s.vpi", name); sprintf(buf, "%s.vpi", name);
rc = stat(buf, &sb); rc = stat(buf, &sb);
/* Tray alwo with the .vpl suffix. */ /* Try also with the .vpl suffix. */
if (rc != 0) { if (rc != 0) {
export_flag = true; export_flag = true;
sprintf(buf, "%s.vpl", name); sprintf(buf, "%s.vpl", name);

View File

@ -281,7 +281,7 @@ static const struct __vpirt vpip_sysfunc_real_rt = {
systask_iter systask_iter
}; };
/* **** Manipulate the internal datastructures. **** */ /* **** Manipulate the internal data structures. **** */
static struct __vpiUserSystf**def_table = 0; static struct __vpiUserSystf**def_table = 0;
static unsigned def_count = 0; static unsigned def_count = 0;

View File

@ -345,7 +345,7 @@ void vthread_run(vthread_t thr)
} }
/* /*
* The CHUNK_LINK instruction is a specla next pointer for linking * The CHUNK_LINK instruction is a special next pointer for linking
* chunks of code space. It's like a simplified %jmp. * chunks of code space. It's like a simplified %jmp.
*/ */
bool of_CHUNK_LINK(vthread_t thr, vvp_code_t code) bool of_CHUNK_LINK(vthread_t thr, vvp_code_t code)
@ -2862,7 +2862,7 @@ bool of_FORK_UFUNC(vthread_t thr, vvp_code_t cp)
/* After this function, the .ufunc code has placed an of_JOIN /* After this function, the .ufunc code has placed an of_JOIN
to pause this thread. Since the child was pushed by the to pause this thread. Since the child was pushed by the
flag to schecule_vthread, the called function starts up flag to schedule_vthread, the called function starts up
immediately. */ immediately. */
return true; return true;
} }

View File

@ -305,7 +305,7 @@ void xnfio_f::lpm_compare(Design*des, NetCompare*dev)
bool xnfio_f::compare_sideb_const(Design*des, NetCompare*dev) bool xnfio_f::compare_sideb_const(Design*des, NetCompare*dev)
{ {
/* Even if side B is all constant, if there are more then 4 /* Even if side B is all constant, if there are more than 4
signals on side A we will not be able to fit the operation signals on side A we will not be able to fit the operation
into a function unit, so we might as well accept a into a function unit, so we might as well accept a
comparator. Give up. */ comparator. Give up. */