FPGA Central - World's 1st FPGA / CPLD Portal

FPGA Central

World's 1st FPGA Portal

 

Go Back   FPGA Groups > NewsGroup > FPGA

FPGA comp.arch.fpga newsgroup (usenet)

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 11-14-2007, 07:37 PM
zlotawy
Guest
 
Posts: n/a
Default Block-ram FIFO in Xilinx

Hello,
I have generated a block-ram based FIFO queue (2 independent clocks, 2
inputs, 1 output) with the use of Core Generator. In the creator I used the
36 bit data bus. Is it possible to parameterize this variable?
I think, that the Xilinx doesn't give such possibility. The generated code:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off
Library XilinxCoreLib;
-- synthesis translate_on
ENTITY fifa IS
port (
din: IN std_logic_VECTOR(35 downto 0);
rd_clk: IN std_logic;
rd_en: IN std_logic;
rst: IN std_logic;
wr_clk: IN std_logic;
wr_en: IN std_logic;
dout: OUT std_logic_VECTOR(35 downto 0);
empty: OUT std_logic;
full: OUT std_logic);
END fifa;

ARCHITECTURE fifa_a OF fifa IS
-- synthesis translate_off
component wrapped_fifa
port (
din: IN std_logic_VECTOR(35 downto 0);
rd_clk: IN std_logic;
rd_en: IN std_logic;
rst: IN std_logic;
wr_clk: IN std_logic;
wr_en: IN std_logic;
dout: OUT std_logic_VECTOR(35 downto 0);
empty: OUT std_logic;
full: OUT std_logic);
end component;

-- Configuration specification
for all : wrapped_fifa use entity
XilinxCoreLib.fifo_generator_v4_1(behavioral)
generic map(
c_has_int_clk => 0,
c_rd_freq => 1,
c_wr_response_latency => 1,
c_has_srst => 0,
c_has_rd_data_count => 0,
c_din_width => 36,
c_has_wr_data_count => 0,
c_full_flags_rst_val => 1,
c_implementation_type => 2,
c_family => "virtex2p",
c_use_embedded_reg => 0,
c_has_wr_rst => 0,
c_wr_freq => 1,
c_underflow_low => 0,
c_has_meminit_file => 0,
c_has_overflow => 0,
c_preload_latency => 1,
c_dout_width => 36,
c_rd_depth => 1024,
c_default_value => "BlankString",
c_mif_file_name => "BlankString",
c_has_underflow => 0,
c_has_rd_rst => 0,
c_has_almost_full => 0,
c_has_rst => 1,
c_data_count_width => 10,
c_has_wr_ack => 0,
c_use_ecc => 0,
c_wr_ack_low => 0,
c_common_clock => 0,
c_rd_pntr_width => 10,
c_use_fwft_data_count => 0,
c_has_almost_empty => 0,
c_rd_data_count_width => 10,
c_enable_rlocs => 0,
c_wr_pntr_width => 10,
c_overflow_low => 0,
c_prog_empty_type => 0,
c_optimization_mode => 0,
c_wr_data_count_width => 10,
c_preload_regs => 0,
c_dout_rst_val => "0",
c_has_data_count => 0,
c_prog_full_thresh_negate_val => 1020,
c_wr_depth => 1024,
c_prog_empty_thresh_negate_val => 3,
c_prog_empty_thresh_assert_val => 2,
c_has_valid => 0,
c_init_wr_pntr_val => 0,
c_prog_full_thresh_assert_val => 1021,
c_use_fifo16_flags => 0,
c_has_backup => 0,
c_valid_low => 0,
c_prim_fifo_type => "1kx36",
c_count_type => 0,
c_prog_full_type => 0,
c_memory_type => 1);
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_fifa
port map (
din => din,
rd_clk => rd_clk,
rd_en => rd_en,
rst => rst,
wr_clk => wr_clk,
wr_en => wr_en,
dout => dout,
empty => empty,
full => full);
-- synthesis translate_on

END fifa_a;


There are 2 parameters: c_din_width =>36 and c_dout_width => 36. I can't
use here values greater than 36. What is the use of this parameters? Can I
change this parameters values to i.e. 20?
I would like to use the queue with different sizes of the data bus. Is it a
good solution to create a maximum size data bus and use it to write there
smaller data?
Or maybe it is better to create a 1bit queue, and with the use of GENERATE
command generate N 1 bit queues to have a N-bit queue?

Device is Virtex2Pro.

Regards,
zlotawy


Reply With Quote
  #2 (permalink)  
Old 11-14-2007, 10:35 PM
Peter Alfke
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx

A large asynchronous FIFO will always most efficiently be implemented
in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
bits. If you need a different width, just pad it to the higher value.
Also Din and Dout have the same width.
Anything different will get very complicated...
The main problem in the design of asynchronous (2-clock) FIFOs is the
reliable generation of the Full and Empty flags at high clock rates.
Peter Alfke, Xilinx

On Nov 14, 11:37 am, "zlotawy" <[email protected]_SPAM_orange.pl> wrote:
> Hello,
> I have generated a block-ram based FIFO queue (2 independent clocks, 2
> inputs, 1 output) with the use of Core Generator. In the creator I used the
> 36 bit data bus. Is it possible to parameterize this variable?
> I think, that the Xilinx doesn't give such possibility. The generated code:
>
> LIBRARY ieee;
> USE ieee.std_logic_1164.ALL;
> -- synthesis translate_off
> Library XilinxCoreLib;
> -- synthesis translate_on
> ENTITY fifa IS
> port (
> din: IN std_logic_VECTOR(35 downto 0);
> rd_clk: IN std_logic;
> rd_en: IN std_logic;
> rst: IN std_logic;
> wr_clk: IN std_logic;
> wr_en: IN std_logic;
> dout: OUT std_logic_VECTOR(35 downto 0);
> empty: OUT std_logic;
> full: OUT std_logic);
> END fifa;
>
> ARCHITECTURE fifa_a OF fifa IS
> -- synthesis translate_off
> component wrapped_fifa
> port (
> din: IN std_logic_VECTOR(35 downto 0);
> rd_clk: IN std_logic;
> rd_en: IN std_logic;
> rst: IN std_logic;
> wr_clk: IN std_logic;
> wr_en: IN std_logic;
> dout: OUT std_logic_VECTOR(35 downto 0);
> empty: OUT std_logic;
> full: OUT std_logic);
> end component;
>
> -- Configuration specification
> for all : wrapped_fifa use entity
> XilinxCoreLib.fifo_generator_v4_1(behavioral)
> generic map(
> c_has_int_clk => 0,
> c_rd_freq => 1,
> c_wr_response_latency => 1,
> c_has_srst => 0,
> c_has_rd_data_count => 0,
> c_din_width => 36,
> c_has_wr_data_count => 0,
> c_full_flags_rst_val => 1,
> c_implementation_type => 2,
> c_family => "virtex2p",
> c_use_embedded_reg => 0,
> c_has_wr_rst => 0,
> c_wr_freq => 1,
> c_underflow_low => 0,
> c_has_meminit_file => 0,
> c_has_overflow => 0,
> c_preload_latency => 1,
> c_dout_width => 36,
> c_rd_depth => 1024,
> c_default_value => "BlankString",
> c_mif_file_name => "BlankString",
> c_has_underflow => 0,
> c_has_rd_rst => 0,
> c_has_almost_full => 0,
> c_has_rst => 1,
> c_data_count_width => 10,
> c_has_wr_ack => 0,
> c_use_ecc => 0,
> c_wr_ack_low => 0,
> c_common_clock => 0,
> c_rd_pntr_width => 10,
> c_use_fwft_data_count => 0,
> c_has_almost_empty => 0,
> c_rd_data_count_width => 10,
> c_enable_rlocs => 0,
> c_wr_pntr_width => 10,
> c_overflow_low => 0,
> c_prog_empty_type => 0,
> c_optimization_mode => 0,
> c_wr_data_count_width => 10,
> c_preload_regs => 0,
> c_dout_rst_val => "0",
> c_has_data_count => 0,
> c_prog_full_thresh_negate_val => 1020,
> c_wr_depth => 1024,
> c_prog_empty_thresh_negate_val => 3,
> c_prog_empty_thresh_assert_val => 2,
> c_has_valid => 0,
> c_init_wr_pntr_val => 0,
> c_prog_full_thresh_assert_val => 1021,
> c_use_fifo16_flags => 0,
> c_has_backup => 0,
> c_valid_low => 0,
> c_prim_fifo_type => "1kx36",
> c_count_type => 0,
> c_prog_full_type => 0,
> c_memory_type => 1);
> -- synthesis translate_on
> BEGIN
> -- synthesis translate_off
> U0 : wrapped_fifa
> port map (
> din => din,
> rd_clk => rd_clk,
> rd_en => rd_en,
> rst => rst,
> wr_clk => wr_clk,
> wr_en => wr_en,
> dout => dout,
> empty => empty,
> full => full);
> -- synthesis translate_on
>
> END fifa_a;
>
> There are 2 parameters: c_din_width =>36 and c_dout_width => 36. I can't
> use here values greater than 36. What is the use of this parameters? Can I
> change this parameters values to i.e. 20?
> I would like to use the queue with different sizes of the data bus. Is it a
> good solution to create a maximum size data bus and use it to write there
> smaller data?
> Or maybe it is better to create a 1bit queue, and with the use of GENERATE
> command generate N 1 bit queues to have a N-bit queue?
>
> Device is Virtex2Pro.
>
> Regards,
> zlotawy



Reply With Quote
  #3 (permalink)  
Old 11-14-2007, 10:45 PM
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx

Hi,

I think the OP wanted to know if he could parallel a width-2 and a
width-18 to make a width-20.

I've never tried it, but I can't think of a reason that it wouldn't
work. And I would not be surprised to find that the logic optimizer
found the two identical FIFO controllers, and collapsed them.

G.



On Nov 14, 2:35 pm, Peter Alfke <[email protected]> wrote:
> A large asynchronous FIFO will always most efficiently be implemented
> in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
> bits. If you need a different width, just pad it to the higher value.
> Also Din and Dout have the same width.
> Anything different will get very complicated...
> The main problem in the design of asynchronous (2-clock) FIFOs is the
> reliable generation of the Full and Empty flags at high clock rates.
> Peter Alfke, Xilinx
>
> On Nov 14, 11:37 am, "zlotawy" <[email protected]_SPAM_orange.pl> wrote:
>
> > Hello,
> > I have generated a block-ram based FIFO queue (2 independent clocks, 2
> > inputs, 1 output) with the use of Core Generator. In the creator I used the
> > 36 bit data bus. Is it possible to parameterize this variable?
> > I think, that the Xilinx doesn't give such possibility. The generated code:

>
> > LIBRARY ieee;
> > USE ieee.std_logic_1164.ALL;
> > -- synthesis translate_off
> > Library XilinxCoreLib;
> > -- synthesis translate_on
> > ENTITY fifa IS
> > port (
> > din: IN std_logic_VECTOR(35 downto 0);
> > rd_clk: IN std_logic;
> > rd_en: IN std_logic;
> > rst: IN std_logic;
> > wr_clk: IN std_logic;
> > wr_en: IN std_logic;
> > dout: OUT std_logic_VECTOR(35 downto 0);
> > empty: OUT std_logic;
> > full: OUT std_logic);
> > END fifa;

>
> > ARCHITECTURE fifa_a OF fifa IS
> > -- synthesis translate_off
> > component wrapped_fifa
> > port (
> > din: IN std_logic_VECTOR(35 downto 0);
> > rd_clk: IN std_logic;
> > rd_en: IN std_logic;
> > rst: IN std_logic;
> > wr_clk: IN std_logic;
> > wr_en: IN std_logic;
> > dout: OUT std_logic_VECTOR(35 downto 0);
> > empty: OUT std_logic;
> > full: OUT std_logic);
> > end component;

>
> > -- Configuration specification
> > for all : wrapped_fifa use entity
> > XilinxCoreLib.fifo_generator_v4_1(behavioral)
> > generic map(
> > c_has_int_clk => 0,
> > c_rd_freq => 1,
> > c_wr_response_latency => 1,
> > c_has_srst => 0,
> > c_has_rd_data_count => 0,
> > c_din_width => 36,
> > c_has_wr_data_count => 0,
> > c_full_flags_rst_val => 1,
> > c_implementation_type => 2,
> > c_family => "virtex2p",
> > c_use_embedded_reg => 0,
> > c_has_wr_rst => 0,
> > c_wr_freq => 1,
> > c_underflow_low => 0,
> > c_has_meminit_file => 0,
> > c_has_overflow => 0,
> > c_preload_latency => 1,
> > c_dout_width => 36,
> > c_rd_depth => 1024,
> > c_default_value => "BlankString",
> > c_mif_file_name => "BlankString",
> > c_has_underflow => 0,
> > c_has_rd_rst => 0,
> > c_has_almost_full => 0,
> > c_has_rst => 1,
> > c_data_count_width => 10,
> > c_has_wr_ack => 0,
> > c_use_ecc => 0,
> > c_wr_ack_low => 0,
> > c_common_clock => 0,
> > c_rd_pntr_width => 10,
> > c_use_fwft_data_count => 0,
> > c_has_almost_empty => 0,
> > c_rd_data_count_width => 10,
> > c_enable_rlocs => 0,
> > c_wr_pntr_width => 10,
> > c_overflow_low => 0,
> > c_prog_empty_type => 0,
> > c_optimization_mode => 0,
> > c_wr_data_count_width => 10,
> > c_preload_regs => 0,
> > c_dout_rst_val => "0",
> > c_has_data_count => 0,
> > c_prog_full_thresh_negate_val => 1020,
> > c_wr_depth => 1024,
> > c_prog_empty_thresh_negate_val => 3,
> > c_prog_empty_thresh_assert_val => 2,
> > c_has_valid => 0,
> > c_init_wr_pntr_val => 0,
> > c_prog_full_thresh_assert_val => 1021,
> > c_use_fifo16_flags => 0,
> > c_has_backup => 0,
> > c_valid_low => 0,
> > c_prim_fifo_type => "1kx36",
> > c_count_type => 0,
> > c_prog_full_type => 0,
> > c_memory_type => 1);
> > -- synthesis translate_on
> > BEGIN
> > -- synthesis translate_off
> > U0 : wrapped_fifa
> > port map (
> > din => din,
> > rd_clk => rd_clk,
> > rd_en => rd_en,
> > rst => rst,
> > wr_clk => wr_clk,
> > wr_en => wr_en,
> > dout => dout,
> > empty => empty,
> > full => full);
> > -- synthesis translate_on

>
> > END fifa_a;

>
> > There are 2 parameters: c_din_width =>36 and c_dout_width => 36. I can't
> > use here values greater than 36. What is the use of this parameters? Can I
> > change this parameters values to i.e. 20?
> > I would like to use the queue with different sizes of the data bus. Is it a
> > good solution to create a maximum size data bus and use it to write there
> > smaller data?
> > Or maybe it is better to create a 1bit queue, and with the use of GENERATE
> > command generate N 1 bit queues to have a N-bit queue?

>
> > Device is Virtex2Pro.

>
> > Regards,
> > zlotawy


Reply With Quote
  #4 (permalink)  
Old 11-14-2007, 11:15 PM
Peter Alfke
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx

In a BlockRAM implementation, this does not make any sense, for width
18 and width 2 have the same cost. Widt 2 is just 9 times deeper,
whether you want that or not.
Paralleling or cascading FIFO-BlockRAMs only makes sense when one
BlockRAM is insufficient, and the designer is experienced and
understand the trade-off.
Remember, excessive depth or width has no impact, as long as the FIFO
fits into one BlockRAM.
Stitching together RAM-based and LUT-based FIFOs is something for the
brave and experienced.
Peter Alfke

On Nov 14, 2:45 pm, [email protected] wrote:
> Hi,
>
> I think the OP wanted to know if he could parallel a width-2 and a
> width-18 to make a width-20.
>
> I've never tried it, but I can't think of a reason that it wouldn't
> work. And I would not be surprised to find that the logic optimizer
> found the two identical FIFO controllers, and collapsed them.
>
> G.
>
> On Nov 14, 2:35 pm, Peter Alfke <[email protected]> wrote:
>
> > A large asynchronous FIFO will always most efficiently be implemented
> > in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
> > bits. If you need a different width, just pad it to the higher value.
> > Also Din and Dout have the same width.
> > Anything different will get very complicated...
> > The main problem in the design of asynchronous (2-clock) FIFOs is the
> > reliable generation of the Full and Empty flags at high clock rates.
> > Peter Alfke, Xilinx

>
> > On Nov 14, 11:37 am, "zlotawy" <[email protected]_SPAM_orange.pl> wrote:

>
> > > Hello,
> > > I have generated a block-ram based FIFO queue (2 independent clocks, 2
> > > inputs, 1 output) with the use of Core Generator. In the creator I used the
> > > 36 bit data bus. Is it possible to parameterize this variable?
> > > I think, that the Xilinx doesn't give such possibility. The generated code:

>
> > > LIBRARY ieee;
> > > USE ieee.std_logic_1164.ALL;
> > > -- synthesis translate_off
> > > Library XilinxCoreLib;
> > > -- synthesis translate_on
> > > ENTITY fifa IS
> > > port (
> > > din: IN std_logic_VECTOR(35 downto 0);
> > > rd_clk: IN std_logic;
> > > rd_en: IN std_logic;
> > > rst: IN std_logic;
> > > wr_clk: IN std_logic;
> > > wr_en: IN std_logic;
> > > dout: OUT std_logic_VECTOR(35 downto 0);
> > > empty: OUT std_logic;
> > > full: OUT std_logic);
> > > END fifa;

>
> > > ARCHITECTURE fifa_a OF fifa IS
> > > -- synthesis translate_off
> > > component wrapped_fifa
> > > port (
> > > din: IN std_logic_VECTOR(35 downto 0);
> > > rd_clk: IN std_logic;
> > > rd_en: IN std_logic;
> > > rst: IN std_logic;
> > > wr_clk: IN std_logic;
> > > wr_en: IN std_logic;
> > > dout: OUT std_logic_VECTOR(35 downto 0);
> > > empty: OUT std_logic;
> > > full: OUT std_logic);
> > > end component;

>
> > > -- Configuration specification
> > > for all : wrapped_fifa use entity
> > > XilinxCoreLib.fifo_generator_v4_1(behavioral)
> > > generic map(
> > > c_has_int_clk => 0,
> > > c_rd_freq => 1,
> > > c_wr_response_latency => 1,
> > > c_has_srst => 0,
> > > c_has_rd_data_count => 0,
> > > c_din_width => 36,
> > > c_has_wr_data_count => 0,
> > > c_full_flags_rst_val => 1,
> > > c_implementation_type => 2,
> > > c_family => "virtex2p",
> > > c_use_embedded_reg => 0,
> > > c_has_wr_rst => 0,
> > > c_wr_freq => 1,
> > > c_underflow_low => 0,
> > > c_has_meminit_file => 0,
> > > c_has_overflow => 0,
> > > c_preload_latency => 1,
> > > c_dout_width => 36,
> > > c_rd_depth => 1024,
> > > c_default_value => "BlankString",
> > > c_mif_file_name => "BlankString",
> > > c_has_underflow => 0,
> > > c_has_rd_rst => 0,
> > > c_has_almost_full => 0,
> > > c_has_rst => 1,
> > > c_data_count_width => 10,
> > > c_has_wr_ack => 0,
> > > c_use_ecc => 0,
> > > c_wr_ack_low => 0,
> > > c_common_clock => 0,
> > > c_rd_pntr_width => 10,
> > > c_use_fwft_data_count => 0,
> > > c_has_almost_empty => 0,
> > > c_rd_data_count_width => 10,
> > > c_enable_rlocs => 0,
> > > c_wr_pntr_width => 10,
> > > c_overflow_low => 0,
> > > c_prog_empty_type => 0,
> > > c_optimization_mode => 0,
> > > c_wr_data_count_width => 10,
> > > c_preload_regs => 0,
> > > c_dout_rst_val => "0",
> > > c_has_data_count => 0,
> > > c_prog_full_thresh_negate_val => 1020,
> > > c_wr_depth => 1024,
> > > c_prog_empty_thresh_negate_val => 3,
> > > c_prog_empty_thresh_assert_val => 2,
> > > c_has_valid => 0,
> > > c_init_wr_pntr_val => 0,
> > > c_prog_full_thresh_assert_val => 1021,
> > > c_use_fifo16_flags => 0,
> > > c_has_backup => 0,
> > > c_valid_low => 0,
> > > c_prim_fifo_type => "1kx36",
> > > c_count_type => 0,
> > > c_prog_full_type => 0,
> > > c_memory_type => 1);
> > > -- synthesis translate_on
> > > BEGIN
> > > -- synthesis translate_off
> > > U0 : wrapped_fifa
> > > port map (
> > > din => din,
> > > rd_clk => rd_clk,
> > > rd_en => rd_en,
> > > rst => rst,
> > > wr_clk => wr_clk,
> > > wr_en => wr_en,
> > > dout => dout,
> > > empty => empty,
> > > full => full);
> > > -- synthesis translate_on

>
> > > END fifa_a;

>
> > > There are 2 parameters: c_din_width =>36 and c_dout_width => 36. I can't
> > > use here values greater than 36. What is the use of this parameters? Can I
> > > change this parameters values to i.e. 20?
> > > I would like to use the queue with different sizes of the data bus. Is it a
> > > good solution to create a maximum size data bus and use it to write there
> > > smaller data?
> > > Or maybe it is better to create a 1bit queue, and with the use of GENERATE
> > > command generate N 1 bit queues to have a N-bit queue?

>
> > > Device is Virtex2Pro.

>
> > > Regards,
> > > zlotawy



Reply With Quote
  #5 (permalink)  
Old 11-15-2007, 11:14 AM
zlotawy
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx


Uzytkownik "Peter Alfke" <[email protected]> napisal w wiadomosci
news:[email protected] ps.com...
>A large asynchronous FIFO will always most efficiently be implemented
> in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
> bits. If you need a different width, just pad it to the higher value.
> Also Din and Dout have the same width.
> Anything different will get very complicated...


> The main problem in the design of asynchronous (2-clock) FIFOs is the
> reliable generation of the Full and Empty flags at high clock rates.


hmmm... which clock sets flags?

And what if two clocks are the same? Then should I change type of fifo (one
clock)?

zlotawy


Reply With Quote
  #6 (permalink)  
Old 11-15-2007, 10:22 PM
Peter Alfke
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx

On Nov 15, 3:14 am, "zlotawy" <[email protected]_SPAM_orange.pl> wrote:
> Uzytkownik "Peter Alfke" <[email protected]> napisal w wiadomoscinews:[email protected] googlegroups.com...
>
> >A large asynchronous FIFO will always most efficiently be implemented
> > in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
> > bits. If you need a different width, just pad it to the higher value.
> > Also Din and Dout have the same width.
> > Anything different will get very complicated...
> > The main problem in the design of asynchronous (2-clock) FIFOs is the
> > reliable generation of the Full and Empty flags at high clock rates.

>
> hmmm... which clock sets flags?
>
> And what if two clocks are the same? Then should I change type of fifo (one
> clock)?
>
> zlotawy


If both clocks are the same, the design becomes a trivial synchronous
state machine. Only fast asynchronous FIFO controllers are tricky and
somewhat controversial, due to the metastable risk and its avoidance.
Peter Alfke
Reply With Quote
  #7 (permalink)  
Old 11-16-2007, 05:56 PM
zlotawy
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx


Uzytkownik "Peter Alfke" <[email protected]> napisal w wiadomosci
news:[email protected]m...
> On Nov 15, 3:14 am, "zlotawy" <[email protected]_SPAM_orange.pl> wrote:
>> Uzytkownik "Peter Alfke" <[email protected]> napisal w
>> wiadomoscinews:[email protected] googlegroups.com...
>>
>> >A large asynchronous FIFO will always most efficiently be implemented
>> > in a dual-ported BlockRAM, and have a width of 1, 2, 4, 9, 18, or 36
>> > bits. If you need a different width, just pad it to the higher value.
>> > Also Din and Dout have the same width.
>> > Anything different will get very complicated...
>> > The main problem in the design of asynchronous (2-clock) FIFOs is the
>> > reliable generation of the Full and Empty flags at high clock rates.

>>
>> hmmm... which clock sets flags?
>>
>> And what if two clocks are the same? Then should I change type of fifo
>> (one
>> clock)?
>>
>> zlotawy

>
> If both clocks are the same, the design becomes a trivial synchronous
> state machine. Only fast asynchronous FIFO controllers are tricky and
> somewhat controversial, due to the metastable risk and its avoidance.
> Peter Alfke


and what about FIFO with 200MHz clock? Device is Virtex 2P. Is it too fast?

zlotawy


Reply With Quote
  #8 (permalink)  
Old 11-16-2007, 06:58 PM
Ray Andraka
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx

zlotawy wrote:


>>If both clocks are the same, the design becomes a trivial synchronous
>>state machine. Only fast asynchronous FIFO controllers are tricky and
>>somewhat controversial, due to the metastable risk and its avoidance.
>>Peter Alfke

>
>
> and what about FIFO with 200MHz clock? Device is Virtex 2P. Is it too fast?
>
> zlotawy
>
>


A virtex 2P is quite capable of a 200 MHz synchronous FIFO. YOu'll have
to be somewhat careful in the design, particularly in limiting the
levels of logic between successive flip-flops,and you may have to do
some floorplanning, but it is quite possible.
Reply With Quote
  #9 (permalink)  
Old 11-16-2007, 07:26 PM
Peter Alfke
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx

I agree with Ray (as always).
What is the data width and addressing depth of your synchronous FIFO?
Peter Alfke, Xilinx

On Nov 16, 10:58 am, Ray Andraka <[email protected]> wrote:
> zlotawy wrote:
> >>If both clocks are the same, the design becomes a trivial synchronous
> >>state machine. Only fast asynchronous FIFO controllers are tricky and
> >>somewhat controversial, due to the metastable risk and its avoidance.
> >>Peter Alfke

>
> > and what about FIFO with 200MHz clock? Device is Virtex 2P. Is it too fast?

>
> > zlotawy

>
> A virtex 2P is quite capable of a 200 MHz synchronous FIFO. YOu'll have
> to be somewhat careful in the design, particularly in limiting the
> levels of logic between successive flip-flops,and you may have to do
> some floorplanning, but it is quite possible.


Reply With Quote
  #10 (permalink)  
Old 11-17-2007, 04:04 PM
zlotawy
Guest
 
Posts: n/a
Default Re: Block-ram FIFO in Xilinx


Uzytkownik "Peter Alfke" <[email protected]> napisal w wiadomosci
news:[email protected]m...
>I agree with Ray (as always).
> What is the data width and addressing depth of your synchronous FIFO?
> Peter Alfke, Xilinx
>





data width is 36 bits or 128.
Depth hmmmm .. I think about 100 words..

zlotawy


Reply With Quote
Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Xilinx FIFO Generator: FIFO Length Nemesis FPGA 9 10-26-2005 03:32 PM
FIFO design using Virtex-II block ram.. Remco FPGA 6 09-15-2005 05:24 AM
How to determine number of block rams in a Coregen Fifo rootz Verilog 4 06-11-2005 05:35 PM
Generating Asynchronous FIFO in Block Memory of Sparatn-II in CoreGen Atif FPGA 0 09-03-2003 05:30 AM


All times are GMT +1. The time now is 09:58 AM.


Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright 2008 @ FPGA Central. All rights reserved