Functionality of a FWFT (First Word Fall Through) FIFO

Status
Not open for further replies.

shaiko

Advanced Member level 5
Joined
Aug 20, 2011
Messages
2,644
Helped
303
Reputation
608
Reaction score
297
Trophy points
1,363
Visit site
Activity points
18,302
Please explain the basic functionality of a FWFT FIFO(First Word Fall Through) and how it differs from a standart FIFO.
Also, what are the pros and cons of using a FWFT as opposed to a standart type.

Please DO NOT point me to external links.
 

Using external links, like google, I discovered that the FWFT FIFO is the same meaning as Altera's Look Ahead fifo. Basically the D_out is valid when empty /= '1', and so read_en acts more like an ACK rather than an enable. In a normal fifo you have to assert read_en to get the d_word on the next clock.

FWFT/look ahead have a combinatorial output rather than a registered output, so timing usually results in a lower fmax. the pro's/cons will depend on whether you want the read_en to behave like an ack or a read_en (basically, its 1 less pipe delay).
 
Reactions: shaiko

    shaiko

    Points: 2
    Helpful Answer Positive Rating
Using external links, like google
I like sarcastic remarks TrickyDicky - I really do.
But as you might have guessed - I have access to weird sites like google myself. Nonetheless, after using them I still found it fit to bring this question to the forum. I didn't want anyone to point me to the same places I've already been wasting his and my time.
I just asked for a simple explanation in one's own words - which you did!
So, why the sarcasm?

Now, to the subject.
"read_en" is the signal outgoing from the FIFO towards the reader - indicating that it can now read data?
Or is it simply a "read request" incoming from the reader towards the FIFO ?
And isn't D_out always equals:
Code:
D_out <= memory_array (read_address) ;
 
Last edited:

Now, to the subject.
"read_en" is the signal outgoing from the FIFO towards the reader - indicating that it can now read data?
Or is it simply a "read request" incoming from the reader towards the FIFO ?
With lookahead, the read input signals that the current data outputs can be changed to show the next item in the fifo. This is what was meant by the read being an acknowledge since read being asserted is the reader of the fifo acknowledging that it has read the data (or at least that the read will complete by the next rising edge that occurs).

With no lookahead, the read input tells the fifo to provide the next output on the next clock cycle.
And isn't D_out always equals:
Code:
D_out <= memory_array (read_address) ;
No. What you have posted is for a look ahead fifo. Below is the output with no lookahead. Note that the first valid output on 'D_out' will not occur until the clock cycle following when the read input is asserted.

Code:
D_out <= memory_array (read_address) when (Read_en = '1') and rising_edge(Clock);

Kevin Jennings
 
Reactions: shaiko

    shaiko

    Points: 2
    Helpful Answer Positive Rating
Code:
D_out <= memory_array (read_address) when (Read_en = '1') and rising_edge(Clock);
and what does D_out equal when the condition isn't satisfied ?
 

Code:
D_out <= memory_array (read_address) when (Read_en = '1') and rising_edge(Clock);
and what does D_out equal when the condition isn't satisfied ?

- Prior to the first rising edge of the clock where Read_en = '1', the output is undefined since nothing has been clocked into the flip flop yet
- After the first rising edge of the clock where Read_en = '1' has occurred, if the condition isn't satisfied, the output will remain unchanged from whatever it had previously

The "when (Read_en = '1') and rising_edge(Clock);" is shorthand to make the assignment into a clock enabled flip flop. In this case, 'Read_en' performs the role of the clock enable.

Kevin Jennings
 
Reactions: shaiko

    shaiko

    Points: 2
    Helpful Answer Positive Rating
Isn't it the same as:

Code:
procees (Clock) is
begin
   if Read_en = '1' then
      D_out <= memory_array (read_address) ;
   end if ;
end process ;
 

Isn't it the same as:

Code:
procees (Clock) is
begin
   if Read_en = '1' then
      D_out <= memory_array (read_address) ;
   end if ;
end process ;

Yes, functionally the same, just more typing this way.
 
Reactions: shaiko

    shaiko

    Points: 2
    Helpful Answer Positive Rating
So...it's like that?

Code:
D_out <= memory_array (read_address) ; -- FWFT

procees (Clock) is -- standart non FWFT
begin
   if Read_en = '1' then
      D_out <= memory_array (read_address) ;
   end if ;
end process ;
 

i m going to design fwft fifo. i have doubt in tat, is FWFT FIFO is asynchronous or synchronous....can i use this fwft fifo for noc
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…