---
name: "logic"
section: "9"
platform: "linux"
package: "linuxcnc-uspace"
version: "1:2.9.4-2+deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/logic"
---

# logic(9)

LinuxCNC HAL component providing configurable logic functions

## NAME

logic - LinuxCNC HAL component providing configurable logic functions

## SYNOPSIS

**loadrt logic** **\[count=N\|names=name1\[,name2...\]\]** **personality=0xXXXX\[,0xXXXX...\]**

- **count** The number of logical gates.

  - **names** The named logical gates to create.

  - **personality** Comma separated list of hexadecimal number.

  Each number defines the behaviour of the individual logic gate.  The list must have the same number of personalities as the N count.

## DESCRIPTION

General \`logic function' component.  Can perform \`and', \`or', \`nand', \`nor' and \`xor' of up to 16 inputs.

Determine the proper value for \`personality' by adding the inputs and outputs then convert to hex:

- •

  The number of input pins, usually from 2 to 16

- •

  256 (0x100)  if the \`and' output is desired

- •

  512 (0x200)  if the \`or' output is desired

- •

  1024 (0x400)  if the \`xor' (exclusive or) output is desired

- •

  2048 (0x800)  if the \`nand' output is desired

- •

  4096 (0x1000)  if the \`nor' output is desired

Outputs can be combined, for example 2 + 256 + 1024 = 1282 converted to hex would be 0x502 and would have two inputs and have both \`xor' and \`and' outputs.

## FUNCTIONS

- **logic.***N*

  Read the inputs and toggle the output bit.

## PINS

- **logic.*N*.in-*MM* bit in (MM=00..personality & 0xff)**

  - **logic.*N*.and bit out \[if personality & 0x100\]**

  - **logic.*N*.or bit out \[if personality & 0x200\]**

  - **logic.*N*.xor bit out \[if personality & 0x400\]**

  - **logic.*N*.nand bit out \[if personality & 0x800\]**

  - **logic.*N*.nor bit out \[if personality & 0x1000\]**

  ## EXAMPLES

This is an OR circuit connected to three different signals, two inputs named sig-in-0 and sig-in-1, and one output named sig-out.  First the circuit is defined, then its function is connected to the servo real time thread, last, its pins are connected to the wanted signals.

-

  ```
  loadrt logic count=1 personality=0x202
  addf logic.0 servo-thread
  net sig-in-0 => logic.0.in-00
  net sig-in-1 => logic.0.in-01
  net sig-out  <= logic.0.or
  ```

This is a named AND circuit with two inputs and one output.

-

  ```
  loadrt logic names=both personality=0x102
  addf both servo-thread
  net sig-in-0 => both.in-00
  net sig-in-1 => both.in-01
  net sig-out  <= both.and
  ```

## SEE ALSO

[**and2**(9)](/and2/9.md), [**lut5**(9)](/lut5/9.md), [**not**(9)](/not/9.md), [**or2**(9)](/or2/9.md), [**xor2**(9)](/xor2/9.md)

## AUTHOR

Jeff Epler

## LICENSE

GPL
