2.5 KiB
Concatenation (Signal Merging)
Concatenation allows assigning a multi-bit signal the "join" of several lower-width signals, or conversely, assigning a higher-width signal to a group of lower-width signals.
The concatenation operator has the following form: {sig1, sig2, ..., sign}.
Suppose we have the following set of signals:
logic a;
logic b;
logic [7:0] c;
logic [1:0] d;
logic [5:0] e;
And we want the wire e to receive the following signals:
- the MSB of signal
ereceives signala - the next bit receives signal
b - the next 2 bits receive bits
[4:3]of signalc - the 2 LSBs receive signal
d
This can be done using 4 continuous assignments:
logic a;
logic b;
logic [7:0] c;
logic [1:0] d;
logic [5:0] e;
assign e[5] = a;
assign e[4] = b;
assign e[3:2] = c[4:3];
assign e[1:0] = d;
or with a single assignment using concatenation:
logic a;
logic b;
logic [7:0] c;
logic [1:0] d;
logic [5:0] e;
assign e = {a, b, c[4:3], d};
The reverse is also possible. Suppose we want to drive individual wires from separate bits of signal e:
logic a;
logic b;
logic [7:0] c;
logic [1:0] d;
logic [5:0] e;
assign a = e[5];
assign b = e[4];
assign c[4:3] = e[3:2];
assign d = e[1:0];
This operation can also be expressed as a single concatenation:
logic a;
logic b;
logic [7:0] c;
logic [1:0] d;
logic [5:0] e;
assign {a, b, c[4:3], d} = e;
Additionally, concatenation can be used for signal replication. Replication is expressed as:
{a, {replication_count{signal_to_replicate}} ,b}
For example, to assign three copies of bits [4:3] of signal c, followed by signals a and b:
logic a;
logic b;
logic [7:0] c;
logic [7:0] e;
assign e = { {3{c[4:3]}}, a, b};
Chapter Summary
The concatenation operator can be used to group and replicate signals on either side of an assignment:
- it can be used to assign a group of lower-width signals to a higher-width signal
- it can be used to assign the corresponding bits of a higher-width signal to a group of lower-width signals.