Showing results for 
Show  only  | Search instead for 
Did you mean: 
Registered: ‎05-04-2016

Post-route simulation doesn't match hardware

I am chasing a weird bug.  I have a design with 4 identical banks of 4 cascaded low-pass decimation filters, using the Xilinx FIR generator.  Each filter in the chain can be individually bypassed.

In simulation all of the filters behave as expected. 

In hardware I inject a synthetic signal into each filter, one at a time.  I am putting the same signal into each bank. At the output of the system,  I can see that the first two filters in the chain do not have the expected filter response:

  • The first two filters have different results from boot to boot
    • The results are identical during the same power cycle.
  • Each filter bank has different (but all poor) results, even though they are the result of a for-generate loop.
  • The second two filters behave as expected

My first thought was that there was a synthesis optimization problem.  However, I spent considerable time setting up a post-route simulation, and the results look great even in the post-route sim.

I have tested on different boards, and both have the same issue with the first two filters.  Therefore I am ruling out hardware/chip problems.


My questions are:

  • Why do the filter banks differ from each other?
  • Why does the behavior change after a power cycle?

And most importantly:

  • Where do I go from here?

Any ideas about what might be going on?  What can I look at to try to debug this?

0 Kudos
2 Replies
Xilinx Employee
Xilinx Employee
Registered: ‎09-18-2018

Hi @derrickg ,

Could you share a snapshot of how the filters are connected ? Also can you share the configuration of each FIR IP ?

0 Kudos
Registered: ‎05-04-2016

The filters are connected:

D3 -> D10 -> D2 -> D4

Each filter has a bypass mux and some saturation logic.  This chain is replicated 4 times.


After considerable time I was able to narrow down the cause of the problem, although I am still baffled about the mechanics.  It seems the problem was introduced by switching from "Area" optimization to "Speed" optimization.  There were several other changes made at the same time, but reverting that change seemed to fix it.  Only D3 and D10 were effected.  They are also the only filters that are configured to take a sample each cycle.

My hypothesis is that one of the speed optimizations (I didn't take the time to figure out which one) is wiring up the DSP48s in an unsupported configuration that is not represented by the simulation model.  Maybe some sort of reset condition?  That could explain why the behavior was different in each chain for each power cycle.

0 Kudos