Go to the first, previous, next, last section, table of contents.


Functional Design

The simultaneous assignment of signals within a block is managed by define-synchronous-system. The next-function expressions are functional as opposed to imperative; these expressions should not use set! or other mutators.

See section Models for how to create (RAM) Arrays and FIFOs.

Function: array-ref array index1 index2 ...
The procedure array-ref returns the contents of the array location selected by index1 index2 ....

Function: array-set array new-value index1 index2 ...
The procedure array-set returns a copy of array with the location selected by index1 index2 ... replaced by new-value.

Function: fifo:first fifo
Returns the first item of fifo. This item will be discarded by a call to fifo:remove-first.

Function: fifo:remove-first fifo
Returns fifo with its first item discarded. If fifo is already empty, an error is signalled.

Function: fifo:insert-last fifo datum
Returns fifo with datum added. If fifo is already full, an error is signalled.

Function: fifo:empty? fifo
Returns #t if fifo is empty; otherwise, #f.

Function: fifo:full? fifo
Returns #t if fifo is full; otherwise, #f.

Function: fifo:fullness fifo
Returns the number of items fifo is currently holding.

Bitwise Operations

Function: logand n1 n1
Returns the integer which is the bit-wise AND of the two integer arguments.

Example:

(number->string (logand #b1100 #b1010) 2)
   => "1000"

Function: logior n1 n2
Returns the integer which is the bit-wise OR of the two integer arguments.

Example:

(number->string (logior #b1100 #b1010) 2)
   => "1110"

Function: number-or name k1 ...
The arguments to logior must be integers. The k1 ... arguments to number-or can be either integers or #f. All the arguments to number-or are evaluated. If more than one k1 ... argument is an integer, a warning using name name is issued.

(number-or 'ls[2..0]
           (and cc-litx1 #.ls-data)
           (and cc-litx2 #.ls-data-x2)
           (and cc-litx3 #.ls-data-x3))

Function: number-check name k
Issues a warning if k is not a number or negative. number-check returns #t.

Function: logxor n1 n2
Returns the integer which is the bit-wise XOR of the two integer arguments.

Example:

(number->string (logxor #b1100 #b1010) 2)
   => "110"

Function: lognot n
Returns the integer which is the 2s-complement of the integer argument.

Example:

(number->string (lognot #b10000000) 2)
   => "-10000001"
(number->string (lognot #b0) 2)
   => "-1"

Function: bitwise-if mask n0 n1
Returns an integer composed of some bits from integer n0 and some from integer n1. A bit of the result is taken from n0 if the corresponding bit of integer mask is 1 and from n1 if that bit of mask is 0.

Function: logtest j k
(logtest j k) == (not (zero? (logand j k)))

(logtest #b0100 #b1011) => #f
(logtest #b0100 #b0111) => #t

Function: = j k
Returns #t if and only if integer j equals integer k.

Function: zero? j
Returns #t only if integer j is 0.

Bit Within Word

Function: logbit? index j
Returns #t if bit index of j is 1. Bit 0 is always the low order bit; (logbit? 0 data[31..24]) will be #t only if data[31..24]'s value is odd.

Function: copy-bit index from bit
Returns an integer the same as from except in the indexth bit, which is 1 if bit is #t and 0 if bit is #f.

Example:

(number->string (copy-bit 0 0 #t) 2)       => "1"
(number->string (copy-bit 2 0 #t) 2)       => "100"
(number->string (copy-bit 2 #b1111 #f) 2)  => "1011"

Fields of Bits

Function: bit-field n start end
Returns the integer composed of the start (inclusive) through end (exclusive) bits of n. The startth bit becomes the low order (even/odd) bit in the result. Note that the end index is one more than the high order bit index. Thus, (bit-field data[7..0] 0 8) and (bit-field data[31..24] 0 8) are identity functions.

This function was called bit-extract in SYNCH1a1.

Function: copy-bit-field to start end from
Returns an integer the same as to except possibly in the start (inclusive) through end (exclusive) bits, which are the same as those of from. The 0-th bit of from becomes the startth bit of the result.

Example:

(number->string (copy-bit-field #b1101101010 0 4 0) 2)
        => "1101100000"
(number->string (copy-bit-field #b1101101010 0 4 -1) 2)
        => "1101101111"

Function: ash int count
Returns an integer equivalent to (inexact->exact (floor (* int (expt 2 count)))).

Example:

(number->string (ash #b1 3) 2)
   => "1000"
(number->string (ash #b1010 -1) 2)
   => "101"

Bits shifted below the low-order bit disappear; bits shifted above the high order bit do not disappear. Remember to mask unused bits using logand.


Go to the first, previous, next, last section, table of contents.