Synthesis of `always` blocks

2019-08-11 05:58发布

The Verilog Golden Reference Guide on page 12 warns against unsynthesisable always blocks, and gives templates to be followed to reduce the chances of inadvertently creating unsynthesisable always blocks. However, the guide does not explain why, and in which situations, an always block is not synthesisable.

What are the most common reasons for an always block to not be synthesisable?

标签: verilog
2条回答
唯我独甜
2楼-- · 2019-08-11 05:58

Basically every always block is describing a group of flip-flop, a group of latch, or a block of combinational circuit.

These three have different coding formats and should not be mixed, otherwise it may not be synthesizable. (sometime latch and combination circuit and be mixed but should be avoided)

Any always blocks that cannot be mapped to these three types of circuits are not synthesizable.

For example, mixed sensitive list of signals and edges is not synthesizable, because a flip-flop cannot be edge-tiggered and level-triggered at the same time.

More than two clocks are not synthesizable.

Embedded always blocks are not synthesizable.

查看更多
Animai°情兽
3楼-- · 2019-08-11 06:13

Adding timing delays would not be synthesisable, but often used in verification. Also some tools will complain if you try to synthesise display statements.

always @* begin
 $display("%t", $realtime);
 #1 x = y;                  //Delayed by 1 time unit
 $display("%t", $realtime);
end 
查看更多
登录 后发表回答