no problemo. just make a separate verilog block where you define the parameters and do the instantiation in that block. NO OTHER CODE IS ALLOWED IN THIS BLOCK. we call this the instance wrapper. the instance wrapper gets its own schematic symbol which is then plonked down.
I understand using a wrapper, but I actually meant it for the compile time decision of parameters. That's why I also asked if this was for ASIC. I can understand that things are a lot more rigid there, and with good reason.
But for the small stuff I do I find it handy to be able to change some parameters of the design at compile time. Well, synthesis time.
Especially when I am testing a few design options.
So for the wrapper things are obvious, but the variable amount of wires coming out of it ... how do you deal with that in the schematic above it? Lets go with the most obvious example, parameterized bus width. If the schematic can handle the variable bus width coming out of the wrapper then that's neat. If however you need a new wrapper (or new schematic) for each variation in bus width parameter ... then that would get annoying real fast. Maybe that annoyance has it's place in ASIC where some rigidity is good. But as said, for the small stuff I do that would get annoying real fast.
Protection against human error, all for it. Rigidity for rigidity's sake, not a big fan. But I suspect that for big ASICs the protection against human error feature outweighs the annoyance.
What specific tool do you use for the schematic stuff?
Now , there are other reason for doing this approach : incremental compilation. by partitioning off at intermediate levels you can 'pre-synthesize blocks' and do timing closure , parasitic extraction and other stuff on them. this gets attached to the 'top-level' for that block and fed to the higher-up processors. in asic design the designer can close the timing , tune away parasitics and make sure the block meets the spec . the people assembling the blocks from various designers don't need to worry about what is in the block. you create clean boundaries.
Yeah, incremental is a big item on my todo list. So far I've always done it in 1 big go because that's easier to set up. But for some projects it would be nice to just place & route certain parts of it once, and then only recompile the new bits. The main reason for me would be to reduce time spent waiting on the tools.
there is also an option in fpga tools to tell the tool : schematically added gates are not to be minimized.
Yeah, you have the same sort of thing for non-schematic stuff as well. Although, you say "option" and not "constraint". I typically use a constraint to make sure certain important bits are not optimized away. But maybe you meant it as a synthesis option, which would be handy.
The auto-calibrating delay stuff sounds nifty.
As for the delay element itself, on fpga one can be relatively lazy what with the IODELAY elements builtin to the IOBs.
2) yes this is asic work , but i apply the same techniques on fpga. it is a matter of discipline. keep it clean , and use the schematics as your navigator. A digital system typcially has a bus like structure on board talking to a cpu. define that bus as your toplevel . one level down you get all the bus signals. and you keep propagating down. you can prpagate parameters up ( like base addresses for a functional block )
I can see how schematic would help for navigation. The problem here is xilinx tools are a bit crappy, certainly in terms of navigation.
Right now I am in the process of moving more to System Verilog, and as such that means at the very least a different editor + simulator. Which means moving away from xilinx integrated tools, which means even less chance of using the schematic tools in there...