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

FPGA中不可综合语句汇总

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
FPGA中不可综合语句汇总
( C1 f; }0 ]. e& h7 B8 t0 e
  q: H$ E3 T! j* M
(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。" L1 T: B$ g3 \
        (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。2 V1 s, h2 z- Z; J) l& N
        (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。
% o' _- H  D) A0 D- ^* X8 d% e! J$ y) B, u9 K) n
        建立可综合模型的原则+ u4 x4 K1 N6 P+ B  s- R6 w7 M
         要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:
# X4 k7 `0 |/ `7 U        (1)不使用initial。
$ ^8 d/ \. T) P& ], K        (2)不使用#10。
# {: K5 A/ D3 r3 ~* T) G+ Q1 b        (3)不使用循环次数不确定的循环语句,如forever、while等。
& G- r1 @4 {0 W2 B- p% X        (4)不使用用户自定义原语(UDP元件)。
$ |- E4 s4 m5 Q0 ]/ z9 p        (5)尽量使用同步方式设计电路。
9 ?, c9 {) m; m, T: X        (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。9 g1 q# K  ]9 q5 [" W9 ~
        (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。6 h3 a4 R: F1 ~; v# }
        (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。
! Z& P7 L$ i% G        (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。6 G3 g: b5 o6 h, H7 K% Y% J; K
        (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。6 d' Q9 V; m- q& ^8 b
        (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。9 @/ d+ n5 \! {8 F
        (12)避免混合使用上升沿和下降沿触发的触发器。  w1 V2 }3 E" J; A3 G
        (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。
; t1 b5 r3 k3 O$ r; o. v        (14)避免在case语句的分支项中使用x值或z值。
7 p) [$ B& o/ k: e  b! V0 [. C0 @1 \
        不可综合verilog语句4 Q1 J0 U2 {& m* C' f% n4 w: q
        1、initial                   3 d( {! T4 |$ C- W
                 只能在test bench中使用,不能综合。(我用ISE9.1综合时,有的简单的initial也可以综合,不知道为什么)& u5 G1 i& Z5 g, N% ~# h7 r, m
        2、events                  % p: Y2 R! n+ e* H, m
                 event在同步test bench时更有用,不能综合。% ?9 R% E7 s6 ?4 p5 ^% K1 b3 j& S
        3、real                       
  l3 a; R0 e* l$ k% [/ a                   不支持real数据类型的综合。
7 Q% ]& c3 V6 }7 C2 E        4、time                           % H& Y( k/ T+ j9 O9 ]" J0 A- r7 O
                    不支持time数据类型的综合。
8 x5 E$ j. e0 r9 g5 o        5、force 和release      
; G' p( \; l0 [5 `: G' Z, P                  不支持force和release的综合。' q) |0 O# u% D
        6、assign 和deassign      
5 d; Q4 l4 _% D6 c: Q2 J9 M3 l                  不支持对reg 数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。9 }3 H" t& r" ?- B8 f8 }
        7、fork join                7 L+ S* S/ C9 f4 z( E" ~: B
                   不可综合,可以使用非块语句达到同样的效果。& }- ?+ S* n  x3 D; \
        8、primitives               
; O: j+ @7 L) A0 D( |* K; f- {                  支持门级原语的综合,不支持非门级原语的综合。
0 L# @% G" B# U; W        9、table                      z+ T) O7 ]0 a
                   不支持UDP 和table的综合。
  t2 P/ q4 U( p" q        10、敏感列表里同时带有posedge和negedge- K' X' n  p+ T8 T, f
                  如:always @(posedgeclk or negedgeclk) begin...end  d5 O6 m9 F& J7 f+ v, }' \1 g
                   这个always块不可综合。  i2 R# I2 j9 g' m9 j
        11、同一个reg变量被多个always块驱动
, `1 |& J( x8 l( `        12、延时
" P+ r0 O1 a: o2 _" L6 w: N                   以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。, [- R% n8 V2 k7 E0 q! p
                   如:a=#10 b;5 l: Z4 I* X6 o. l9 q
                   这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;% x# H5 {$ @% I0 n$ `" Z4 u+ {
        13、与X、Z的比较
9 L$ m. e' Z0 n( ]3 L: a                  可能会有人喜欢在条件表达式中把数据和X(或Z)进行比较,殊不知这是不可综合的,综合工具同样会忽略。所以要确保信号只有两个状态:0或1。
- l) H% |! n  Z5 P            如:
: O3 O/ q6 N% g9 S. U$ w0 R7 D, J  V                module synthesis_compare_xz (a,b);' g' {% O1 ~$ f% O
                output a;
# m" F7 [  A' W                input b;
- ~0 m( }  ~% A% t( E" N( }  ]                reg a;+ |2 \' _) g# B4 x
   ' z) m3 d" O, V7 r" V* C
                always @ (b)% @' ~8 P! m1 T# H7 M, ?: m$ A
                        begin
- y- F5 \* d) m6 f1 T, g5 G! c* ]& W                                if ((b == 1'bz) || (b == 1'bx))' r$ q7 T; E) @% d; ]* h- z
                                         begin
$ Z0 ?; [  ^# u' F" ?                                                a = 1;
2 B0 t( \! d* ]& `3 {0 U                                        end , e! F7 g1 P' L# Z
                                else
. }) `5 j! A2 J5 c9 k* J                                         begin
# [, S1 f+ Y0 ?/ Y. t                                                a = 0;
; G9 e3 h2 V# y6 ]6 ~                                        end
( ]; t, ~. d0 P* {                        end
/ F$ s2 i7 x% V# y: ^1 J  R! k  
& \  n  m: k! B3 A$ @4 eendmodule
6 t$ y. i' A& m1 @% A8 r# y

# G) W& o8 L, i5 i1 R7 h6 S8 f1 q% w0 t3 W, V: I

% b  o( J: G( Z+ ~! O# [# N; _( P/ x1 z2 g, S. u5 L6 N" }

0 y% |' c: a& Z& D" O$ P; P6 V7 S) {) A. ~- N( M7 E+ L1 p

' H8 ]- E, d" K( u/ T
# m0 B9 {' ]. ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 10:36 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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