by theover » Fri Jan 10, 2014 4:22 pm
We all know the clocks of the FPGA are buffered to be usable all over the chip, and there are directives both in some interface commands of VHDL and in Verilog to specify "bottleneck" conditions such that whatever peripheral logic connects with the logic on the FPGA, as defined by the HDL, gets the proper signal/clock timing relations, handshake processes, etc.
However, when making a bit of a design in the FPGA, it is also needed to make sure the parts of the logic design connect up such as the logic designer has intended. For instance for a processor design, you'll want to know that with every possible skew of control signals, the instruction with the longest ("critical") path will still run given the clock speed at hand.
When connecting parts of a logic diagram with state machines in them, you want to know that the setup and hold times of the connecting state machines are such that under no circumstance there is a chance for errornous results, given certain clock speed, and this can depend on "random" constellations of logic defined in the HDL coming out to certain particular slice constellations on the FPGA, and when there are a lot of cross connections, it is possible you have to test the circuit because the HDlanguage constraints cannot necessarily be trusted to be executed right.
Of course there's the electronics level, where it is probably a matter of the maker of the FPGA programming software chain that the available slices ("cells") are connected and fed with supply current in such a way that the circuit will work right (sometimes the router of the Xilinx web-pack makes interesting (seemingly useless "loops' with signals, which can be seen from the graphical connection patters).
I short: making a complicated new design with a HDL requires certain unwritten rules to make the Silicon Compilation come out right, and I'm interested in those rules, as one of my major interests in the Parallella board!
T.