TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Verilog HDL语句 可综合经验
6 V: w) o+ r" F! Y* d( u; K8 s" j4 g1 s" ?$ E$ ?) X! X
连续赋值语句的综合:从赋值语句右边提取出逻辑,用于驱动赋值语句左边的net 6 A& ` l3 P9 \. J& e0 l- B
) ^: _" C' [& u3 l
过程赋值语句的综合:从赋值语句右边提取出的逻辑,用于驱动赋值语句左边的reg型变量。注意:initia语句仅用于仿真,不综合。只有在always中才能被综合。
4 U' J/ x! v- U- F% z: Y. |4 L, a
建议组合逻辑用阻塞语句,时序逻辑用非阻塞语句,任何延时控制(如#5)都被综合工具器忽略。一个模块中同一个变量不能既有阻塞赋值,又有非阻塞赋值。
) d ?/ [: O0 |7 ^- R) ~/ g$ Q5 L
always语句的综合 " {( h. I" h5 r. J! h
! O; E# Y5 d$ O Q: y# b3 V3 m3 y1对于组合逻辑,事件列表必须包括所有always语句中引用的变量,否则会造成综合的结果与设计功能不匹配。 ( A5 B( S/ B, B' y. n: s7 J
: F& c6 ?7 c- ~" ]2临时变量可以不用在事件列表中列出。
+ I. g K. \- ~& `' m* ^5 T6 f9 `( v1 R: l/ n& Q
if语句的综合 ' x! f! p8 k$ B- n, {$ U
_( N) J9 k( z u! d) w特别要注意综合出锁存器。always中,某个变量没有在所有的条件分支中被赋值,就会综合出锁存器。 ; n/ R w/ v+ c. i6 R c
; l& k6 `& A3 d7 ?" P
case语句综合 V1 R% J4 a- v3 h! m+ v7 ^
1 [1 I2 W4 k$ T! Z" z# R6 Z# z和if语句一样,不完整的case分支语句也会导致锁存器的综合。 % O* r9 j, }, V/ e
3 k7 ?* r. k b; P; ?7 g( j避免方法:
' H' B$ w# r& r$ G% ]1 [6 _9 L" g2 c8 [# w3 K& ^% x- {. n
1)在case语句前,对要赋值的变量赋予初值 : e$ c& A8 M, w& H" F
^1 \1 {) o' halways @ (state or a or b) begin : O* F8 u# n# g/ b& o# d9 H/ A
& K$ [9 H* a, v- a2 U# E
q =0;
7 i; u, U) x) G U8 |6 H, U3 F/ r' S
case(state)
9 v1 T! t, s8 e- N$ g- [9 e# z( e. O: N+ |/ v2 ?5 h
3‘b000: q = A & B; $ Q6 u9 z: f( ?$ A
: W) X' w% c" R8 I# C……
; u$ @: z; _: M$ A! n* w# I
. s, |# c9 l8 Q: H2)使用default分支语句 5 T- O$ b6 n2 i
+ Q; V" q* }8 O% I
3)使用综合指令,具体用法在case关键字行的注释中插入”synthesis full_case“
' ^6 V& P: s K% t7 M$ L7 D$ Z
6 ~; B0 W5 P7 T6 C并行CASE语句
. }8 V( g% k6 H3 o7 n$ a" K7 [8 G. ~- s
通常情况下case语句和if语句一样会综合出代有优先权解码的硬件电路,从上大侠选项优先级逐渐降低。但如果设计者知道case语句中的所有项是互斥的,这时候就使用”parallel_case"综合指令。 , Z4 V8 t: c" N1 K1 g. o, \
: O, B' ?+ [( _1 f4 a) @always @(key) : B% I; e; d8 i) P0 s; M3 f# N
# t1 |* K& l2 D0 m' ~) Xcase(key) //synthesis parallel_case : } g' @2 V0 a- u
# \: p" S3 u0 V8 r
4‘b0001: a = 0;
/ H8 R7 L4 c2 F) D- R
6 m% P. P# n# X5 zendcase
' C+ R4 o& p' { |
|