The concatenation operator (&) in VHDL joins two or more bit vectors or strings together to make a longer one. It helps combine smaller pieces into one bigger piece.
When you want to join two signals or variables to form a wider signal.
When creating a larger data word from smaller parts, like combining bytes into a word.
When building a new vector from separate bits or smaller vectors.
When formatting output by joining strings or characters.
When you need to add a prefix or suffix to a bit vector or string.
Syntax
VHDL
result <= vector1 & vector2;
The & operator joins two vectors or strings end-to-end.
Both operands must be of compatible types (e.g., both bit_vectors or both strings).
Examples
Joins two 4-bit vectors A and B into one 8-bit vector C.
VHDL
signal A : std_logic_vector(3 downto 0) := "1010";
signal B : std_logic_vector(3 downto 0) := "1100";
signal C : std_logic_vector(7 downto 0);
C <= A & B;
Concatenates a single bit X with a 4-bit vector Y to make a 5-bit vector Z.
VHDL
signal X : std_logic := '1';
signal Y : std_logic_vector(3 downto 0) := "0011";
signal Z : std_logic_vector(4 downto 0);
Z <= X & Y;
Joins two strings greeting and name into one longer string message.
VHDL
variable greeting : string(1 to 5) := "Hello";
variable name : string(1 to 4) := "John";
variable message : string(1 to 9);
message := greeting & name;
Sample Program
This program joins two 4-bit vectors part1 and part2 into one 8-bit vector combined. It then prints the combined vector as a string.
VHDL
library ieee;
use ieee.std_logic_1164.all;
entity concat_example is
end entity;
architecture behavior of concat_example is
signal part1 : std_logic_vector(3 downto 0) := "1010";
signal part2 : std_logic_vector(3 downto 0) := "0101";
signal combined : std_logic_vector(7 downto 0);
begin
combined <= part1 & part2;
process
begin
wait for10 ns;
report "Combined vector: " & to_string(combined);
wait;
end process;
end architecture;
OutputSuccess
Important Notes
Make sure the vectors or strings you join have compatible types and sizes.
The order matters: A & B puts A first, then B.
You can chain multiple concatenations like A & B & C.
Summary
The & operator joins two vectors or strings end-to-end.
Use it to build bigger signals or strings from smaller parts.
Operands must be compatible types and the order affects the result.
Practice
(1/5)
1. What does the VHDL concatenation operator & do?
easy
A. Joins two or more bit vectors or bits into one longer vector
B. Performs bitwise AND operation between two vectors
C. Splits a vector into smaller parts
D. Assigns a value to a signal
Solution
Step 1: Understand the operator's purpose
The & operator in VHDL is used to join bits or bit vectors together.
Step 2: Differentiate from other operators
Unlike bitwise AND, it concatenates bits side by side to form a longer vector.
Final Answer:
Joins two or more bit vectors or bits into one longer vector -> Option A
Quick Check:
Concatenation = Joining bits [OK]
Hint: Remember & joins bits side by side, not bitwise AND [OK]
Common Mistakes:
Confusing & with bitwise AND
Thinking & splits vectors
Assuming & assigns values
2. Which of the following is the correct syntax to concatenate two std_logic_vectors A and B in VHDL?
easy
A. C <= A & B;
B. C <= A + B;
C. C <= A and B;
D. C <= A | B;
Solution
Step 1: Identify concatenation syntax
In VHDL, concatenation uses the & operator between vectors.
Step 2: Check other operators
+ is arithmetic addition, and is bitwise AND, | is not valid in VHDL for concatenation.
Final Answer:
C <= A & B; -> Option A
Quick Check:
Concatenation uses & operator [OK]
Hint: Use & to join vectors, not + or and [OK]
Common Mistakes:
Using + instead of & for concatenation
Using bitwise operators like and
Using | which is invalid in VHDL
3. Given the following VHDL code:
signal A : std_logic_vector(3 downto 0) := "1010";
signal B : std_logic_vector(1 downto 0) := "11";
signal C : std_logic_vector(5 downto 0);
C <= A & B;
What is the value of C after the assignment?
medium
A. "1010"
B. "101011"
C. "111010"
D. "1111"
Solution
Step 1: Understand concatenation order
The operator & joins A first, then B, so bits of A come first.
Step 2: Combine the bit vectors
A is "1010" and B is "11", so concatenation is "1010" & "11" = "101011".
Final Answer:
"101011" -> Option B
Quick Check:
Concatenate A then B = 101011 [OK]
Hint: Left side bits come first in concatenation [OK]
Common Mistakes:
Reversing order of concatenation
Confusing concatenation with addition
Ignoring vector sizes
4. Consider this VHDL snippet:
signal X : std_logic_vector(3 downto 0) := "1100";
signal Y : std_logic_vector(3 downto 0);
Y <= X & '1';
What is the error in this code?
medium
A. Single quotes used incorrectly for bit literal
B. Cannot concatenate a vector and a single bit directly
C. Signal Y has wrong size for concatenation result
D. No error, code is correct
Solution
Step 1: Check sizes of signals
X is 4 bits, concatenated with one bit '1' makes 5 bits total.
Step 2: Compare with target signal size
Y is declared as 4 bits, which cannot hold 5 bits from concatenation.
Final Answer:
Signal Y has wrong size for concatenation result -> Option C
Quick Check:
Concatenation size must match target signal size [OK]
Hint: Check target signal size matches concatenation length [OK]
Common Mistakes:
Assuming single bit can't concatenate with vector
Ignoring size mismatch errors
Thinking single quotes are wrong for bits
5. You want to create an 8-bit vector DATA by concatenating a 3-bit vector A, a 2-bit vector B, and a 3-bit vector C. Which of the following assignments is correct in VHDL?
hard
A. DATA <= (A & B) or C;
B. DATA <= B & A & C;
C. DATA <= A and (B & C);
D. DATA <= A & B & C;
Solution
Step 1: Determine the correct concatenation
To join A (3 bits), B (2 bits), C (3 bits) into 8-bit DATA, use DATA <= A & B & C; which appends them in order.
Step 2: Eliminate incorrect options
B reverses order to B A C, C mixes 'and' operator, D uses 'or' after partial concat.
Final Answer:
DATA <= A & B & C; -> Option D
Quick Check:
3+2+3=8 bits, A&B&C [OK]
Hint: Always concatenate in the specified order using & [OK]
Common Mistakes:
Reversing the concatenation order
Mixing bitwise operators (and, or) with concatenation (&)
Assuming different operator precedence changes order
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.