What is the point of "create_clock" command in FPGA design? - verilog

In FPGA programming, what is the point of using the create_clock command in the XDC (or UCF) file? Let's say I have a clock port CLK that is assigned to a physical pin (which is my clock), in the XDC (or UCF) file. Why can't I just go ahead and use this CLK pin in my top level HDL? Why do I need to add something like this:
create_clock -name sys_clk_pin -period "XXX" [get_ports "CLK"]
Also, let's say I have a main clock "CLK" and some other clocks which I generate in HDL. Do I have to use "create_clock" for all the minor clock in XDC too?
I don't get this whole "create_clock" thing. Any help or direction is much appreciated.
Thanks

Design constraints, as the name suggests, are used in order to define additional constraints of your design, which can't be captured from HDL description.
Lets take create_clock command as an example. You specified the clock pin in your HDL description, why isn't this enough? The reason is that clock signal is not a usual signal - it is used as a reference signal by a synchronous logic (flip-flops).
I suppose you're familiar with "propagation delay" (through logic gates) concept. You want to make sure that all signals originating at one flop and sampled at the other will be able to propagate during a single clock cycle. Now, the total propagation delay you can know right after synthesis because each logic gate in FPGA has associated propagation delay (just sum these up). But how your analysis tools know what is the maximal allowed propagation delay? You do not specify these constraints in HDL, right? This is one of the cases where the frequency you specified with create_clock command will be used - it will be converted to period, and an analysis tool will warn you if any of the combinatorial paths in your design takes longer to propagate than clock's period.
The above example describes one of the actions performed by Static Timing Analysis (STA) tools in which "design constraints" are employed.
Another kind of tools which make extensive use of design constraints is Clock Domain Crossing (CDC) tools. These tools employed in designs containing more than one clock. The CDC concepts are described brilliantly here
In case you take one clock and generate another one from it (clock divider for example) you want to make CDC tool aware of this, because the fact that these clocks are related is important. Your way to inform CDC tool that the clocks are related is to use create_generated_clock constraint.
NOTE: the above examples are basic and by no means comprehensive.

Related

Realtime CPU clock vs High Frequency Software clock

I am curious to learn about the technology which is used in generating software clock in simulators. The frequency of my machine is only ~2.4GHz but I can generate up to 500THz clock using a simulator(Refer below system Verilog snippet ).
`timescale 1fs/1fs;//This is the minimum time-unit and precision that can be used to generate 500THz clock
module temp();
bit clk_b;
always #1 clk_b =~ clk_b ;
endmodule
Is this higher frequency just a software illusion or does it have any link with CPU crystal oscillator?
The simulation does not "run" in realtime. So it will compute the result for the steps and if it is done it is done. Which means that the ratio between number of required steps (as well as problem complexity) and your computer performance will define how much time the simulation will need to finish. The timescale setting of the simulation is just what it says: a way to relate the simulation steps into a time(scale).
So it is really an "illusion" if you want to call it so.
SystemVerilog is a HVL i.e. a Hardware Verification Language. It is (mostly) used to verify hardware designs.
The main purpose of the language is to provide a platform where one can create logic to verify the DUT by running simulations i.e. generating different operating conditions for the DUT and checking how it behaves under each condition. But this does not necessarily mean that DUT is supposed to operate in such extreme conditions generated by the SystemVerilog testbench.
When you are generating 500THz clock from your testbench and checking the behaviour of your DUT, you are making sure that the DUT is not (virtually) going to break down even in such extreme conditions. But please note that this is just a virtual environment you have created and not the actual environment under which the DUT once synthesised is supposed to operate.
If the maximum frequency of the machine (or DUT) is ~2.5GHz, it is supposed to operate at that frequency in the actual environment, but just out of curiosity you can even check operation of DUT with different input clock frequencies by generating different simulations.
Hope it helps!

What are flip-flops&latches and transmission&switch gates in Verilog?

I've looked everywhere to figure out what flip-flops and latches are. Could you give me a brief description of them in the simplest possible way (as if to a child)?
Also, could you tell me the functionalities, input and output of transmission primitives (buf, bufif0, bufif1, notif0, notif1) and switch primitives (pmos, rpmos, nmos, rnmos, cmos, rcmos, tranif1, tranif0, rtranif1, rtranif0, tran, rtran, pullup, pulldown)?
It is a lot of stuff I am requesting, so if you have a URL with comprehensive description of the given primitives, and any other ones with other introductory level information on Verilog, I would be very grateful. (NOT http://www.asic-world.com because that is precisely where I'm learning this from and I don't understand them)
PS: I'd like to be familiar with more primitives to prepare for my exam.
Could you give me a brief description of them in the simplest possible way (as if to a child)?
Once upon a time a wise genie named Lindley invented a magical box called a Flip-Flop. Whenever the enchanted Clock strikes a chime, if a peasant farmer Mr. D. is feeling high, his neighbor Mrs. Q will see this and suddenly do a "flip", landing upon the rail. And there she stays until the next time the clock chimes.
But instead, if Mr. D. is feeling low when the enchanted clock chimes, Mrs. Q will "flop", quite dejectedly, ending up flat on the ground.
And so this continues on forever as long as the enchanted clock continues to chime, with Q flipping and flopping as to however D feels. But only each time the clock chimes, much to the bemusement of the genie. If the clock were to stop, Q will freeze right where she is, and no matter what is happening to D, there she will stay frozen.
This may seem an singularly odd amusement, but it happens that with enough enchanted boxes and flipping peasants, a wise fellow named Turing is said to be able to compute most nearly anything.
Now a latch is something, not quite different, but also very much not quite the same. It involves some different peasants and in lieu of the magical clock, another peasant simply tells the others when to freeze. For this reason it is not as interesting as the famous flip-flop of Antioch.
if you have a URL with comprehensive description of the given primitives
Please see the following freely download-able reference. This contains comprehensive and authoritative descriptions of all of the primitives you request.
IEEE 1800 System Verilog-2012

how to get power estimation using xpower

I have been working on a class project using Verilog. I had to create a circuit and then calculate the power that the circuit uses. I have been trying to do it using Xpower Analyzer I follow the instruction to create the vcd file, compile and synthesize the code using Xilinx ISE 14.7 . Everything goes well until the result shows up. I received 0 power consumption from the clock. I try to constrains the clock and it only give me a increment in dynamic power from 0 to 0.009, but not luck in the clock. Also, I try Xpower in my personal computer and at my university computer lab, so I don't think that it is a software bug.
Moreover, I have try different design such as a simple alu, register etc. Nonetheless, I still getting the same power result.
More information:
Testbench runs well and does what I want
I declare clock like: module toptrafficlight(
clock,rst,output );
List item: I have constrained the clock to 20ns
Timing phase = 0. After synthesis (not sure what this means)
Warrnings from:
HDLCompiler:413 - Line 86: Result of 5-bit expression is truncated to fit in 4-bit target.
PhysDesignRules:372 - Gated clock. Clock net main_gated_clk is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to control the loading of data into the flip-flop.
Power result from Xpower Analyzer
My questions are?
is it a way to setup the clock? which I think might be the cause of the problem
is there anything else needed to be done beside getting the VCD file and synthesize the code?
any other ideas, examples or tutorial?
The screenshot shows that the design is very small, so it's not a big surprise for clock power to be smaller than 1mW. Xilinx also provides an Excel sheet for power estimation. It can be used for a quick tryout to see what circumstances make the clock power significant.
Xilinx Power Estimator (XPE)

How to calculate propagation delay of a combinational circuit?

I have googled this question, but i can't seem to find a proper answer. Is there a certain equation to it? Or do i calculate the delay by looking at the longest path in the circuit?
You calculate path delays using static timing analysis tools that are usually provided by the target technology vendor (i.e. FPGA)
Quick and dirty method - Open the synthesis report, and look for maximum combinational delay. This should give you an approximate value.
The right way - If the block is purely combinational, register the inputs and outputs using a clock of ANY frequency. Generate timing from input register to output register post implementation (place and route) using the tcl command report_timing -from {Flop1} -to {Flop2}. This will give you an elaborate description of cell and wire delays. This analysis would be accurate.

How to drive a clock to a single clock domain?

I have a project to do in VHDL on a FPGA (cyclone IV). The majority of my entities works with a single clock. I know that clock gating is not a good solution (see image) because it causes timing violations. Can someone tell me what are the good practice rules to do this kind of things? (I obviously did some researches on Internet but every link I found talks about clock domain crossing)
Thank you
The diagram isn't a demonstration of clock gating. It is showing the impact of skew between different portions of a clock distribution tree. This is a reality of synthesizing any practical design even if you aren't gating the clock. A gated clock introduces additional skew on nodes within its fanout in addition to that which naturally occurs in clock distribution.
In non-trivial devices the clocks are passed through a tree of buffers to minimize capacitive load. In FPGAs the clocks are usually routed on carefully designed global clock nets that have been optimized to minimize skew. In ASICs balanced clock trees will be synthesized and physical timing constraints will guide placement of the buffers to minimize skew at the flip-flops. Unless you are doing something exotic, the backend tools will take care of getting you the best clock trees possible.
As a designer you primarily deal with the skew problem by setting up proper timing constraints and using static timing analysis to verify you meet setup and hold requirements under worst case (and best case) conditions. An FPGA has already had its delays characterized for use in static timing. With an ASIC, the delays in your design will be estimated before and after place-and-route and fed into the analyzer. A gated clock will introduce skew that reduces the available timing budget on the affected data paths. The timing analyzer will account for this if you have set up the constraints properly. Once you pass static timing on the final design, your job is done.
If you have timing failures due to combinational delays in your datapath You have to do one of the following:
Reduce the failing combinational path by reorganizing the logic or inserting pipeline stages
Use a slower clock
Define a multi-cycle delay if you don't need valid results on every cycle
If a gated clock introduces too much skew you can think of it as creating a new clock domain altogether and using clock domain synchronization techniques to pass signals between the separate domains.

Resources