Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

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
302
Reputation
606
Reaction score
297
Trophy points
1,363
Activity points
18,287
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.
 

TrickyDicky

Advanced Member level 5
Joined
Jun 7, 2010
Messages
7,045
Helped
2,069
Reputation
4,155
Reaction score
2,023
Trophy points
1,393
Activity points
38,826
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).
 
  • Like
Reactions: shaiko

    shaiko

    points: 2
    Helpful Answer Positive Rating

shaiko

Advanced Member level 5
Joined
Aug 20, 2011
Messages
2,644
Helped
302
Reputation
606
Reaction score
297
Trophy points
1,363
Activity points
18,287
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:

K-J

Advanced Member level 2
Joined
Jan 26, 2012
Messages
658
Helped
308
Reputation
620
Reaction score
301
Trophy points
1,343
Activity points
7,053
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
 
  • Like
Reactions: shaiko

    shaiko

    points: 2
    Helpful Answer Positive Rating

shaiko

Advanced Member level 5
Joined
Aug 20, 2011
Messages
2,644
Helped
302
Reputation
606
Reaction score
297
Trophy points
1,363
Activity points
18,287
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 ?
 

K-J

Advanced Member level 2
Joined
Jan 26, 2012
Messages
658
Helped
308
Reputation
620
Reaction score
301
Trophy points
1,343
Activity points
7,053
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
 
  • Like
Reactions: shaiko

    shaiko

    points: 2
    Helpful Answer Positive Rating

shaiko

Advanced Member level 5
Joined
Aug 20, 2011
Messages
2,644
Helped
302
Reputation
606
Reaction score
297
Trophy points
1,363
Activity points
18,287
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 ;
 

K-J

Advanced Member level 2
Joined
Jan 26, 2012
Messages
658
Helped
308
Reputation
620
Reaction score
301
Trophy points
1,343
Activity points
7,053
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.
 
  • Like
Reactions: shaiko

    shaiko

    points: 2
    Helpful Answer Positive Rating

shaiko

Advanced Member level 5
Joined
Aug 20, 2011
Messages
2,644
Helped
302
Reputation
606
Reaction score
297
Trophy points
1,363
Activity points
18,287
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 ;
 

anbuchozhan

Newbie level 4
Joined
Jul 16, 2012
Messages
6
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,310
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.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top