5.1. Synthesizable and Non-Synthesizable Verilog
constructs
Synthesizable
|
Non-Synthesizable
|
|
Basic
|
Identifiers, escaped identifiers, Sized constants (b, o, d, h),
Unsized constants (2'b11, 3'07, 32'd123, 8'hff), Signed constants (s)
3'bs101, module, endmodule, macromodule, ANSI-style module, task, and
function port lists
|
system tasks, real constants
|
Data types
|
wire, wand, wor, tri, triand, trior, supply0, supply1, trireg
(treated as wire), reg, integer, parameter, input, output, inout, memory(reg
[7:0] x [3:0];), N-dimensional arrays,
|
real, time, event, tri0, tri1
|
Module instances
|
Connect port by name, order, Override parameter by order,
Override parameter by name, Constants connected to ports, Unconnected ports,
Expressions connected to ports,
|
Delay on built-in gates
|
Generate statements
|
if,case,for generate, concurrent begin end blocks, genvar,
|
|
Primitives
|
and, or, nand, nor, xor, xnor,not, notif0, notif1, buf, bufif0,
bufif1, tran,
|
User defined primitives
(UDPs), table, pullup, pulldown, pmos, nmos, cmos, rpmos, rnmos, rcmos, tranif0, tranif1, rtran, rtranif0, rtranif1, |
Operators and
expressions |
+, - (binary and unary)
|
|
Bitwise operations
|
&, |, ^, ~^, ^~
|
|
Reduction operations
|
&, |, ^, ~&, ~|, ~^, ^~, !, &&, || , ==, !=,
<, <=, >, >=, <<, >>, <<< >>>, {},
{n{}}, ?:, function call
|
===, !==
|
Event control
|
event or, @ (partial), event or using comma syntax, posedge,
negedge (partial),
|
Event trigger (->), delay and wait (#)
|
Bit and part selects
|
Bit select, Bit select of array element, Constant part select,
Variable part select ( +:, -:), Variable bit-select on left side of an
assignment
|
|
Continuous assignments
|
net and wire declaration, assign
|
Using delay
|
Procedural blocks
|
always (exactly one @ required),
|
initial
|
Procedural statements
|
;, begin-end, if-else, repeat, case, casex, casez, default,
for-while-forever-disable(partial),
|
fork, join
|
Procedural assignments
|
blocking (=), non-blocking (<=)
|
force, release
|
Functions and tasks
|
Functions, tasks
|
|
Compiler directives
|
`define, `undef, `resetall, `ifndef, `elsif, `line, `ifdef,
`else, `endif, `include
|
References
[HM] Himanshu Bhatnagar, Advanced ASIC chip Synthesis Using Synopsys Design Compiler, Physical Compiler and PrimeTime, Kluwer Academic Publishers, Second edition, 2002
[DC] Design Compiler® User Guide, Version X-2005.09, September 2005
[HM] Himanshu Bhatnagar, Advanced ASIC chip Synthesis Using Synopsys Design Compiler, Physical Compiler and PrimeTime, Kluwer Academic Publishers, Second edition, 2002
[DC] Design Compiler® User Guide, Version X-2005.09, September 2005
[RC] Using Encounter® RTL Compiler, Product Version 8.1.202, April 2009
[BH] J. Bhasker, Rakesh Chadha, Static Timing Analysis for Nanometer Designs A Practical Approach, 2009
and what about loops,are they synthesizable?????
ReplyDeleteIf you understand what is verilog you will realize that loops make no sense and serve no purpose.
Deleteplease explain me properly
Deletefor and do-while loops are synthesizable. The repeat is not synthesizable.
Deleteloops are synthesize-able until they don't depend on inputs. e.g you have loop for(int i = 0; i<10; i++) this is synthesize-able. but if you have loop for(int i = 0; i < inp1; i++) this is not synthesize-able.
DeleteThey are synthesizable as long as they are running for a fixed number of times but not a dynamic value. Ex: for(i=0;i<5;i++) is fine but for(i=0;i<j;i++) is not.
ReplyDeleteYes, for and while loops are synthesizable
ReplyDeletewand, wor are synthesizable or not?
ReplyDeletewhy user define primitive and timing is not synthesizable??
ReplyDelete$size is synthesisable?
ReplyDeleteWhy are they not synthesizable ?
ReplyDelete