VHDL: Why the delay is 3 clk after synthesis?

OP #2377233
Rate this post
• ▲ useful
▼ not useful
In VHDL, variable should make no delay between value assignment. But how 
about mix signal and variables? In code below, X and Y are variables and 
Z is output. Why the delay between Z and input A,B is 3 clocks? Why it's 
not 1 clock delay?
Thanks in advance.

==========================
process(clk)
variable X,Y:std_logic;
begin
  if(clk's event and clk='1') then
    Z<=Y;
    Y:=X;
    X:=A and B;
  end if;
end process;
Moderator (Company: Titel) #2377257
Rate this post
• ▲ useful
▼ not useful
> Why it's not 1 clock delay?
Becuase the variables are read before they are written, therefore they 
must be storing.
>  Why the delay between Z and input A,B is 3 clocks?
Its not called delay, its latency...

Play "FPGA" and do the process on your own:
1
  if(clk's event and clk='1') then
2
    Z<=Y;              -- with the clock Z becomes Y
3
    Y:=X;              -- AFTER THAT Y becomes X
4
    X:=A and B;        -- AFTER THAT X becomes A*B
5
  end if;
The two AFTER THAT are the two additional clock cycles...

If you would turn it around ther would be no additional latency:
1
  if(clk's event and clk='1') then
2
    X:=A and B;        -- FIRST X becomes A*B
3
    Y:=X;              -- THEN  Y becomes X
4
    Z<=Y;              -- AND FINALLY Z becomes Y
5
  end if;
Because then the variables are not storing...
Guest #2377265
Rate this post
• ▲ useful
▼ not useful
- Variables are assignmed sequentially, so order of assignment matters
- Signals are assigned "all together" at the end of a time tick

so this is what happens after input A or B changes:

1st clock event

Z is marked not to change, as variable Y has still the old value
Y is assigned the old value of X (as it has not changed so far)
X is assigned the new "A and B"

2nd clock event

Z is marked not to change, as variable Y has still the old value
Y is assigned the value of X as from 1st clock event
X is assigned the new "A and B"

3rd clock event

Z is marked to get the value of Y at the end of the process
Y is assigned the value of X as from 2nd clock event
X is assigned the new "A and B"
Z is assigned the value of Y

Here we are...

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.