找回密码
 注册
关于网站域名变更的通知
查看: 877|回复: 0
打印 上一主题 下一主题

FPGA中不可综合语句汇总

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-26 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA中不可综合语句汇总

! q5 o' E% ?* E7 m5 G. I
/ a5 M9 @/ f/ d. f
(1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。
, x3 V# H- \/ Q: _        (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。
9 z$ i% _: {/ j) e0 r- w8 P) R  {$ [        (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。
# N, D. p0 v# H& J3 H' ]% M/ \. i* S- c" i. F) f
        建立可综合模型的原则# r! X  Q+ |% n3 Y/ i0 t
         要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:
: J! a% M4 H+ t5 f0 x- X+ b% L" Q4 {        (1)不使用initial。# j4 N2 a. ?& p) p1 Q2 v  _
        (2)不使用#10。
! ^+ V2 M" s3 E        (3)不使用循环次数不确定的循环语句,如forever、while等。8 ~; R- }4 _" v0 F5 f) S
        (4)不使用用户自定义原语(UDP元件)。3 h: E4 n( o  q9 a( _
        (5)尽量使用同步方式设计电路。
% |2 d3 a$ z, Q& G8 Q8 q        (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。
! ]/ b4 |7 Q! l; M0 |8 C        (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。9 V3 V. ]9 D( B4 p+ e
        (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。
& d. T, `* j. c5 G) O$ g        (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。7 z5 W0 ]8 [' J+ |8 Y$ e: N- `8 P
        (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。
6 l+ C; s/ N0 ?1 T5 B2 B; K6 w        (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。
2 O9 F; v3 A& J/ E( R3 `# I        (12)避免混合使用上升沿和下降沿触发的触发器。
. k& f. e8 N7 V: L: O3 Q        (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。" y5 l6 F+ Y3 G5 c# }; I
        (14)避免在case语句的分支项中使用x值或z值。
0 _% r" R/ _4 |1 S, W! v
0 r6 o3 F/ D! y1 ^" ~( Y. A' ]        不可综合verilog语句
* o: O+ Z2 ]# I0 d0 N& N$ @" Z        1、initial                   , T( ~! B6 V6 r' G: c3 W
                 只能在test bench中使用,不能综合。(我用ISE9.1综合时,有的简单的initial也可以综合,不知道为什么)
1 O. }9 c8 c& H* z        2、events                  ; P; l8 j; G( g; U& C, }
                 event在同步test bench时更有用,不能综合。4 p( q6 |( O: N& z/ |' j+ p
        3、real                       
1 Z, I1 U* H7 b/ W3 u                   不支持real数据类型的综合。+ w( l4 i4 s6 B' K3 T
        4、time                           
( n9 G$ h8 {5 s2 `( q. K% K3 o                    不支持time数据类型的综合。' v. a% Q0 ], l: [8 Q6 |
        5、force 和release        m( S2 [. |4 v- v/ b0 b! z1 K
                  不支持force和release的综合。
, ~! j- W3 b: e, ?! y        6、assign 和deassign      
1 O# K# `! Z( G' t8 ^                  不支持对reg 数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。5 f3 t% ?* L! r& Q
        7、fork join                2 I0 a8 ?8 O5 D% y2 |
                   不可综合,可以使用非块语句达到同样的效果。
3 X* H7 Y( E6 e3 u: ?: {  j8 [. B        8、primitives               
7 h+ }7 f+ d$ k+ X8 U9 \! L                  支持门级原语的综合,不支持非门级原语的综合。
5 r4 f' a" C- g5 s7 f        9、table                    ; k. a3 |8 s" i
                   不支持UDP 和table的综合。4 H$ k$ D4 V/ E# z1 A2 {3 ^2 u
        10、敏感列表里同时带有posedge和negedge. S; |+ N; o" g
                  如:always @(posedgeclk or negedgeclk) begin...end% Z$ u, e5 ]: q, E) S" q# k. b/ O
                   这个always块不可综合。
' i5 g; n% @3 x+ o0 ~# ]( `5 k        11、同一个reg变量被多个always块驱动+ V) \$ S# e! m9 \+ l3 q
        12、延时
: U& Y% O# G( W9 W+ O: G4 d& l                   以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。. x& V6 \. E  H
                   如:a=#10 b;/ t) D  I& c! x( K/ }9 b' q. X
                   这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;
1 a# ?- D$ ~- `+ N4 u- o        13、与X、Z的比较
* G3 {# t' z- P' W) b" I2 d4 t- D                  可能会有人喜欢在条件表达式中把数据和X(或Z)进行比较,殊不知这是不可综合的,综合工具同样会忽略。所以要确保信号只有两个状态:0或1。
1 u4 b" s9 e) o- ~' ?& k+ k            如:
1 }* m4 {' j  B                module synthesis_compare_xz (a,b);" h  B. {6 Q2 D8 O& c9 p
                output a;7 H* R. _" V" G% i8 ?
                input b;
( y- C4 [! }, K- |2 b% [0 B                reg a;$ c7 F! Z0 R# L
   4 y8 w0 e& S/ B- f. a4 L+ q
                always @ (b)& @* S7 t$ R0 k. }% q; i$ D
                        begin
  N: l9 C5 i& z3 x+ e- r                                if ((b == 1'bz) || (b == 1'bx))
# w5 _) R& T6 J- f' w                                         begin
: @, q+ v& J5 @8 C                                                a = 1;
$ }. i* ?: ^3 |2 C* W; E* y- h                                        end ; J3 w, n5 E% Z
                                else
/ Z% j, }9 r; j/ U/ X& `/ A% e                                         begin( P7 q2 P/ G+ M  Q
                                                a = 0;
5 ~1 s  P; f; B1 {' _8 w' _                                        end# |- k/ ^2 b, Z- A" w/ S* E+ \
                        end 2 [# E, V2 L! W. i
  
. U9 U1 \) o" _- M5 ?% s% f7 Sendmodule; T5 f. Q4 ]  j$ d

$ [% x2 v) A4 j
  E1 V- P1 m" F9 L; F" x9 W  t# a9 `2 U+ S1 j

8 F6 t4 y/ u, b- q, e' }+ Z1 C
7 k, o9 m% l8 c+ P

9 J1 W1 B7 S" j9 r, c

; h6 t  E- V! @4 U* }. F# j& a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-6 15:05 , Processed in 0.140625 second(s), 25 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表