Logical Operators – VHDL Example
Logical operators are fundamental to VHDL code. The logical operators that are built into VHDL are:
and, or, nand (my personal favorite), nor, xor, and xnor
These logical operators can be combined on a single line. Parenthesis will dictate the order of operations. For example the line:
1 | a <= (b and c) or (d and e); |
Will first perform a logical “and” of signals b and c, then perform a logical “and” of signals d and e, then perform a logical “or” of the results of the two and operators. All of the logical operators are synthesizable. For reference here is a list of all of the truth tables of logical operators.
Below is the console output from running the code below in Modelsim:
# ** Note: AND of 1 and 0 is '0' # ** Note: OR of 1 and 0 is '1' # ** Note: NAND of 1 and 0 is '1' # ** Note: NOR of 1 and 0 is '0' # ** Note: XNOR of 1 and 0 is '0' # ** Note: AND of 1 and 1 is '1' # ** Note: OR of 1 and 1 is '1' # ** Note: NAND of 1 and 1 is '0' # ** Note: NOR of 1 and 1 is '0' # ** Note: XNOR of 1 and 1 is '1'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | library ieee ; use ieee . std_logic_1164 . all ; use ieee . numeric_std . all ; entity logical_operators is end logical_operators; architecture behave of logical_operators is begin -- Logical Operator Demonstration Process process is variable v_A, v_B : std_logic ; variable v_AND, v_OR, v_NAND, v_NOR, v_XOR, v_XNOR : std_logic ; begin v_A := '1' ; v_B := '0' ; v_AND := v_A and v_B; v_OR := v_A or v_B; v_NAND := v_A nand v_B; v_NOR := v_A nor v_B; v_XNOR := v_A xnor v_B; report "AND of 1 and 0 is " & std_logic 'image(v_AND) severity note ; report "OR of 1 and 0 is " & std_logic 'image(v_OR) severity note ; report "NAND of 1 and 0 is " & std_logic 'image(v_NAND) severity note ; report "NOR of 1 and 0 is " & std_logic 'image(v_NOR) severity note ; report "XNOR of 1 and 0 is " & std_logic 'image(v_XNOR) severity note ; wait for 10 ns; v_A := '1' ; v_B := '1' ; v_AND := v_A and v_B; v_OR := v_A or v_B; v_NAND := v_A nand v_B; v_NOR := v_A nor v_B; v_XNOR := v_A xnor v_B; report "AND of 1 and 1 is " & std_logic 'image(v_AND) severity note ; report "OR of 1 and 1 is " & std_logic 'image(v_OR) severity note ; report "NAND of 1 and 1 is " & std_logic 'image(v_NAND) severity note ; report "NOR of 1 and 1 is " & std_logic 'image(v_NOR) severity note ; report "XNOR of 1 and 1 is " & std_logic 'image(v_XNOR) severity note ; wait ; end process ; end behave; |
Leave A Comment