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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    Verilog学习笔记基本语法篇——运算符
      c0 }' V5 g' P; M; ^- Y
      @0 Q# H1 h8 g
    Verilog HDL的语言的运算符的范围很广,按照其功能大概可以分为以下几类:4 _- r: M/ N9 H4 l# S2 ~

    : X' J8 I% ^1 r" m" T* d8 U8 z3 i(1)算术运算符 +,-,*,/,%                             
    3 w6 U* L9 M. g  J! Z3 q7 A, O( p3 d# q) n# s
    优先顺序3 L: O( Y& {! X* |4 g" v) B  X
    !~
    . b. N( B3 S: e! J: G* X6 p
    2 H4 b* Y1 l2 e/ d2 q2 k, l' ~) q" _*  /   %( d  A6 p1 }; l' K5 o$ M; i6 g8 @0 \

    - q3 \! T9 ?  ]5 v0 A) j+ V+    -4 e5 P7 G- f" l2 Z

    " `, g6 D8 H8 c, x<<    >>
    ( _4 A( Z) N8 E. \* y+ t
    $ |3 D9 ^  e! Q% S8 w) ?  C<    <=  >   >=  
    3 ?% o1 P+ T8 w7 }  e1 d; D9 O, u+ s1 \/ a
    ==  !==  === !===
    . h# Z8 u, G$ m  ?0 i  _
    + q& q  S" w, K4 t' V! B# r& v&! P9 o* z1 B( o: `" I! W5 c
    1 Q) i$ v- @: o3 M' I
    ^  ^~$ C4 B, V, n, f7 r& M! u

    , f! }& Q% P0 h' C* I3 }|
    . N* B; T/ u, h4 w. Z/ B( T0 ]% d2 R( C4 L5 N$ x% G. E" U) t
    &&  }' F* m2 Z1 _

    7 w0 P4 N8 T4 Z/ g||! Y; W6 o* d. C2 X
    9 M* q+ _  y% Z& }5 J1 ?
    ?:5 d6 D6 p/ v* b! O- v, \. v& a
    - ?0 A2 Q+ {" q" B' Q/ e1 {$ a* A( ~! g
    最高优先级别
    3 k3 O9 @. v2 N% a3 K/ i) q
    & P9 W( M. x/ X! w" d$ [$ S
    0 i8 C3 A0 m# L+ m4 f# o# Z9 p8 O( Y! f

    4 O/ t7 s2 @, \* T+ I1 s" ?' P# D2 s9 r+ y

    ) G  A2 Z* {: `9 Y* R3 X: N0 |2 j
    , d/ P. N7 t; c/ d* M$ x2 x' C* n4 g0 Y( j- T

    7 f6 x( v( u, H; i; t最低优先级别1 ]8 a. T# \: o( M7 T& m( T/ T
    : e8 O$ `" }- f) e
    (2)赋值运算符 =,<=                                                  ; p' W0 `* B7 `5 a5 d8 j; F

    ' c( }# B# b" ~- G0 @. i(3)关系运算符> ,<,>=,<=
    $ d( [4 M4 K; w' m7 y- S. _: ~1 D  B. F
    (4)逻辑运算符 &&, ||, !
    9 ?9 f- ^, e" }! K9 P: g
    + q3 }/ c" y# l& D(5)条件运算符 ?:7 C5 t& P2 m; p$ c1 Z
    : {7 z8 F, O( b' o3 e* B
    (6)位运算符 ~, | , ^ ,& ,^~, b; J: q) u1 I3 O7 {- G$ N
    + g4 L2 P$ S) Y, v
    (7)移位运算符 << ,>>$ h& }( h$ P" p/ X& E" @( j0 z
    / _' F# d, }! q5 K8 r0 v
    (8)拼接运算符 {}
    3 z( \/ Q: J3 u
    7 B) P% N1 O. L0 X; S6 T(9)其他。" A0 d, S1 W9 {1 P+ P  |* Q8 h
    0 D' @  s  q$ V5 b
    1)基本的算术运算符:加减乘都比较简单这里不再记录。
    5 _3 D3 x) l, y1 e( z8 Z5 I% ~* t/ k- G7 y" b
    在进行整数的除法运算时,结果要略去小数部分,只取整数部分;而进行取模运算时(%,亦称作求余运算符)结果的符号位采用模运算符中第一个操作数的符号。% z) @( ?. T" O8 I+ g! H

    / H) @" Z: Q' T3 v7 ~8 t-10%3  结果 -1  11%-3  结果为2
    . Y: z4 W) e" g8 T; h
    6 Y2 R) x4 |7 t$ t7 w9 [" g0 G注意:在进行算术运算时,如果某一个操作数有不确定的值x,则整个结果也为不确定值x。
    0 Z. c; R, H* ^4 q# L/ ^
    ) w( V$ i' _; A+ A5 D4 X# v0 }* n& B) {( d% v! ]0 S. W3 T
    3 q4 f# G( t. l  F  T" w, g
    2)位运算符:6 Y/ N; w+ c6 b9 l
    + S! j7 |! H; q4 ?' @
    按位取反~ 、按位与 & 、按位或 | 、按位异或 ^ 、按位同或 ^~0 C$ Y+ Z) X$ p4 S  T* i
    3 F+ h* {. S. U
    在不同长度的数据进行位运算时,系统会自动的将两个数右端对齐,位数少的操作数会在相应的高位补0,一时的两个操作数按位进行操作。* {! ~2 [- i9 p# D$ V& Z

    9 _* ~: Z. D8 K4 k" D0 E5 H% L& {4 I
    % k* r% y" Y" }" w: d5 {+ q) l+ u" z+ o8 f
    3)逻辑运算符:
    6 V+ B7 n, j& ^
    . y' r* ]& d9 G, c0 K/ _逻辑与 &&、逻辑或 ||、逻辑非 !1 G7 ~3 K3 |3 R) V

    8 h' H7 x/ e0 z2 p1 g$ R! z5 `其中&&和||是双目运算符,其优先级别低于关系运算符,而 !高于算术运算符。' j9 @  [1 B# _* P( e

    + i& ^) _$ X, e2 I' @; E, F0 w9 U- z( Q

    1 W( c$ p& g- j6 h7 ]( c& E4 j! w! r4)关系运算符
    # o% _* B; K1 ~: T& [2 x: n
    : l( V5 }) v& i9 x( m: ~< 、 > 、  <=  、  >= 如果关系运算是假的,则返回值是0,如果声明的关系是真的,则返回值是1。 关系运算符的优先级别低于算数运算符。
    7 h; J+ R" j3 B1 r* n& S. z
    ' G  D! o- w" {+ R* Q! Y如:  a<size-1                //这种表达方式与下面的表达方式相同
    * ~( d6 [/ W( ^' P# A  f. ~( W2 k9 ~4 v* |9 z6 }5 J
          a<(size-1)             //- |9 e9 [+ u! A$ \7 T: f" C; Y/ s$ R

    : |: g, o" m( m. [2 b      size-1<a               //这种表达方式与下面的表达方式不同5 V. k7 K8 F8 l7 V8 h) _3 F$ J
    ! R' b; @" r& r2 o; x% i% I
          size-(1<a)            //: t; U2 p- j3 @5 J. f3 M/ R1 E2 T

    2 c3 M+ `1 M. l; `( Z# }' J3 ~$ c. ]
    ' Y6 I, W' ?5 O$ Y9 M4 H" j% `- C- w* f: K8 q' n& |
    5)等式运算符+ j6 j4 S0 x& K, _, v( v. s+ x. V2 V
      ?) C7 n8 f7 W& Q- D
    == 、!= 、===、!==  符号之间不能有空格。" Z' ~6 _2 E) w' ]8 j

    1 y0 O0 _* n% d, p/ v“==”和“!=”称作逻辑等式运算符,其结果由两个操作数的值决定。由于操作数可能是x或z,其结果可能为x;
    & d( }# |0 J+ Q8 {/ p5 I
    9 |. [1 ]' S3 [“===”和“!==”常用于case表达式的判别,又称作cae等式运算符。其结果只为0和1.如果操作数中存在x和z,那么操作数必须完全相同结果才为1,否则为0.
    2 |; p. @+ S; R& @- ?8 n4 h0 ]; ?8 [. M9 @" u
    逻辑等式运算符和case等式运算符的区别:
    5 `8 f' F! [/ k) H" N3 z* m* s" }! Q: w
    ===        0        1        x        z                 ==        0        1        x        z0 O8 j" }0 U6 F5 \
    0        1        0        0        0                 0        1        0        x        x
    8 u# B8 D4 M: c3 Z; N( H1        0        1        0        0                 1        0        1        x        x
    5 N% [9 L5 Q' G4 x9 \2 Kx        0        0        1        0                 x        x        x        x        x
    0 s. R9 m8 B3 Bz        0        0        0        1                 z        x        x        x        x7 _9 B1 b# Q8 x1 C  C# h% u6 D, ^
    # Q. \3 W7 q% o9 V. f* K4 |
    - t( m/ j$ L1 n* K3 E: L/ ?

    # h* S: R5 y- {0 j0 L3 S/ k  S8 x5 \' k* v+ p/ y
    4 h. ^& C& h. K. L- q1 x# |9 M8 _
    4 \6 k& B6 Y' `; ~6 `  x
    $ ]5 E& b8 U6 g) i' P: |. k
    " f  f: ~# M9 _  w

    ' a0 ~2 k( Y8 c
    , c  k% \1 s7 u. O' ?9 o6)移位运算符
    ) ^, y6 U- \- p" I' ~3 S+ p$ q; y0 \+ W# H" t; Y0 N
    << 、 >>  a>>n其中a代表要进行移位的操作数,n代表要移几位。这两种移位运算都用0来填补移出的空位。
    1 X" g6 ^; m8 [" C7 S9 g0 S- E( W0 p  {& v2 ~
    如果操作数已经定义了位宽,则进行移位后操作数改变,但是其位宽不变。
    5 ]/ K1 g- A" N2 W/ R# d# z! ]  {: Q8 u# \! s7 s
    /*不懂之处;(夏宇闻第三版,p41), @8 Y% f  h8 J' {
    " Y" [$ E, E# w% W# G2 |2 S: A  O
    4'b1001<<1=5'b10010;    4'b1001<<2=6'b100100;   (左移会使得位数增加?)
    % m  \6 s7 ~8 o* `. K
    8 ?# |2 D. k) T: P. H1<<6=32'b1000000;        4'b1001>>1=4'b0100;       (右移不会改变位数?)
    9 A9 x  M" b' Y# U4 K  }* F7 I% {3 X- G( |" Z8 ^) o7 e, U# _
    4‘b1001>>4=4'b0000;
    % [5 X' [( g$ V. D- P3 x
    , C' ^% b: E, ^! G* P/ P* R' a*/
    ; l9 z! J- L4 A7 A5 r
    3 p; m$ X" h. ^4 m% E6 Q
    4 c; B: i  p- _- L; x) D3 `8 A1 j" ^% S% S* o! d% q
    7)位拼接运算符& O, X0 ^% D  G, D0 X4 @
      [% [5 J  r4 G( K
    {信号1的某几位,信号2的某几位,......信号n的某几位} 将某些信号的某些为列出来,中间用逗号分开,最后用大括号括起来表示一个整体的信号。
    7 f7 b2 q  \$ ?- S  _/ y. i0 P& O: s7 c2 M4 a8 Q! Q
    在位拼接的表达式中不允许存在没有指明位数的信号。/ ^/ p' C3 S+ t2 D; I, e) Z

    6 S* j. D3 m4 V3 j. B& y7 @{a,b[3:0],w,3'b101}               //等同于{a,b[3],b[2],b[1],b[0],w,1b'1,1'b0,1'b1}
    ' h% m( t7 j- R. ?1 d- r% O
    0 i+ }- v$ y4 C( R/ U5 X0 N{4{w}}                                   //等同于{w,w,w,w}1 |  I) B7 G% ~, t' ?
    & }5 l8 t4 T6 Q3 l( z
    {b,{3{a,b}}}                          //等同于{b,a,b,a,b,a,b}  这里面的3、4必须是常量表达式。( W2 x! A/ B5 L- d' K

    ! ]- b5 z0 ~% D" a+ \1 w" \8 m4 t! U+ x8 x0 a
    - [  u6 s* q8 C# m3 P
    8)缩减运算符9 J( h1 @3 E, n/ F3 D: C( O  T

    1 o6 `( F. {, r0 R- W* Y' F; Z% g9 o  k这是单目运算符,也包括与、或、非运算。运算规则与位运算相似,不过是对单个运算符的每一位逐步运算,最后的运算结果是一位的二进制数。7 Y# D+ Z" D5 Z- N0 A' Y; ]" e4 n, t

    7 X1 C; x6 T/ d$ a5 m# X( W4 x& Oc=&B;          //意思同c=((B[0]&B[1]) &B[2] ) & B[3];

    $ B1 }  ]9 n* i" J' i- `9 ]

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-29 04:21 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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