Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarAprMayJunJulAugSepOctNovDec2017
2018JanFebMarAprMayJunJulAugSepOctNovDec2018
2019JanFebMarAprMayJunJulAugSepOctNovDec2019
2020JanFebMarAprMay2020

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search

Messages from 92550

Article: 92550
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Ray Andraka <ray@andraka.com>
Date: Thu, 01 Dec 2005 10:32:59 -0500
Links: << >>  << T >>  << A >>
Sylvain Munaut wrote:
> Hi,
> 
> 
> We're faced with a strange problem ...
> While investigating a bug in one design, we could only observe that
> behavior on real board and not in simulation.
> 
> Using chipscope, we finally traced down the problem by monitoring
> both write and read port of a FIFO16 configured as 18x1024, using the
> same rd/wr clocks. That fifo was used in a "weird" way, by setting a
> ALMOSTFULL threshold very high (but still within spec), so that it turn
> on very quicly. And what we observed is that we push a data with some
> parity bits (which are not 'true' parity but some critical control), we
> continue to push, the almost full goes up (normal), and we still push
> (we still have plenty of room) and at the same time we re-read but
> slower (not at each clock cycle) and when we finally re-read the data
> where the parity bit was set, the data (15:0) are there but the parity
> bit is not, it's just 0 ...
> 
> The chipscope 'probes' were tied directly to the fifo signals, no logic
> in between. That fifo is supposed to cross clock domains but for
> debugging, we just sent the same clock everywhere. And the behavior of
> the surrounding logic is consitent with that bit being missed.
> 
> Instead of using ALMOSTFULL set to a very high value, we used not
> ALMOSTEMPTY (here since we're debugging with just 1 clock domain, it's
> ok), and there it looks like we never observe such a miss.
> 
> 
> Has someone ever observed such a behavior ?
> 
> 
> 
> 	Sylvain

Have you got any resolution on this?  Have you opened a case with 
Xilinx? What does Xilinx have to say about it?

I am aware that some people have had problems with the FIFO16 not 
working correctly.  I had an issue with trying to use the FIFO as a 
synchronous fifo (it is async, so there is a possibility with some 
ambiguity on the flag latency when both clocks are the same). I have 
asked Xilinx repeatedly to document this behavior prominently in the 
user guide, but so far they have only quietly acknowledged that the user 
has to be careful if read and write clocks are the same.

That said, your problem is different than the one I experienced and 
appears to be a more serious problem in the FIFO16 logic. You are not 
the first person I've heard state they had problems with the fifo16 
async behavior.  There may be some issues with the flag logic for 
asynchronous use as well.

I do find it interesting that Altera was forthcoming with their recent
problems with dual port memories.  I hope that Xilinx is equally 
forthcoming if there is indeed a problem with the FIFO16 logic.


Article: 92551
Subject: Re: Xilinx Coregen IP Customizer Causes Exception During Customization
From: dean.dunnigan@gmail.com
Date: 1 Dec 2005 07:40:26 -0800
Links: << >>  << T >>  << A >>
Hi Fred:

I am also getting the same error.  Interestingly enough, I am using the
same version of ISE,  same IP update, and same version of Windows XP.
I've also tried Dual Port Block Mem versions 6.1 and 6.2 in the CoreGen
tool and get the same error.  In my application, I am targetting a
VirtexII.

I'm not aware of any work-arounds but also hoping someone can jump in
and provide suggestions!


Dean.


Article: 92552
Subject: Re: Xilinx 'unconstrained period' problem
From: "John McCaskill" <junkmail@fastertechnology.com>
Date: 1 Dec 2005 07:43:54 -0800
Links: << >>  << T >>  << A >>
johnp wrote:
> I'm using a Xilinx V2Pro part with the 6.2.03i s/w release and I'm
> seeing the
> following unconstrained path in the timing report:
>
> ================================================================================
> Timing constraint: Unconstrained period analysis for net "clk_conv"
>
> Delay:                  3.073ns (data path - clock path skew +
> uncertainty)
>   Source:               u0clk_trig_if/trig_conv0 (FF)
>   Destination:          u0clk_trig_if/trig_conv1 (FF)
>   Data Path Delay:      3.073ns (Levels of Logic = 0)
>   Clock Path Skew:      0.000ns
>   Source Clock:         clk_conv rising at 0.000ns
>   Destination Clock:    clk_conv rising at 2.450ns
>   Clock Uncertainty:    0.000ns
>
>   Data Path: u0clk_trig_if/trig_conv0 to u0clk_trig_if/trig_conv1
>     Location             Delay type         Delay(ns)  Physical
> Resource
>                                                        Logical
> Resource(s)
>     -------------------------------------------------
> -------------------
>     SLICE_X32Y0.YQ       Tcko                  0.419
> u0clk_trig_if/trig_conv0
>
> u0clk_trig_if/trig_conv0
>     SLICE_X25Y9.BY       net (fanout=2)        2.428
> u0clk_trig_if/trig_conv0
>     SLICE_X25Y9.CLK      Tdick                 0.226
> u0clk_trig_if/trig_conv1
>
> u0clk_trig_if/trig_conv1
>     -------------------------------------------------
> ---------------------------
>     Total                                      3.073ns (0.645ns logic,
> 2.428ns route)
>                                                        (21.0% logic,
> 79.0% route)
>
>
>
> In my .ucf file, I have set the period on clk_conv, so I don't see why
> I'm getting this unconstrained path. In fact, in another section of the
> timing
> report, I see:
>
> ================================================================================
> Timing constraint: TS_clk_conv = PERIOD TIMEGRP "clk_conv"  2.450 nS
> HIGH 50.000000 % ;
>
>  4 items analyzed, 0 timing errors detected. (0 setup errors, 0 hold
> errors)
>
>
> Thus, I believe the constraint on clk_conv is entered correctly, but
> for some reason
> the tools appear to ignore the constraint on some of the registers
> driven by the
> clock.
>
> My Verilog code has the registers trig_conv1 and trig_conv0 in the same
> always
> block with the proper clock edge.  The code seems straight forward, so
> I don't
> see how the coding style could cause this.
>
>
>
> Any ideas?
>
> Thanks
>
> John Providenza

I recently encountered a case in which timing constraints were not
applied to inputs of RAM16X1Ds.  This was for a V4FX60 using ISE 7.1
service pack 4.  I opened a web case and sent them the design to look
at, and they came up with a work around for me, and filed a change
request to have the problem fixed.  Here is a copy of the response that
explains the work around:

Hi John,

I have found a work around to this issue. You can manually add the
missing elements into the time group in the PCF file before running
PAR.

1. Open the PCF file in a text editor.
2. Locate the TIMEGRP mem_interface_top_0_infrastructure0_clk0_bufg_in
3. Add the following line:
BEL
?mem_interface_top_0/main_00/top_00/user_interface_00/rd_data_00/rd_data_fifo1/ram_fall0/RAM16X1D[31].U_.WE?

4. Repeat this for each bit of the RAM that is showing up in the
unconstrained section.

Just remember to backup the PCF because if you re-run Map it will
overwrite the file and your changes will be lost. Also, the change
request number is 219222. If you need to check the status you can ping
me or call the hotline number.


The details are specific to what I was working on, but you should be
able to modify them to fit your case. I am working on a different part
of the design at the moment, so I have not tried this workaround yet.
If you open a web case, refer them to case 601820, which is the one I
opened.

Regards,

John McCaskill


Article: 92553
Subject: Re: Download old Quartus versions (4.0, 4.1)
From: amyler@eircom.net
Date: 1 Dec 2005 08:25:35 -0800
Links: << >>  << T >>  << A >>
If there's a "sloppy timing dependence" in the design then it's
one of those things that is worth fixing sooner rather than later,
regardless of what tool version you're using.

My comment is based on past experience....

Alan


Article: 92554
Subject: Re: Help : Code works in synthesizer (silos), but warnings w/ webpack
From: "gallen" <arlencox@gmail.com>
Date: 1 Dec 2005 08:31:10 -0800
Links: << >>  << T >>  << A >>
You have a couple of things to straighten out here (I didn't check your
logic for you, I just looked at a few constructs).

The biggest mistake you've made is that you mixed your logic with your
test bench.  Xilinx has no way of knowing which is which since they're
both written in verilog.  What you need to do is put all of your logic
(the stuff that will go into the CPLD) in one file and then instantiate
that logic in your testbench.

I'll go through a couple of problems here:

* Delays are always ignored for synthesis.  They shouldn't be needed in
your logic.  If they are, it is probably flawed logic, or perhaps an
ugly hack to get around some other problem.
* Initial blocks are ignored for synthesis (usually, though this is not
necessarily the case).  You should use either an asynchronous reset or
a synchronous reset instead.
* The following logic is bad since it is a combinational block that
does not have all inputs declared.

        /* GENERATE SCK WHEN outClock HIGH */
        /* SCK = CLOCK/8 */
        always @(clk) begin
                if (outClock == 1) begin
                        sck = !sck;
                        #4;
                end else
                        sck = 1;
        end

For this block, you must get rid of the delays and add sck to the
sensitivity list, but this logic will still not work.  You can either
have two clock domains, one for sck and one for clk, or you can make a
state machine that outputs an enable bit for other logic.  For example:

reg [2:0] dly_count;
reg enable_sck;

always @ (posedge clk or negedge rst)
begin
  if(!rst)
    dly_count <= 3'h0;
  else
  begin
    dly_count <= dly_count + 1;
  end
end

always @(dly_count)
begin
  if(dly_count == 3'b111)
    enable_sck = 1'b1;
  else
    enable_sck = 1'b0;
end

What this logic will do (assuming I didn't make a mistake, which is
possible; it's untested) is set enable_sck high 1 clock out of every 8.
 What you can then do is for all logic that uses the sck, you enable it
with the enable_sck, so for example:

//shift register that shifts on "sck"

reg [3:0] sreg;
reg shift_out;

always @ (posedge clk or negedge rst)
begin
  if(!rst)
    sreg <= 4'h0;
  else
  begin
    if(enable_sck)
      {shift_out,sreg} <= {sreg[3:0],shift_in};
  end
end

Another mistake is perhaps the repeat command.  I'm not sure that it
can be synthesized.  It might be able to be by some synthesizers (I'm
amazed by the strange stuff that design compiler can synthesize), but I
would still not recommend it.  In the way that you used it though, I
would never expect it to work.  You can't write serialized logic the
way you did since delays are not synthesized.  All of that repeat(16)
block would happen in 0 time (theoretically).

There are a lot of flaws in your design (ignoring checking actual
logic).  You probably should read the XST users guide from xilinx.
It's available for free on the web.  It will tell you what kinds of
logic you can synthesize and give you a good idea of good design
practices.

CPLDs and FPGAs, while not exactly like ASICs, are very similar.  They
at the very least require the same methodology.  Remember that this is
a digital design and not an embedded system and that there isn't really
such a thing as a "delay" in rtl and that everything should happen
synchronous to a clock.

Perhaps you should also look through some examples at fpga4fun.com to
get a better idea of what can be done with FPGAs and CPLDs.  If you
have any questions though on how something works or what might be the
best way of writing something (out of several possibilities that you
have written), please post back here at comp.arch.fpga.  Folks are
pretty helpful when it comes to specific questions.

Good Luck,
Arlen


Article: 92555
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Austin Lesea <austin@xilinx.com>
Date: Thu, 01 Dec 2005 09:06:23 -0800
Links: << >>  << T >>  << A >>
Ray,

The bug for use of the async FIFO synchronously has been acknolwedged, 
and we apologize for not getting it out there more prominently.  But:

In our defense, it is unusual (or at least, so far we think it is 
unusual) where the read and write clocks are tied directly together (why 
use a FIFO at all?  I guess it is a really useful structure, so even 
when used this way it is too useful to ignore....?).

The solution is to not source the two clocks from the same source 
directly, but place a small delay in one, or the other.

The problem does not exist in the asynchronous case, as it takes two 
subsequent clock cycles on BOTH clocks (at exactly the wrong times) to 
cause the problem.  As long as the probability of two adjacent clock 
cyles not coming in on both clocks exactly the same just as you are 
getting full (or is it empty? I'm not the expert on this), it works fine.

Sometimes with problems like this (that are difficult to even cause) it 
doesn't make sense to put up a billboard that it is an issue, as then 
everyone comes down with the disease (mass hypochrondira) when they 
don't really have the problem.

Now, if the feature is just plain broke, then it is a different story, 
and we will end the pain as soon as we are sure it is just plain broke.

No one is intentionally hiding anything, but we are judiciously placing 
(obscure) bug information only with the hotline and support community, 
rather than broadcasting it across the entire user community publicy.

If, for any reason, you feel that you have caught the disease (have a 
bug we haven't shared universally), the entry of a webcase will get you 
the help you need, as the hotline will search for all such issues.  If 
yours is there, then we will immediately share with you the solution.

These are known as "internal answers" and it isn't that we don't want to 
share them, we just don't think they are likely issues for everyone. 
Better to talk to you and find out what the problem is, first.

If these internal answers are made external, we imagine there would be 
thousands of designers running down debug paths that are so obscure, 
there is almost no chance they will find this as their problem.  Then we 
get a bad reputation, and the hotline is overwhelmed with folks who all 
think they have this obscure problem!

I hope folks will appreciate that sometimes telling every strange and 
obscure story causes more trouble than selectively understanding each 
issue that arises, and dealing with it directly.

Support:  it is an art.

Austin


Ray Andraka wrote:

> Sylvain Munaut wrote:
> 
>> Hi,
>>
>>
>> We're faced with a strange problem ...
>> While investigating a bug in one design, we could only observe that
>> behavior on real board and not in simulation.
>>
>> Using chipscope, we finally traced down the problem by monitoring
>> both write and read port of a FIFO16 configured as 18x1024, using the
>> same rd/wr clocks. That fifo was used in a "weird" way, by setting a
>> ALMOSTFULL threshold very high (but still within spec), so that it turn
>> on very quicly. And what we observed is that we push a data with some
>> parity bits (which are not 'true' parity but some critical control), we
>> continue to push, the almost full goes up (normal), and we still push
>> (we still have plenty of room) and at the same time we re-read but
>> slower (not at each clock cycle) and when we finally re-read the data
>> where the parity bit was set, the data (15:0) are there but the parity
>> bit is not, it's just 0 ...
>>
>> The chipscope 'probes' were tied directly to the fifo signals, no logic
>> in between. That fifo is supposed to cross clock domains but for
>> debugging, we just sent the same clock everywhere. And the behavior of
>> the surrounding logic is consitent with that bit being missed.
>>
>> Instead of using ALMOSTFULL set to a very high value, we used not
>> ALMOSTEMPTY (here since we're debugging with just 1 clock domain, it's
>> ok), and there it looks like we never observe such a miss.
>>
>>
>> Has someone ever observed such a behavior ?
>>
>>
>>
>>     Sylvain
> 
> 
> Have you got any resolution on this?  Have you opened a case with 
> Xilinx? What does Xilinx have to say about it?
> 
> I am aware that some people have had problems with the FIFO16 not 
> working correctly.  I had an issue with trying to use the FIFO as a 
> synchronous fifo (it is async, so there is a possibility with some 
> ambiguity on the flag latency when both clocks are the same). I have 
> asked Xilinx repeatedly to document this behavior prominently in the 
> user guide, but so far they have only quietly acknowledged that the user 
> has to be careful if read and write clocks are the same.
> 
> That said, your problem is different than the one I experienced and 
> appears to be a more serious problem in the FIFO16 logic. You are not 
> the first person I've heard state they had problems with the fifo16 
> async behavior.  There may be some issues with the flag logic for 
> asynchronous use as well.
> 
> I do find it interesting that Altera was forthcoming with their recent
> problems with dual port memories.  I hope that Xilinx is equally 
> forthcoming if there is indeed a problem with the FIFO16 logic.
> 

Article: 92556
Subject: Re: Slow FIFO using external SRAM
From: "dp" <dp@tgi-sci.com>
Date: 1 Dec 2005 09:26:47 -0800
Links: << >>  << T >>  << A >>
Peter's explanation on how to implement a FIFO cannot be
improved much, if any - this is how FIFOs are implemented
in hard- and software.
Here is an alternative to building your own FIFO out
of RAM - has worked for me more than once.
If the purpose is to have the FIFO (and not to build it, say,
for learning or economic purposes), you can use one of
the 72XX (IDT used to make them) FIFO chips. They have
the R/W pointer circuitry inside etc., really convenient
to use - and you will need no memory address lines out
of the FPGA, nor will the data necessarily go through it
(that is, you can just handle the full/empty flags and
the R/W strobes - and there also is a half full flag).

Dimiter

------------------------------------------------------
Dimiter Popoff               Transgalactic Instruments

http://www.tgi-sci.com
------------------------------------------------------


Article: 92557
Subject: Xilinx Adder Subtracter Core (What's Wrong With Xilinx People??!)
From: juendme@yahoo.com
Date: 1 Dec 2005 09:34:34 -0800
Links: << >>  << T >>  << A >>
I'm trying to build a simple ALU with an adder/subtracter unit and I
need both carry and overflow outputs to set the appropriate flags.
However, CoreGen (6.3) doesn't let me have both carry and overflow
outputs. I really don't understand why.

Xilinx designers should think twice before limiting their users in such
a stupid way. Just because you don't see why someone would want both
outputs, doesn't mean that somebody won't find an application that may
require them. If you think that doesn't make sense, fine; that's what
we have warnings for. Warn me that the value of overflow is meaningless
for unsigned numbers, but don't prevent me from using it.

For instance, in this case, I don't know whether the user will
add/subtract signed or unsigned numbers!!! It's up to them to decide,
and then it's up to them to look into the appropriate flag. Except that
I can't provide that flag using this core. Now I have to do it
manually, which will most likely be less efficient. And then I'll
compare it with Altera's LPM, which will of course be more efficient.

Frustrated,

Fred

P.S.

For those that don't believe that this is the case, you can see it for
yourself in the following document:
http://www.xilinx.com/ipcenter/catalog/logicore/docs/addsub.pdf (Table
2)


Article: 92558
Subject: Re: Download old Quartus versions (4.0, 4.1)
From: juendme@yahoo.com
Date: 1 Dec 2005 09:40:44 -0800
Links: << >>  << T >>  << A >>
I so love it when people give advice that the original poster has
already acknowledged is not needed, instead of answering the question
that was posed!

I'm also interested in downloading the older versions for performance
comparison purposes.
Can someone now answer the original question, or is performance
comparison across software versions also a bad idea.

BTW, in my experience, Altera's licenses cover all versions of software
released before the expiry date.


Article: 92559
Subject: Re: Supplier of Xilinx XC2V1000 or 2V250?
From: "Andy Peters" <Bassman59a@yahoo.com>
Date: 1 Dec 2005 10:08:30 -0800
Links: << >>  << T >>  << A >>
Peter Alfke wrote:
> The Virtex-2 family that you are referring to is very much alive, and
> is the best-selling family in Xilinx history. Remember, the newly
> introduced families are "better", more capable, and faster, but the
> bulk of our shipments is obviously into systems that have reached
> production status and were designed a few years ago.
> For today's design-starts, the designers must carefully evaluate
> whether the older families are "good enough" or whether the better
> features and sometimes lower price of the newer family are more
> important.

Peter,

We all know that for new designs, new parts should be considered.

But all Dave was asking was if he could buy the parts.  It's likely
that he's got an existing design in production, and a redesign (and
possible requalification, etc) is not an option.

-a


Article: 92560
Subject: Re: Supplier of Xilinx XC2V1000 or 2V250?
From: "Peter Alfke" <alfke@sbcglobal.net>
Date: 1 Dec 2005 10:38:06 -0800
Links: << >>  << T >>  << A >>
Well, as I said: "it's our best selling family". That means it is very
much available.
I would guess that you will be able to buy it from Xilinx and our
distributors for at least another five years. Is that enough?
Peter Alfke, Xilinx Applications


Article: 92561
Subject: Re: Supplier of Xilinx XC2V1000 or 2V250?
From: "John McCaskill" <junkmail@fastertechnology.com>
Date: 1 Dec 2005 10:50:37 -0800
Links: << >>  << T >>  << A >>
Dave Roberts wrote:
> I think these parts may be obsolete.  I can't find any suppliers in the USA.
> I need package type FG456.  Does anyone know where I can buy them?
>
> Thanks,
>
> Dave.

Avnet website shows that they have some XC2V250-6FG456C parts in stock.
They also have some variant of the XC2V1000 in FG456 in stock.

www.em.avnet.com and search, or:

http://tinyurl.com/ey78n

Regards,

John McCaskill


Article: 92562
Subject: Re: Help : Code works in synthesizer (silos), but warnings w/ webpack
From: "johnp" <johnp3+nospam@probo.com>
Date: 1 Dec 2005 11:06:59 -0800
Links: << >>  << T >>  << A >>
Reza -

The first thing you must understand about Verilog is that some of its
constructs are synthesizable, other are not.  These latter constructs
such as 'while', 'repeat', 'wait', 'initial' are in the language purely
for
simulation.  These constructs cannot be synthesized.  So you need
to learn what constructs can be used for designing your CPLD and
which ones can only be used in the testbench.

Next, you need to separate the testbench code from the CPLD logic.
In the testbench, instantiate the actual design.  When you want to
synthesize, only give XST the actual design to work on, not the design
and testbench.

Next, you need to understand about logic design, ie, how do flip flops
really work, how to do synchronous design for timing analysis, etc.

You should look at some examples of other peoples work.  Try
Opencores.org.

Good luck!

John Providenza


Article: 92563
Subject: Re: Xilinx LUT behavior question
From: Mike Treseler <mike_treseler@comcast.net>
Date: Thu, 01 Dec 2005 11:39:31 -0800
Links: << >>  << T >>  << A >>
kedarpapte@gmail.com wrote:

> I tried many was of implementing this combi structure in Altera Stratix
> but glitch is still there.
> Any guideline or suggetions will be greatly helpful...

I would suggest eliminating glitches using synchronous
design techniques and verifying Fmax using Quartus static timing.

         -- Mike Treseler

Article: 92564
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Ray Andraka <ray@andraka.com>
Date: Thu, 01 Dec 2005 14:41:07 -0500
Links: << >>  << T >>  << A >>
Austin,

You are kidding as far as the usefulness of a synchronous fifo (one 
which has both sides clocked by the same clock), right?  This is a
rather common structure in pipelined designs, it is an elastic buffer. 
Useful, for example, for processing bursty data at a more relaxed rate 
than the data is presented. I'd be hard pressed to find one of my 
designs that does NOT have a synchronous FIFO in it.  The solution with 
the "small" delay is fine if you are not pushing the performance 
envelope, but it will destroy timing closure in designs that are.  For 
example, I have a floating point FFT design with a target clock rate of 
400 MHz in an SX55-10 part... basically running at the DSP48/memory 
speed.  It has synchronous FIFOs in it, and there is no room in the 
timing for adding small delays to clocks.  This is a real limitation to 
the FIFO16 design, and has cost me several weeks of debug and redesign 
time to find and work around it.  It should be prominently highlighted 
in the user guide under the section that describes the used of the 
FIFO16.  I am sure other users are going to encounter the same issue. No 
one looks at the answers database until they have a problem and have 
identified the source of the problem.  The synchronous FIFO issue could 
easily be considered a limitation rather than an outright bug, but it 
does have to be made clear to the user before he does the design, not 
when trying to figure out why it isn't working. By keeping it close to 
your chest as an internal answer, I suspect you'll wind up generating a 
heck of a lot more hotline cases than if you put it in black and white 
right in the user's guide that this is the way the FIFO16's work and 
that these are the things you need to do to work around the limitation 
if the clocks are the same on both sides. BTW, I don't think this is an 
"obscure" issue either, as anyone attempting to use the FIFO16 as a 
synchronous FIFO is going to encounter it.

The flip answers regarding the synchronous FIFO (things like such a 
structure is not useful, and just add delays to the clock when I've 
explained that it is not a viable solution for maximum performance 
designs), combined with the reluctance to make it clear to users that 
this is a limitation of the FIFO16 design, makes it appear that either 
Xilinx doesn't understand the issue or that they are trying to sweep it 
under the rug.  I presume and hope it is the former, although neither is 
a particularly good outcome.

I am reluctant to enter a webcase on an issue such as this unless it has 
become critical for the project. Invariably, the result of entering a 
webcase is my having to generate and submit testcases to prove the 
problem, and often having to come up with my own work-around because the 
fix won't be available until the next major release.  Nobody pays me for 
the time spent doing testcases to ferret out the source of a bug in the 
software or silicon.  There have been months recently where I've spent 
more than a quarter of my time identifying and generating test cases for 
problems in the tools (not just Xilinx).  Naturally, I'd like to avoid 
that as much as practical.

Regarding the asynchronous FIFO behavior, I don't have any direct 
experience with the FIFO16 behaving badly as an async FIFO, But I 
haven't used it in that mode in a design that has made it to testing.
Silvain's description does sound as though the FIFO may be misbehaving, 
and it jives with things I've heard from others.  This is why I asked 
him if he had opened a case with Xilinx and what the resolution of that 
case was.  It is important to know if there is a potential problem so 
that I can avoid it during the design rather than discover it during 
integration.  I am currently working on a design that has several async 
FIFO16's in it, and would like to believe that they will work for me, 
however these rumblings have me concerned, hence my asking Sylvain about 
his resolution.  So far, the work arounds I am aware of have used the 
coregen FIFO instead of the FIFO16, which does not have the same clock 
performance as the FIFO16.

I didn't intend to kick over the beehive here, I was only trying to 
collect more data so that I might avoid a problem in my own design if it 
does exist.





Austin Lesea wrote:
> Ray,
> 
> The bug for use of the async FIFO synchronously has been acknolwedged, 
> and we apologize for not getting it out there more prominently.  But:
> 
> In our defense, it is unusual (or at least, so far we think it is 
> unusual) where the read and write clocks are tied directly together (why 
> use a FIFO at all?  I guess it is a really useful structure, so even 
> when used this way it is too useful to ignore....?).


> 
> The solution is to not source the two clocks from the same source 
> directly, but place a small delay in one, or the other.
> 
> The problem does not exist in the asynchronous case, as it takes two 
> subsequent clock cycles on BOTH clocks (at exactly the wrong times) to 
> cause the problem.  As long as the probability of two adjacent clock 
> cyles not coming in on both clocks exactly the same just as you are 
> getting full (or is it empty? I'm not the expert on this), it works fine.
> 
> Sometimes with problems like this (that are difficult to even cause) it 
> doesn't make sense to put up a billboard that it is an issue, as then 
> everyone comes down with the disease (mass hypochrondira) when they 
> don't really have the problem.
> 
> Now, if the feature is just plain broke, then it is a different story, 
> and we will end the pain as soon as we are sure it is just plain broke.
> 
> No one is intentionally hiding anything, but we are judiciously placing 
> (obscure) bug information only with the hotline and support community, 
> rather than broadcasting it across the entire user community publicy.
> 
> If, for any reason, you feel that you have caught the disease (have a 
> bug we haven't shared universally), the entry of a webcase will get you 
> the help you need, as the hotline will search for all such issues.  If 
> yours is there, then we will immediately share with you the solution.
> 
> These are known as "internal answers" and it isn't that we don't want to 
> share them, we just don't think they are likely issues for everyone. 
> Better to talk to you and find out what the problem is, first.
> 
> If these internal answers are made external, we imagine there would be 
> thousands of designers running down debug paths that are so obscure, 
> there is almost no chance they will find this as their problem.  Then we 
> get a bad reputation, and the hotline is overwhelmed with folks who all 
> think they have this obscure problem!
> 
> I hope folks will appreciate that sometimes telling every strange and 
> obscure story causes more trouble than selectively understanding each 
> issue that arises, and dealing with it directly.
> 
> Support:  it is an art.
> 
> Austin
> 
> 
> Ray Andraka wrote:
> 
>> Sylvain Munaut wrote:
>>
>>> Hi,
>>>
>>>
>>> We're faced with a strange problem ...
>>> While investigating a bug in one design, we could only observe that
>>> behavior on real board and not in simulation.
>>>
>>> Using chipscope, we finally traced down the problem by monitoring
>>> both write and read port of a FIFO16 configured as 18x1024, using the
>>> same rd/wr clocks. That fifo was used in a "weird" way, by setting a
>>> ALMOSTFULL threshold very high (but still within spec), so that it turn
>>> on very quicly. And what we observed is that we push a data with some
>>> parity bits (which are not 'true' parity but some critical control), we
>>> continue to push, the almost full goes up (normal), and we still push
>>> (we still have plenty of room) and at the same time we re-read but
>>> slower (not at each clock cycle) and when we finally re-read the data
>>> where the parity bit was set, the data (15:0) are there but the parity
>>> bit is not, it's just 0 ...
>>>
>>> The chipscope 'probes' were tied directly to the fifo signals, no logic
>>> in between. That fifo is supposed to cross clock domains but for
>>> debugging, we just sent the same clock everywhere. And the behavior of
>>> the surrounding logic is consitent with that bit being missed.
>>>
>>> Instead of using ALMOSTFULL set to a very high value, we used not
>>> ALMOSTEMPTY (here since we're debugging with just 1 clock domain, it's
>>> ok), and there it looks like we never observe such a miss.
>>>
>>>
>>> Has someone ever observed such a behavior ?
>>>
>>>
>>>
>>>     Sylvain
>>
>>
>>
>> Have you got any resolution on this?  Have you opened a case with 
>> Xilinx? What does Xilinx have to say about it?
>>
>> I am aware that some people have had problems with the FIFO16 not 
>> working correctly.  I had an issue with trying to use the FIFO as a 
>> synchronous fifo (it is async, so there is a possibility with some 
>> ambiguity on the flag latency when both clocks are the same). I have 
>> asked Xilinx repeatedly to document this behavior prominently in the 
>> user guide, but so far they have only quietly acknowledged that the 
>> user has to be careful if read and write clocks are the same.
>>
>> That said, your problem is different than the one I experienced and 
>> appears to be a more serious problem in the FIFO16 logic. You are not 
>> the first person I've heard state they had problems with the fifo16 
>> async behavior.  There may be some issues with the flag logic for 
>> asynchronous use as well.
>>
>> I do find it interesting that Altera was forthcoming with their recent
>> problems with dual port memories.  I hope that Xilinx is equally 
>> forthcoming if there is indeed a problem with the FIFO16 logic.
>>

Article: 92565
Subject: Re: Successful use of MGT on Virtex 4
From: "JarJarJP12" <jpnguyenk@gmail.com>
Date: 1 Dec 2005 12:12:45 -0800
Links: << >>  << T >>  << A >>
Nanditha -

You rock!  Thanks, that solved that issue and has allowed me to
simulate the sample test of the Aurora core.  Now I'm trying to
incorporate a Coregen created Aurora core into an existing project, but
it doesn't seem to like me doing this.  I have an existing project in
ISE and I add the <aurora_core>.xco.  Whenever I try to view the HDL
Functional Model it regenerates the core but does not display the HDL.
Whenever I double click on Manage Core, it invokes Coregen but then
says that my device is not the virtex-4 and thus does not have the
Aurora Core.  The specific error is:

ERROR:sim:160 - Could not find requested IP (Aurora,2.3) for currently
selected part.

I go to project options and it displays that my device is not virtex-4
but Automotive Coolrunner2.  I change it to the correct device, but
this does nothing.  Any idea why this is?

Also, I've noticed in the sample_test of the Aurora core that it uses
the GT11_custom instantiation.  This leads me to believe that if I use
a GT11_custom core via Architect Wizard and have the attributes match
those of the Aurora Core it would work in the same fashion.  Is this
true?

Thanks again for all your help!

JP


Article: 92566
Subject: Re: Xilinx Adder Subtracter Core (What's Wrong With Xilinx People??!)
From: "Dave Pollum" <vze24h5m@verizon.net>
Date: 1 Dec 2005 12:17:47 -0800
Links: << >>  << T >>  << A >>
juendme@yahoo.com wrote:
> I'm trying to build a simple ALU with an adder/subtracter unit and I
> need both carry and overflow outputs to set the appropriate flags.
> However, CoreGen (6.3) doesn't let me have both carry and overflow
> outputs. I really don't understand why.
>
> Xilinx designers should think twice before limiting their users in such
> a stupid way. Just because you don't see why someone would want both
> outputs, doesn't mean that somebody won't find an application that may
> require them. If you think that doesn't make sense, fine; that's what
> we have warnings for. Warn me that the value of overflow is meaningless
> for unsigned numbers, but don't prevent me from using it.
>
> For instance, in this case, I don't know whether the user will
> add/subtract signed or unsigned numbers!!! It's up to them to decide,
> and then it's up to them to look into the appropriate flag. Except that
> I can't provide that flag using this core. Now I have to do it
> manually, which will most likely be less efficient. And then I'll
> compare it with Altera's LPM, which will of course be more efficient.
>
> Frustrated,
>
> Fred
>
> P.S.
>
> For those that don't believe that this is the case, you can see it for
> yourself in the following document:
> http://www.xilinx.com/ipcenter/catalog/logicore/docs/addsub.pdf (Table
> 2)

I use ISE-WebPack, so I guess I don't have CoreGen.  I'm still just out
of the VHDL newbie stage, but if I understand the document's table #2,
it doesn't look like CoreGen will build an adder/subtractor that
handles _both_ signed and unsigned data.  At least I didn't see a "pin"
that tells the logic to treat the data as signed or unsigned.  If all
that's true, it looks like you'll have to roll your own.
-Dave Pollum


Article: 92567
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: "John_H" <johnhandwork@mail.com>
Date: Thu, 01 Dec 2005 20:55:19 GMT
Links: << >>  << T >>  << A >>
Ray, your comments are again right on target with my own feelings about bugs 
and support.  The webcase submission issue especially hits home.  One minor 
difference for me may be that when I find unusual behavior and have it 
isolated to a functional portion of the design, I may check the (externally 
available) knowledge database for any information relating to my problem 
area before spending a few more days to further isolate the cause.  I've had 
several instances where the information is in *a* database, just not one I 
can get to.

For ANYONE who is concerned with whether or not to air the dirty laundry of 
their EDA tools and silicon, PLEASE read through Ray's note and understand 
where designers come from.  Our company has had TOO many issues with silicon 
(non-FPGA as well) and EDA tools ("you knew about this for how many 
months?") that when we encounter known bugs that are "hidden" from plain 
view, we are LIVID.  There is no excuse to withhold information that WILL 
affect designs if there is a way to communicate the issues externally.

In this instance, there is a way.



"Ray Andraka" <ray@andraka.com> wrote in message 
news:LlIjf.15740$Mi5.7070@dukeread07...
> Austin,
>
> You are kidding as far as the usefulness of a synchronous fifo (one which 
> has both sides clocked by the same clock), right?  This is a
> rather common structure in pipelined designs, it is an elastic buffer. 
> Useful, for example, for processing bursty data at a more relaxed rate 
> than the data is presented. I'd be hard pressed to find one of my designs 
> that does NOT have a synchronous FIFO in it.  The solution with the 
> "small" delay is fine if you are not pushing the performance envelope, but 
> it will destroy timing closure in designs that are.  For example, I have a 
> floating point FFT design with a target clock rate of 400 MHz in an 
> SX55-10 part... basically running at the DSP48/memory speed.  It has 
> synchronous FIFOs in it, and there is no room in the timing for adding 
> small delays to clocks.  This is a real limitation to the FIFO16 design, 
> and has cost me several weeks of debug and redesign time to find and work 
> around it.  It should be prominently highlighted in the user guide under 
> the section that describes the used of the FIFO16.  I am sure other users 
> are going to encounter the same issue. No one looks at the answers 
> database until they have a problem and have identified the source of the 
> problem.  The synchronous FIFO issue could easily be considered a 
> limitation rather than an outright bug, but it does have to be made clear 
> to the user before he does the design, not when trying to figure out why 
> it isn't working. By keeping it close to your chest as an internal answer, 
> I suspect you'll wind up generating a heck of a lot more hotline cases 
> than if you put it in black and white right in the user's guide that this 
> is the way the FIFO16's work and that these are the things you need to do 
> to work around the limitation if the clocks are the same on both sides. 
> BTW, I don't think this is an "obscure" issue either, as anyone attempting 
> to use the FIFO16 as a synchronous FIFO is going to encounter it.
>
> The flip answers regarding the synchronous FIFO (things like such a 
> structure is not useful, and just add delays to the clock when I've 
> explained that it is not a viable solution for maximum performance 
> designs), combined with the reluctance to make it clear to users that this 
> is a limitation of the FIFO16 design, makes it appear that either Xilinx 
> doesn't understand the issue or that they are trying to sweep it under the 
> rug.  I presume and hope it is the former, although neither is a 
> particularly good outcome.
>
> I am reluctant to enter a webcase on an issue such as this unless it has 
> become critical for the project. Invariably, the result of entering a 
> webcase is my having to generate and submit testcases to prove the 
> problem, and often having to come up with my own work-around because the 
> fix won't be available until the next major release.  Nobody pays me for 
> the time spent doing testcases to ferret out the source of a bug in the 
> software or silicon.  There have been months recently where I've spent 
> more than a quarter of my time identifying and generating test cases for 
> problems in the tools (not just Xilinx).  Naturally, I'd like to avoid 
> that as much as practical.
>
> Regarding the asynchronous FIFO behavior, I don't have any direct 
> experience with the FIFO16 behaving badly as an async FIFO, But I haven't 
> used it in that mode in a design that has made it to testing.
> Silvain's description does sound as though the FIFO may be misbehaving, 
> and it jives with things I've heard from others.  This is why I asked him 
> if he had opened a case with Xilinx and what the resolution of that case 
> was.  It is important to know if there is a potential problem so that I 
> can avoid it during the design rather than discover it during integration. 
> I am currently working on a design that has several async FIFO16's in it, 
> and would like to believe that they will work for me, however these 
> rumblings have me concerned, hence my asking Sylvain about his resolution. 
> So far, the work arounds I am aware of have used the coregen FIFO instead 
> of the FIFO16, which does not have the same clock performance as the 
> FIFO16.
>
> I didn't intend to kick over the beehive here, I was only trying to 
> collect more data so that I might avoid a problem in my own design if it 
> does exist.
>
>
>
>
>
> Austin Lesea wrote:
>> Ray,
>>
>> The bug for use of the async FIFO synchronously has been acknolwedged, 
>> and we apologize for not getting it out there more prominently.  But:
>>
>> In our defense, it is unusual (or at least, so far we think it is 
>> unusual) where the read and write clocks are tied directly together (why 
>> use a FIFO at all?  I guess it is a really useful structure, so even when 
>> used this way it is too useful to ignore....?).
>
>
>>
>> The solution is to not source the two clocks from the same source 
>> directly, but place a small delay in one, or the other.
>>
>> The problem does not exist in the asynchronous case, as it takes two 
>> subsequent clock cycles on BOTH clocks (at exactly the wrong times) to 
>> cause the problem.  As long as the probability of two adjacent clock 
>> cyles not coming in on both clocks exactly the same just as you are 
>> getting full (or is it empty? I'm not the expert on this), it works fine.
>>
>> Sometimes with problems like this (that are difficult to even cause) it 
>> doesn't make sense to put up a billboard that it is an issue, as then 
>> everyone comes down with the disease (mass hypochrondira) when they don't 
>> really have the problem.
>>
>> Now, if the feature is just plain broke, then it is a different story, 
>> and we will end the pain as soon as we are sure it is just plain broke.
>>
>> No one is intentionally hiding anything, but we are judiciously placing 
>> (obscure) bug information only with the hotline and support community, 
>> rather than broadcasting it across the entire user community publicy.
>>
>> If, for any reason, you feel that you have caught the disease (have a bug 
>> we haven't shared universally), the entry of a webcase will get you the 
>> help you need, as the hotline will search for all such issues.  If yours 
>> is there, then we will immediately share with you the solution.
>>
>> These are known as "internal answers" and it isn't that we don't want to 
>> share them, we just don't think they are likely issues for everyone. 
>> Better to talk to you and find out what the problem is, first.
>>
>> If these internal answers are made external, we imagine there would be 
>> thousands of designers running down debug paths that are so obscure, 
>> there is almost no chance they will find this as their problem.  Then we 
>> get a bad reputation, and the hotline is overwhelmed with folks who all 
>> think they have this obscure problem!
>>
>> I hope folks will appreciate that sometimes telling every strange and 
>> obscure story causes more trouble than selectively understanding each 
>> issue that arises, and dealing with it directly.
>>
>> Support:  it is an art.
>>
>> Austin
>>
>>
>> Ray Andraka wrote:
>>
>>> Sylvain Munaut wrote:
>>>
>>>> Hi,
>>>>
>>>>
>>>> We're faced with a strange problem ...
>>>> While investigating a bug in one design, we could only observe that
>>>> behavior on real board and not in simulation.
>>>>
>>>> Using chipscope, we finally traced down the problem by monitoring
>>>> both write and read port of a FIFO16 configured as 18x1024, using the
>>>> same rd/wr clocks. That fifo was used in a "weird" way, by setting a
>>>> ALMOSTFULL threshold very high (but still within spec), so that it turn
>>>> on very quicly. And what we observed is that we push a data with some
>>>> parity bits (which are not 'true' parity but some critical control), we
>>>> continue to push, the almost full goes up (normal), and we still push
>>>> (we still have plenty of room) and at the same time we re-read but
>>>> slower (not at each clock cycle) and when we finally re-read the data
>>>> where the parity bit was set, the data (15:0) are there but the parity
>>>> bit is not, it's just 0 ...
>>>>
>>>> The chipscope 'probes' were tied directly to the fifo signals, no logic
>>>> in between. That fifo is supposed to cross clock domains but for
>>>> debugging, we just sent the same clock everywhere. And the behavior of
>>>> the surrounding logic is consitent with that bit being missed.
>>>>
>>>> Instead of using ALMOSTFULL set to a very high value, we used not
>>>> ALMOSTEMPTY (here since we're debugging with just 1 clock domain, it's
>>>> ok), and there it looks like we never observe such a miss.
>>>>
>>>>
>>>> Has someone ever observed such a behavior ?
>>>>
>>>>
>>>>
>>>>     Sylvain
>>>
>>>
>>>
>>> Have you got any resolution on this?  Have you opened a case with 
>>> Xilinx? What does Xilinx have to say about it?
>>>
>>> I am aware that some people have had problems with the FIFO16 not 
>>> working correctly.  I had an issue with trying to use the FIFO as a 
>>> synchronous fifo (it is async, so there is a possibility with some 
>>> ambiguity on the flag latency when both clocks are the same). I have 
>>> asked Xilinx repeatedly to document this behavior prominently in the 
>>> user guide, but so far they have only quietly acknowledged that the user 
>>> has to be careful if read and write clocks are the same.
>>>
>>> That said, your problem is different than the one I experienced and 
>>> appears to be a more serious problem in the FIFO16 logic. You are not 
>>> the first person I've heard state they had problems with the fifo16 
>>> async behavior.  There may be some issues with the flag logic for 
>>> asynchronous use as well.
>>>
>>> I do find it interesting that Altera was forthcoming with their recent
>>> problems with dual port memories.  I hope that Xilinx is equally 
>>> forthcoming if there is indeed a problem with the FIFO16 logic.
>>> 



Article: 92568
Subject: Re: Help : Code works in synthesizer (silos), but warnings w/ webpack
From: "Reza" <google@reza.net>
Date: 1 Dec 2005 12:56:14 -0800
Links: << >>  << T >>  << A >>
Thanks for the excellent help.  Though now I'm quite irritated at the
$80 verilog book that I bought - it didn't differentiate at all between
the constructs that are test-bench specific, and the ones that I could
use for the design.  It also didn't indicate any problems with using
delays in the code.

And most all that code except the part labeled 'TEST CLOCK' is all
supposed to be functional logic to be implemented.

So it sounds like I'll have to re-write the whole thing.  I'll look at
some of the sites you referred me to.  I also dont mind buying another
book on the subject if you have any recommendations.

Thanks!
Reza

p.s. I'll be posting again soon


Article: 92569
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Austin Lesea <austin@xilinx.com>
Date: Thu, 01 Dec 2005 13:13:47 -0800
Links: << >>  << T >>  << A >>
John, Ray,

I never said, nor implied we would intentionally withhold information.

That is bad.  Really bad.

I understand that you may consider our choice of distribution of 
information (through answers externally available, or through answers 
internally available to case workers and FAEs) to be unacceptable.

I will entertain any other solutions.  One that I might suggest is that 
you sign up for a push email whenever something happens that you 
indicate you are interested in.  Maybe its been tried, maybe not.  I 
know we do have push email systems in place now.  Perhaps we need to add 
features?

As far as async FIFO issues go, I am getting some emails on that subject 
as well.  So, even though I thought (and witnessed) the extensive FIFO 
testing on V4, the problem with a test that passes is that a test is 
never the application.

I will reserve a whole-hearted endorsement of perfection until I hear 
more about what the alleged issues are with async mode.

And Ray, I appreciate the use of the FIFO synchronously (toungue firmly 
in cheek comments), I just never thought about it before.  Making an 
async FIFO is so much black magic that you spend all your time looking 
at the async case, and no time with the sync case (obviously the problem 
here).

Austin


John_H wrote:

> Ray, your comments are again right on target with my own feelings about bugs 
> and support.  The webcase submission issue especially hits home.  One minor 
> difference for me may be that when I find unusual behavior and have it 
> isolated to a functional portion of the design, I may check the (externally 
> available) knowledge database for any information relating to my problem 
> area before spending a few more days to further isolate the cause.  I've had 
> several instances where the information is in *a* database, just not one I 
> can get to.
> 
> For ANYONE who is concerned with whether or not to air the dirty laundry of 
> their EDA tools and silicon, PLEASE read through Ray's note and understand 
> where designers come from.  Our company has had TOO many issues with silicon 
> (non-FPGA as well) and EDA tools ("you knew about this for how many 
> months?") that when we encounter known bugs that are "hidden" from plain 
> view, we are LIVID.  There is no excuse to withhold information that WILL 
> affect designs if there is a way to communicate the issues externally.
> 
> In this instance, there is a way.
> 
> 
> 
> "Ray Andraka" <ray@andraka.com> wrote in message 
> news:LlIjf.15740$Mi5.7070@dukeread07...
> 
>>Austin,
>>
>>You are kidding as far as the usefulness of a synchronous fifo (one which 
>>has both sides clocked by the same clock), right?  This is a
>>rather common structure in pipelined designs, it is an elastic buffer. 
>>Useful, for example, for processing bursty data at a more relaxed rate 
>>than the data is presented. I'd be hard pressed to find one of my designs 
>>that does NOT have a synchronous FIFO in it.  The solution with the 
>>"small" delay is fine if you are not pushing the performance envelope, but 
>>it will destroy timing closure in designs that are.  For example, I have a 
>>floating point FFT design with a target clock rate of 400 MHz in an 
>>SX55-10 part... basically running at the DSP48/memory speed.  It has 
>>synchronous FIFOs in it, and there is no room in the timing for adding 
>>small delays to clocks.  This is a real limitation to the FIFO16 design, 
>>and has cost me several weeks of debug and redesign time to find and work 
>>around it.  It should be prominently highlighted in the user guide under 
>>the section that describes the used of the FIFO16.  I am sure other users 
>>are going to encounter the same issue. No one looks at the answers 
>>database until they have a problem and have identified the source of the 
>>problem.  The synchronous FIFO issue could easily be considered a 
>>limitation rather than an outright bug, but it does have to be made clear 
>>to the user before he does the design, not when trying to figure out why 
>>it isn't working. By keeping it close to your chest as an internal answer, 
>>I suspect you'll wind up generating a heck of a lot more hotline cases 
>>than if you put it in black and white right in the user's guide that this 
>>is the way the FIFO16's work and that these are the things you need to do 
>>to work around the limitation if the clocks are the same on both sides. 
>>BTW, I don't think this is an "obscure" issue either, as anyone attempting 
>>to use the FIFO16 as a synchronous FIFO is going to encounter it.
>>
>>The flip answers regarding the synchronous FIFO (things like such a 
>>structure is not useful, and just add delays to the clock when I've 
>>explained that it is not a viable solution for maximum performance 
>>designs), combined with the reluctance to make it clear to users that this 
>>is a limitation of the FIFO16 design, makes it appear that either Xilinx 
>>doesn't understand the issue or that they are trying to sweep it under the 
>>rug.  I presume and hope it is the former, although neither is a 
>>particularly good outcome.
>>
>>I am reluctant to enter a webcase on an issue such as this unless it has 
>>become critical for the project. Invariably, the result of entering a 
>>webcase is my having to generate and submit testcases to prove the 
>>problem, and often having to come up with my own work-around because the 
>>fix won't be available until the next major release.  Nobody pays me for 
>>the time spent doing testcases to ferret out the source of a bug in the 
>>software or silicon.  There have been months recently where I've spent 
>>more than a quarter of my time identifying and generating test cases for 
>>problems in the tools (not just Xilinx).  Naturally, I'd like to avoid 
>>that as much as practical.
>>
>>Regarding the asynchronous FIFO behavior, I don't have any direct 
>>experience with the FIFO16 behaving badly as an async FIFO, But I haven't 
>>used it in that mode in a design that has made it to testing.
>>Silvain's description does sound as though the FIFO may be misbehaving, 
>>and it jives with things I've heard from others.  This is why I asked him 
>>if he had opened a case with Xilinx and what the resolution of that case 
>>was.  It is important to know if there is a potential problem so that I 
>>can avoid it during the design rather than discover it during integration. 
>>I am currently working on a design that has several async FIFO16's in it, 
>>and would like to believe that they will work for me, however these 
>>rumblings have me concerned, hence my asking Sylvain about his resolution. 
>>So far, the work arounds I am aware of have used the coregen FIFO instead 
>>of the FIFO16, which does not have the same clock performance as the 
>>FIFO16.
>>
>>I didn't intend to kick over the beehive here, I was only trying to 
>>collect more data so that I might avoid a problem in my own design if it 
>>does exist.
>>
>>
>>
>>
>>
>>Austin Lesea wrote:
>>
>>>Ray,
>>>
>>>The bug for use of the async FIFO synchronously has been acknolwedged, 
>>>and we apologize for not getting it out there more prominently.  But:
>>>
>>>In our defense, it is unusual (or at least, so far we think it is 
>>>unusual) where the read and write clocks are tied directly together (why 
>>>use a FIFO at all?  I guess it is a really useful structure, so even when 
>>>used this way it is too useful to ignore....?).
>>
>>
>>>The solution is to not source the two clocks from the same source 
>>>directly, but place a small delay in one, or the other.
>>>
>>>The problem does not exist in the asynchronous case, as it takes two 
>>>subsequent clock cycles on BOTH clocks (at exactly the wrong times) to 
>>>cause the problem.  As long as the probability of two adjacent clock 
>>>cyles not coming in on both clocks exactly the same just as you are 
>>>getting full (or is it empty? I'm not the expert on this), it works fine.
>>>
>>>Sometimes with problems like this (that are difficult to even cause) it 
>>>doesn't make sense to put up a billboard that it is an issue, as then 
>>>everyone comes down with the disease (mass hypochrondira) when they don't 
>>>really have the problem.
>>>
>>>Now, if the feature is just plain broke, then it is a different story, 
>>>and we will end the pain as soon as we are sure it is just plain broke.
>>>
>>>No one is intentionally hiding anything, but we are judiciously placing 
>>>(obscure) bug information only with the hotline and support community, 
>>>rather than broadcasting it across the entire user community publicy.
>>>
>>>If, for any reason, you feel that you have caught the disease (have a bug 
>>>we haven't shared universally), the entry of a webcase will get you the 
>>>help you need, as the hotline will search for all such issues.  If yours 
>>>is there, then we will immediately share with you the solution.
>>>
>>>These are known as "internal answers" and it isn't that we don't want to 
>>>share them, we just don't think they are likely issues for everyone. 
>>>Better to talk to you and find out what the problem is, first.
>>>
>>>If these internal answers are made external, we imagine there would be 
>>>thousands of designers running down debug paths that are so obscure, 
>>>there is almost no chance they will find this as their problem.  Then we 
>>>get a bad reputation, and the hotline is overwhelmed with folks who all 
>>>think they have this obscure problem!
>>>
>>>I hope folks will appreciate that sometimes telling every strange and 
>>>obscure story causes more trouble than selectively understanding each 
>>>issue that arises, and dealing with it directly.
>>>
>>>Support:  it is an art.
>>>
>>>Austin
>>>
>>>
>>>Ray Andraka wrote:
>>>
>>>
>>>>Sylvain Munaut wrote:
>>>>
>>>>
>>>>>Hi,
>>>>>
>>>>>
>>>>>We're faced with a strange problem ...
>>>>>While investigating a bug in one design, we could only observe that
>>>>>behavior on real board and not in simulation.
>>>>>
>>>>>Using chipscope, we finally traced down the problem by monitoring
>>>>>both write and read port of a FIFO16 configured as 18x1024, using the
>>>>>same rd/wr clocks. That fifo was used in a "weird" way, by setting a
>>>>>ALMOSTFULL threshold very high (but still within spec), so that it turn
>>>>>on very quicly. And what we observed is that we push a data with some
>>>>>parity bits (which are not 'true' parity but some critical control), we
>>>>>continue to push, the almost full goes up (normal), and we still push
>>>>>(we still have plenty of room) and at the same time we re-read but
>>>>>slower (not at each clock cycle) and when we finally re-read the data
>>>>>where the parity bit was set, the data (15:0) are there but the parity
>>>>>bit is not, it's just 0 ...
>>>>>
>>>>>The chipscope 'probes' were tied directly to the fifo signals, no logic
>>>>>in between. That fifo is supposed to cross clock domains but for
>>>>>debugging, we just sent the same clock everywhere. And the behavior of
>>>>>the surrounding logic is consitent with that bit being missed.
>>>>>
>>>>>Instead of using ALMOSTFULL set to a very high value, we used not
>>>>>ALMOSTEMPTY (here since we're debugging with just 1 clock domain, it's
>>>>>ok), and there it looks like we never observe such a miss.
>>>>>
>>>>>
>>>>>Has someone ever observed such a behavior ?
>>>>>
>>>>>
>>>>>
>>>>>    Sylvain
>>>>
>>>>
>>>>
>>>>Have you got any resolution on this?  Have you opened a case with 
>>>>Xilinx? What does Xilinx have to say about it?
>>>>
>>>>I am aware that some people have had problems with the FIFO16 not 
>>>>working correctly.  I had an issue with trying to use the FIFO as a 
>>>>synchronous fifo (it is async, so there is a possibility with some 
>>>>ambiguity on the flag latency when both clocks are the same). I have 
>>>>asked Xilinx repeatedly to document this behavior prominently in the 
>>>>user guide, but so far they have only quietly acknowledged that the user 
>>>>has to be careful if read and write clocks are the same.
>>>>
>>>>That said, your problem is different than the one I experienced and 
>>>>appears to be a more serious problem in the FIFO16 logic. You are not 
>>>>the first person I've heard state they had problems with the fifo16 
>>>>async behavior.  There may be some issues with the flag logic for 
>>>>asynchronous use as well.
>>>>
>>>>I do find it interesting that Altera was forthcoming with their recent
>>>>problems with dual port memories.  I hope that Xilinx is equally 
>>>>forthcoming if there is indeed a problem with the FIFO16 logic.
>>>>
> 
> 
> 

Article: 92570
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Sylvain Munaut <com.246tNt@tnt>
Date: Thu, 01 Dec 2005 22:36:18 +0100
Links: << >>  << T >>  << A >>
Hi Ray,

Ray Andraka wrote:
> Have you got any resolution on this?  Have you opened a case with
> Xilinx? What does Xilinx have to say about it?

My colleague had some contact with our distributor but afaik, no news yet.

Looking at the xilinx answer record , I saw that fifo usign FIFO16
blocks generated with an old version of fifogenerator could show some
datacorruption problem and that usage of the new one is recommanded ...
but I didn't use coregenerator, i instanciated FIFO16 directly (coregen
doesn't have first word fall thru anyway ...)

I haven't opened a webcase myself yet, ... often before "bothering"
xilinx peoples, I want to be sure ;p I've tried to reproduce the problem
with a far simpler design but so far no luck ... (even in the full
design it's quite "rare" but 1 times suffice to lock it ...)


> I am aware that some people have had problems with the FIFO16 not
> working correctly.  I had an issue with trying to use the FIFO as a
> synchronous fifo (it is async, so there is a possibility with some
> ambiguity on the flag latency when both clocks are the same). I have
> asked Xilinx repeatedly to document this behavior prominently in the
> user guide, but so far they have only quietly acknowledged that the user
> has to be careful if read and write clocks are the same.

What exactly is the problem if the clocks are the same ? (what behaviour
could happen ?)

> That said, your problem is different than the one I experienced and
> appears to be a more serious problem in the FIFO16 logic. You are not
> the first person I've heard state they had problems with the fifo16
> async behavior.  There may be some issues with the flag logic for
> asynchronous use as well.

Well, here we use the fifo synchronously ... They are meant in the
future to be used asynchronously but for testing, we've put everything
at the same clock. But other part in the design will always use them
synchronously so I must get it working in both mode ...



	Sylvain


Article: 92571
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Sylvain Munaut <com.246tNt@tnt>
Date: Thu, 01 Dec 2005 22:49:11 +0100
Links: << >>  << T >>  << A >>
Austin Lesea wrote:
> Ray,
> 
> The bug for use of the async FIFO synchronously has been acknolwedged,
> and we apologize for not getting it out there more prominently.  But:

Where can I get detailled infos about it ? (to be sure not to run into
it, or at least that it doesn't cause trouble in my design ?)



	Sylvain

Article: 92572
Subject: Re: Xilinx Adder Subtracter Core (What's Wrong With Xilinx People??!)
From: juendme@yahoo.com
Date: 1 Dec 2005 13:55:29 -0800
Links: << >>  << T >>  << A >>
Such pins do exist (see Table 1.; signals A_SIGNED and B_SIGNED),
although I have no idea what exactly those signal do (thanks to
incomplete documentation). Because if you look into any digital design
textbook, you'll see that the adder/subtracter circuit is exactly the
same for both signed and unsigned numbers. The only difference is that
carry is not an indication of the error in the result for signed
numbers, but you need overflow.

And going back to table 2, what are the 2 extra bits in the result
(P=Q+2) in rows 2 and 3? Carry and ....? Could it be overflow? But then
why isn't P=Q+2 an option when both inputs are signed?
Xilinx, thanks for incomplete and confusing documentation!

In contrast, Altera's lpm_add_sub readily provides both carry and
overflow outputs. It also provides a parameter to specify whether the
numbers are signed or unsigned, and explains what effect that paramter
has on the operation of the circuit (it only affects the behavior of
the overflow output, nothing else).


Article: 92573
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Austin Lesea <austin@xilinx.com>
Date: Thu, 01 Dec 2005 14:14:24 -0800
Links: << >>  << T >>  << A >>
Sylvain,

I expect the fastest way is to open a webcase requesting the information.

As I already stated, if both read and write clocks are from the same 
BUFG net, then this may (will) probably be an issue at some 
process/voltage/temperature corner (hence the indsidiousness of the issue).

A quick fix is to drive one of the clocks from the other edge (one 
rising, one falling) which may require another BUFG resource (in order 
to be sure the delay doesn't put you right back where you started).

It is my understanding that a macro will be created to instantiate the 
sync FIFO with the required offset delay automatically in the best way 
we can (probably using fabric resources, like a LUT, doubles, hexes, etc.).

The issue as I was told is that at the critical instant, the almost 
full/almost empty flag assertions will be correct, but if the event 
occurs again on the very next clock cycle, the flag will reset to 0, 
which will not be correct (as the FIFO is still almost full, or almost 
empty if nothing was done to read anything out, or write anything in on 
that cycle).

There may be other simpler solutions (that we haven't thought of yet).

Again, the jury is out on the async case....

Austin

Sylvain Munaut wrote:

> Austin Lesea wrote:
> 
>>Ray,
>>
>>The bug for use of the async FIFO synchronously has been acknolwedged,
>>and we apologize for not getting it out there more prominently.  But:
> 
> 
> Where can I get detailled infos about it ? (to be sure not to run into
> it, or at least that it doesn't cause trouble in my design ?)
> 
> 
> 
> 	Sylvain

Article: 92574
Subject: Re: Virtex 4 FIFO16 blocks - Corruption ?
From: Ray Andraka <ray@andraka.com>
Date: Thu, 01 Dec 2005 17:18:56 -0500
Links: << >>  << T >>  << A >>
Sylvain Munaut wrote:

> Austin Lesea wrote:
> 
>>Ray,
>>
>>The bug for use of the async FIFO synchronously has been acknolwedged,
>>and we apologize for not getting it out there more prominently.  But:
> 
> 
> Where can I get detailled infos about it ? (to be sure not to run into
> it, or at least that it doesn't cause trouble in my design ?)
> 
> 
> 
> 	Sylvain

This is exactly what I mean by the problem being hidden.  I searched the 
answers database for FIFO16, and did not turn up anything regarding the 
known synchronous behavior problem, nor any async problems.  It may 
still only be in the internal database, if it is even there.  In 
debugging stuff like this, I've always assumed the silicon is good and 
that any problems are a result of the design until I can prove 
otherwise.  As a result, you don't suspect the FIFO itself as being the 
problem.  That can lead to a tremendous amount of debugging effort 
before finding out there is a problem or unpublished limitation with the 
silicon. Considering how much time I spent fiddling with this problem, I 
suspect there are literally thousands of manhours put into debugging the 
same problem in different projects simply because Xilinx doesn't want to 
advertise a limitation with their design.

The problem with the synchronous usage is that the flag circuit is an
async design.  When the clock is the same to both sides, and a read and 
write are done on the same clock cycle, the flag circuit displays a one
clock jitter in the timing of the flag outputs, such that the word 
written in at the same time the last one is read out may or may not make 
the fifo show empty.  If empty does get set, it then takes something 
like 3 clocks to go away, so you wind up with a non-deterministic 
behavior.  It is an artifact of using an async flag circuit.

BTW, finding stuff in the answers database is a lot like finding a 
needle in a haystack, provided you even know what you are looking for.



Site Home   Archive Home   FAQ Home   How to search the Archive   How to Navigate the Archive   
Compare FPGA features and resources   

Threads starting:
1994JulAugSepOctNovDec1994
1995JanFebMarAprMayJunJulAugSepOctNovDec1995
1996JanFebMarAprMayJunJulAugSepOctNovDec1996
1997JanFebMarAprMayJunJulAugSepOctNovDec1997
1998JanFebMarAprMayJunJulAugSepOctNovDec1998
1999JanFebMarAprMayJunJulAugSepOctNovDec1999
2000JanFebMarAprMayJunJulAugSepOctNovDec2000
2001JanFebMarAprMayJunJulAugSepOctNovDec2001
2002JanFebMarAprMayJunJulAugSepOctNovDec2002
2003JanFebMarAprMayJunJulAugSepOctNovDec2003
2004JanFebMarAprMayJunJulAugSepOctNovDec2004
2005JanFebMarAprMayJunJulAugSepOctNovDec2005
2006JanFebMarAprMayJunJulAugSepOctNovDec2006
2007JanFebMarAprMayJunJulAugSepOctNovDec2007
2008JanFebMarAprMayJunJulAugSepOctNovDec2008
2009JanFebMarAprMayJunJulAugSepOctNovDec2009
2010JanFebMarAprMayJunJulAugSepOctNovDec2010
2011JanFebMarAprMayJunJulAugSepOctNovDec2011
2012JanFebMarAprMayJunJulAugSepOctNovDec2012
2013JanFebMarAprMayJunJulAugSepOctNovDec2013
2014JanFebMarAprMayJunJulAugSepOctNovDec2014
2015JanFebMarAprMayJunJulAugSepOctNovDec2015
2016JanFebMarAprMayJunJulAugSepOctNovDec2016
2017JanFebMarAprMayJunJulAugSepOctNovDec2017
2018JanFebMarAprMayJunJulAugSepOctNovDec2018
2019JanFebMarAprMayJunJulAugSepOctNovDec2019
2020JanFebMarAprMay2020

Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Custom Search