A unary operation acts on a
single vector. Suppose we have a bit-vector a, then we can apply several unary
operations:
| Operation | Result | Description |
|---|---|---|
~a |
vector | flip all bits of a |
&a |
single bit | AND all bits of a (1 if “all”
a[i]==1) |
|a |
single bit | OR all bits of a (1 if “any”
a[i]==1) |
^a |
single bit | XOR all bits of a (1 if “odd
parity” in a) |
The file src/testbench.v
runs some examples of these operations. Run make to simulate the cases. The first
line looks like this:
clk: 0 a: 00000000 ~a: 11111111 &a: 0 |a: 0 ^a: 0
Initially, a is all zeros, so
&a = AND(0,0,0,0,0,0,0,0) = 0.
The same applies to | and ^. The second
line looks like this:
clk: 1 a: 00100100 ~a: 11011011 &a: 0 |a: 1 ^a: 0
Here we see a contains some
zeros, so &a == 0.
It also contains some ones, so |a == 1.
Lastly, there are two non-zero bits in a, so it has even parity,
therefore ^a == 0.
Now let’s examine another line:
clk: 5 a: 00001101 ~a: 11110010 &a: 0 |a: 1 ^a: 1
In this line, there are three non-zero bits in a, so it has odd parity,
therefore ^a == 1.
This is a simulation exercise (no build). In testbench.v, make these changes in
both the $write and
$fwrite
lines (also edit the text descriptions to match what your code is
doing):
&a and
|a, test
~&a~|a&(~a)|(~a)
You should find that ~&a == |(~a)
and ~|a == &(~a)Run make to simulate your
changes, and check to make sure the correct output appears in test_result.txt.
When finished, turn in your work using git:
git add test_result.txt
git commit . -m "Complete"
git push origin main