Altera_Forum
Honored Contributor
18 years agoConstraining Megafunction Outputs
My design consists of a main entity (I'll call it "X") which talks with a memory that has unregistered data outputs. The data outputs from the memory enter X and are flopped after traveling through some combinational logic. For the purpose of prototyping my design, I instantiated both X and the memory on a Stratix II FPGA.
The memory I've used is dual-port RAM on the M-RAM in my Stratix II device. I used the altsyncram megafunction to do this. The problem I now have is that accesses to the memory get corrupted at random times. I think this is because I did not provide proper timing constraints for the combinational path between the memory and X. To do so, I used the following approach: 1. I opened up my design in Chip Editor. I could find the RAM instantiation and see the Q data outputs from the memory. I then traced the path to the inputs on X. 2. I noted down the complete paths of both endpoints and added them to a TCL file as arguments to the command set_max_delay: --- Quote Start --- set_max_delay -from <memory_data_output> -to <input_of_flop_in_X_after_some_combinational_logic> 50 --- Quote End --- (The set_max_delay command will constrain the combinational path). 50 is an example value I've used. I would like the tool to fit in the delay from the memory to X plus the delay of the intermediate combinational logic into this time. 3. I ran the quartus_sta utility with my TCL file as an argument. Unfortunately, I find that the tool is unable to find the memory data output nodes. 4. To double-check, I also used the get_keepers, get_nodes, get_pins, get_cells commands at the altsyncram instantiation. It turns out that I can only see the data and address inputs of the altsyncram. Now, my question: does the fact that Quartus is unable to find the data output nodes of the altsyncram block have something to do with its being a megafunction? Does Altera somehow make the internal pins of the megafunction invisible?