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

Verilog学习笔记基本语法篇——运算符

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-3-17 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    Verilog学习笔记基本语法篇——运算符

    4 Q. i3 W! N' k' M6 z# I/ b2 _. Z  g, `2 M
    Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类:% h& @6 j7 Y# ?$ t- H

    . q6 O" o7 Z+ L& p9 G% @: h(1)算术运算符 +,-,*,/,%                             * l1 e+ h+ O' ?1 p1 L# T

    0 b. U. F) ~: v7 i+ J: w4 ^6 z优先顺序9 r" M4 K& _7 T: C9 D% J
    !~( w" @! }' F* G7 i% X. V

      I/ X/ Q! g$ l* i  d/ Z& S1 j*  /   %
    ) U5 G' J9 M% e. z" n! Y, b0 Q( n2 Y8 {3 X1 `9 J4 k* I
    +    -
    8 ~+ n# w4 a" _1 [
    - G2 ^" w# I7 a<<    >>8 X8 H9 z2 m( }0 |! s4 l* o" U
      L5 h2 `' G- j9 M  L7 X7 F: B( O
    <    <=  >   >=  % W9 D, }* s# }0 q. b

    5 R! _% P" L& C. |2 V# u==  !==  === !===
    ! X& @' u$ i7 l5 j$ W1 Q6 a6 P
    " B+ x7 J8 M: c! b&) S0 h8 P# C5 J$ L/ _4 B

    9 s% ]( l8 f/ m* C, A^  ^~
    , a% B4 w( p. ~( u
    5 x! R9 V  H1 y|
    , O  y. u7 R0 b, M' H' N7 |& |) r" z, a- n  @
    &&
    4 p$ z- T8 _( y1 m- [( o3 i+ x; E- f
    ' Q4 V) b: u# \0 ^||
    / c6 w8 G9 O9 G& ^: [8 B& d! r4 @
    ?:
    9 s0 c, U) c$ M" A/ i1 A. c" e
    ! F9 z) i5 R: l最高优先级别& ]2 U/ N- Z2 H5 C, E

    ; p; Z. O8 s( w( x/ N( D* y7 @! b3 }

    $ C7 X2 ^, F/ J( \6 @+ y: V. n: L, z- P

      H$ \6 q) r* T1 e6 {9 z& s% b5 x/ j  R% K
    : k( s: W  v9 ?5 ~% A' {- q
    + h$ h! V/ S& o6 ^

    : J; F6 g+ B6 C: H  B& d  o. p最低优先级别4 }3 \$ _: ]! k5 V8 U6 _, o
    8 h9 t0 a1 G- I$ l3 g+ Z
    (2)赋值运算符 =,<=                                                  
    ! U' S3 b* j5 U, u) d9 X. T& c4 X6 b2 h( ~" R, A
    (3)关系运算符> ,<,>=,<=
    2 P/ V5 I2 M" _* X) F: h. i" W7 ~! G& Z, b9 g8 J
    (4)逻辑运算符 &&, ||, !# L* U2 a" K9 ?6 d- S: Z

    ' B2 M/ P8 @2 H) n7 v+ c/ N(5)条件运算符 ?:
    - c  c& L- Y, r5 Q/ \! S$ [+ s' X3 J4 o% N) D
    (6)位运算符 ~, | , ^ ,& ,^~0 J) l; P1 L: a7 i3 ?

    $ Y6 p+ y/ u% c+ K6 d. Y(7)移位运算符 << ,>>
    9 q, M0 _( z1 W1 p1 C) l8 H( x1 @8 O9 Z# k. l' ?
    (8)拼接运算符 {}( X0 w) k( d- b6 P
    $ {# }1 P- O7 M9 H2 }. ]- v3 i8 _1 ^  F
    (9)其他。
    5 S9 i- P3 @5 B3 R2 S( t; f) F# Q
    + M) a6 k  {: o1)基本的算术运算符:加减乘都比较简单这里不再记录。
    . y& ~/ V) K  v. _+ T4 ~. d
    7 O7 Q+ K4 E' J$ n& x, V7 i. z在进行整数的除法运算时,结果要略去小数部分,只取整数部分;而进行取模运算时(%,亦称作求余运算符)结果的符号位采用模运算符中第一个操作数的符号。( X" S/ O3 P( ]9 m. p# a

    * Q: @% I: ?3 h7 O' B' y6 I6 z-10%3  结果 -1  11%-3  结果为2" h  `, i9 @7 l& L1 ~) M
    4 p: ?9 O+ M  M1 \$ n* B8 ?
    注意:在进行算术运算时,如果某一个操作数有不确定的值x,则整个结果也为不确定值x。- g+ ^+ L( w( K7 j  @0 n! E6 _; {

      p/ r$ b5 k+ z: _" k: A, j
    ! y: H% V) S4 U( P! A6 k* K; ^! q" f* s+ C, r- L
    2)位运算符:
    / A9 d" F* |; R  f% P. J" W4 R' K8 F3 F) g
    按位取反~ 、按位与 & 、按位或 | 、按位异或 ^ 、按位同或 ^~. y# J% |6 ~. @& U' G8 `
      K' u4 [( ?" {& d) H
    在不同长度的数据进行位运算时,系统会自动的将两个数右端对齐,位数少的操作数会在相应的高位补0,一时的两个操作数按位进行操作。
    8 @# M! S: ?1 ]; Z$ f0 f$ D- N+ W, Z/ X' C
    2 M, t* O# T  ]9 @) G3 ^

    6 n* a' a9 g* `* C: v3)逻辑运算符:
    ; p& B) j) M& @4 }* i
      N, m, Q" ~# |0 @8 J逻辑与 &&、逻辑或 ||、逻辑非 !
    / b8 J( O( }7 E  b* O% e" _. r# e" ]' x  k8 G3 g& }; V# R1 v# L, S
    其中&&和||是双目运算符,其优先级别低于关系运算符,而 !高于算术运算符。2 x) o; X0 I/ z9 f
    6 h" d/ m% _# s( F9 ?

    6 f+ N% Z! r1 }+ C6 h- [9 u0 y! d& T  }9 P. {
    4)关系运算符5 p3 \9 n0 Z2 R% E! G3 v
    / v6 I) U" D& G2 i7 g$ h
    < 、 > 、  <=  、  >= 如果关系运算是假的,则返回值是0,如果声明的关系是真的,则返回值是1。 关系运算符的优先级别低于算数运算符。( J; z8 i: o! Y
    ( d3 M! V4 E1 m% E( t
    如:  a<size-1                //这种表达方式与下面的表达方式相同  O, m* w5 `" f' f* G. |2 r; E

    9 }5 f4 r( f/ {9 Y! q      a<(size-1)             //0 x/ U" @" H4 |# z6 O; @
    ; y; @* b6 C/ Q: B) x! W
          size-1<a               //这种表达方式与下面的表达方式不同) h2 O: K! D. y* A
    3 C' D) v" a8 [( [- z- e. G
          size-(1<a)            //
    - i) a* q8 w) p( P' W0 L, h/ Z# l3 i' o. q3 d% I
    & b: o; r8 C3 j

    + G8 C, t, m' [/ A4 h5)等式运算符
    , B, Y# B' J1 K! K
    7 H! Y5 u. a) |- n. Z1 e7 H== 、!= 、===、!==  符号之间不能有空格。
    5 d# v* `; l( q6 [
    / ?- ^  O/ k: u7 S“==”和“!=”称作逻辑等式运算符,其结果由两个操作数的值决定。由于操作数可能是x或z,其结果可能为x;$ q1 @) v0 y, e. ^8 j6 @- M' K
    . X5 `2 D& j, M( R
    “===”和“!==”常用于case表达式的判别,又称作cae等式运算符。其结果只为0和1.如果操作数中存在x和z,那么操作数必须完全相同结果才为1,否则为0./ Y  e! l/ T( R. S

    $ s: M" b5 p1 @7 |7 ^逻辑等式运算符和case等式运算符的区别:/ f& e( y1 T0 x0 n3 ~7 w: P. |! U
    0 I- J" ]7 d5 J$ p. p% R, F
    ===        0        1        x        z                 ==        0        1        x        z8 |1 K) i6 ^$ h( s$ [# F
    0        1        0        0        0                 0        1        0        x        x
    ; l, r4 W) Q% J: }4 m- W# z& A, I1        0        1        0        0                 1        0        1        x        x# `4 A9 {6 O7 M- {) @0 C
    x        0        0        1        0                 x        x        x        x        x
    0 P; _: |2 ^# p1 C1 P  r: Y5 Tz        0        0        0        1                 z        x        x        x        x/ r7 b9 `5 L5 d* d" E

    7 O* R/ C7 E% M& T* M
    0 m7 ~: O6 _( J" A' l
    - c* S& a0 }- d+ Z0 H. q
    & l' Q; R8 f/ f$ F7 R9 P5 B2 q, t( u3 Y; p" D( V& B

    * X3 I; Q! ]9 I$ t( G  ?, R$ ?: Y1 e' {- G0 ?! f$ a

    * A8 u! w; F4 {
    & S# Q. O- K2 o3 d/ a1 J5 g! G! A" k7 J( F
    6)移位运算符8 v$ j: ], }, L1 x
    ) t( I6 U7 M- E2 [9 a; L- D
    << 、 >>  a>>n其中a代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。* X& P4 X) s2 f3 P) P8 F1 r) {/ l! D$ w
    * ^4 N0 R+ M8 J: R6 Y
    如果操作数已经定义了位宽,则进行移位后操作数改变,但是其位宽不变。
    , `3 c# S: Y, L! M& R( X" b$ \! B+ \  z7 ~
    /*不懂之处;(夏宇闻第三版,p41)! C0 m9 R; U$ r2 \% I
    - ^# I' {. `: D- b6 j# ^& _# j* I
    4'b1001<<1=5'b10010;    4'b1001<<2=6'b100100;   (左移会使得位数增加?)7 B4 E" x% W) J: y  L& c+ X: e6 {

    5 B4 L4 v6 Q9 Q1<<6=32'b1000000;        4'b1001>>1=4'b0100;       (右移不会改变位数?)" j8 _6 K/ L# G( A
    : u1 G7 i; l$ W/ O* h* @
    4‘b1001>>4=4'b0000;6 `4 ~# r* K6 K5 u4 ^5 p( c
    ! d# ?3 E7 v2 m0 |( Z! y9 }
    */8 T9 B4 Z2 f# {% p8 z' {* B2 H
    1 M; p- }7 y6 J6 T
    ! N& A* w% E& c7 Z" E

    # W) `  L+ p5 \  w% m) o! u7)位拼接运算符& R7 j0 o& ], `9 `
    " S1 [3 e+ F8 f. t! d$ [
    {信号1的某几位,信号2的某几位,......信号n的某几位} 将某些信号的某些为列出来,中间用逗号分开,最后用大括号括起来表示一个整体的信号。0 a5 z( ?3 o. T4 H# o  k9 R2 J

    % r. ^$ L( m" u" i4 V7 o2 t) F. H在位拼接的表达式中不允许存在没有指明位数的信号。
    ! `& I( u  H/ n7 e
    ' Q: V2 z. d& m/ j% e0 n{a,b[3:0],w,3'b101}               //等同于{a,b[3],b[2],b[1],b[0],w,1b'1,1'b0,1'b1}0 l, \! U/ {: n* _: \" G% q
    5 F0 _, w' @- |
    {4{w}}                                   //等同于{w,w,w,w}' a- I; U" H/ u8 N5 F
    & c9 L/ {+ k! H8 w$ X* @% n- V
    {b,{3{a,b}}}                          //等同于{b,a,b,a,b,a,b}  这里面的3、4必须是常量表达式。
    / H) ^; X( ]3 Z' r% \
    9 D$ F# }$ J7 {- {; k2 ?  x# @% T. g, B

    3 H% z6 V# t& V! x$ a* q8)缩减运算符
    : |" W% d1 N3 O8 W' T4 V& T- _
    ) x$ A+ n& f! J2 v这是单目运算符,也包括与、或、非运算。运算规则与位运算相似,不过是对单个运算符的每一位逐步运算,最后的运算结果是一位的二进制数。
    ; z5 ?) g- l) P+ W1 _- g0 {) r4 t. _0 Q% ?% e2 `# Z' f+ i
    c=&B;          //意思同c=((B[0]&B[1]) &B[2] ) & B[3];
    9 K" `. @  b3 @1 ]. W3 t7 m

    该用户从未签到

    2#
    发表于 2019-3-18 18:55 | 只看该作者
    总结的不错
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-8 16:30 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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