Forum Discussion
Quartus fitter ignores the RTL generated by the synthesis
- 5 years ago
I found the issue that was causing the fitter to ignore all the RTL, but I could use some help understanding it.
In the top module, I defined a reg variable called reset_n that I wanted to use as a master power on reset. Then I had an initial block in the top module to assert and de-assert the reset_n.
initial
begin
reset_n <= `LO;
#10 reset_n <= `HI;
endThis worked fine when I put the clock_divider() code directly into the top module.
But when I tried to instantiate clock divider modules, I put reset_n into their port lists and the fitter gave me a message like "reset_n has no source, setting to GND". With reset_n always asserted, the clock_divider produced no clock output so it was apparently optimized out.
Any ideas why this happened? Can I not define an internal power on reset? Perhaps I don't need to? I had the "POWER UP DON'T CARE" setting OFF. I had read this causes all registers to initialize to 0
Hi Jim,
By default, it should be working if you place direct or separate module. May I know what type and version of Quartus you are using? Can you attach the design files for both place module directly and separately. I will try to duplicate it.
Thanks,
Regards
Thanks for your help Syafieq. I have attached 2 zip files. Both contain the .qsf and .qfp files. the
The Proj_separate_modules archive has 2 Verilog files, one for the top level module and one for the clock divider. the top level instantiates the clock divider. This project compiles without errors and the synthesis produces RTL which uses 34 logic elements. But the fitter doesn't place anything on the chip.
The Proj_one_module archive pastes the code from the clock divider module directly into the body of the top module. And produces a working programmable for the cpld with 34 LEs fitted.
The variable master_8mhz_clk is actually being used for a 50MHz clock on my eval board. The target hardware will use 8MHz.
Jim
- sstrell5 years ago
Super Contributor
Your instantiation is incorrect. You're missing an instance name. And while it's not part of the issue, best practice is to do a full port mapping. So it should look like this:
clock_divider u1 (.clk_in(master_8mhz_clk), .reset_n(reset_n), .clk_out(test_led));