I am just learning vhdl, and am trying to use a 3-input nand gate. The code I have is:
G => (A nand B nand C) after 3 ns;
but this does not compile.
I am just learning vhdl, and am trying to use a 3-input nand gate. The code I have is:
G => (A nand B nand C) after 3 ns;
but this does not compile.
I'm not an expert on VHDL but I think you have a couple of mistakes there - it should probably be:
G <= not (A and B and C) after 3 ns;
i.e. the assignment is in the wrong direction and I'm not sure that nand commutes in the way that you need it to for 3 inputs, hence the use of and
for the inputs and then not
to invert the output.
a nand b nand c
. –
Philanthropic Oh I think I may know.
G <= (A nand B nand C);
You have the assignment operator sign reversed, yes?
Really delayed edit:
VHDL will not compile with the A nand B nand C syntax presented above, this gives a syntax error. Best to do what Paul suggests and pull the not out in front of the logic.
nand
like this. You can add parentheses, e.g. G <= ((A nand B) nand C);
but that still won't give the correct result. You really need to separate out the not
from the and
, e.g. G <= not (A and B and C);
–
Phosphide ('0' nand '0') nand '1' = '0'
but '0' nand ('0' nand '1') = '1'
That's the reason why VHDL does not allow a nand b nand c
. –
Philanthropic You would have to make your three input NAND gate into a two input NAND gate by doing the following:
Then you can write the VHDL using only two inputs and it won't be illegal. If you want to write complex NAND logic, you can add a process to your architecture and then use variables to capture sub parts of your logic and then apply NAND to those subparts. Makes it easier to understand where you're at in your function.
© 2022 - 2024 — McMap. All rights reserved.
after 3 ns
is used only for simulation. It lets the simulator properly simulate the gate delay of the real hardware. You can leave it in the code when you synthesize, but the synthesizer will ignore it. – Hyperopia