A problem with parameter (perhaps!)

Status
Not open for further replies.

spman

Advanced Member level 4
Joined
Aug 15, 2010
Messages
113
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,296
Visit site
Activity points
2,061
Hi,

I encountered a wonderful problem while I was doing post-route simulation! The design is a particular DDR3 controller for ML605 (virtex-6) that I downloaded at Xilinx. After a little modifications, I prepared it for writing and reading some data to test the controller. The design works correctly in behavioral simulation. But not in post-route simulation!

There is a parameter namely SIM_BYPASS_INIT_CAL.
Code:
	parameter SIM_BYPASS_INIT_CAL     = "FAST",
									   // # = "OFF" -  Complete memory init &
									   //              calibration sequence
									   // # = "SKIP" - Skip memory init &
									   //              calibration sequence
									   // # = "FAST" - Skip memory init & use
									   //              abbreviated calib sequence
I assigned it 'FAST' to skip initialization and calibration. But according to my observations, it seems the design is waiting in post-route simulation!
Is it possible that the parameter is automatically changed while doing implementation? Is it anyway to see parameters in post-route simulation?
 

I would be careful with trying to use a simulation parameter when actually building the design and generating a post-route simulation. I would set this to OFF and just run a very long simulation to make sure it functions correctly.

The only way you can determine the post-route state of the original parameter is look at the implementation of the RTL see what logic was generated in the section where the parameter is used. Usually it will be some counter initial values and disabling of FSM states to skip some steps in the startup sequence.
 
Reactions: spman

    spman

    Points: 2
    Helpful Answer Positive Rating
Wow! The implemented design is really different! It isn't implemented with the parameter value that indicates to skip initialization!
Do you know how it is possible that a design is implemented with different parameter values! Does ISE understand the parameter is only for fast simulation running?
 

I think maybe I found the problem!
The parameter (SIM_BYPASS_INIT_CAL) has been declared in most of modules and its value is "OFF" except in top module that I changed to "FAST". And I expect the value of parameter in all other modules become "FAST" by parameter passing.
But in one of sub-modules there is some localparams that are related to the mentioned parameter.
Code:
localparam SIM_INIT_OPTION_W
             = ((SIM_BYPASS_INIT_CAL == "SKIP") || 
                (SIM_BYPASS_INIT_CAL == "FAST")) ?
             "SKIP_PU_DLY" : SIM_INIT_OPTION;
I know localparams cannot be changed by parameter passing. But how about if a localparam is related to a parameter? Is it the problem?
 

setting a local parameter by a passed parameter should work just fine as parameters are compile time constants. Not sure if that is your problem or not. I've never tried running a build on a design with a simulation only parameter set to a simulation option.

You could try hacking the core and set the above SIM_INIT_OPTION_W to the "SKIP_PU_DLY" directly and see if it makes a difference.

Just a thought there isn't some ngc file that was generated was there? I'm assuming you had to add all the core RTL files to your project? Maybe you could look to see in the log file if there is some compiled core file getting pulled into your build instead of the RTL files. Beyond that I'd have to try this out myself on a test design.

Are you just running the generated synthesizable test bench example design through the tools?
 

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