zoukankan      html  css  js  c++  java
  • SystemVerilog语言简介(三) 分类: 硬件开发_FPGA 2013-10-09 16:52 540人阅读 评论(0) 收藏

    15. 强制类型转换

     

    Verilog不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用'操作符提供了数据类型的强制转换功能。这种强制转换可以转换成任意类型,包括用户定义的类型。例如:

     

     

    int' (2.0 * 3.0) // 将结果转换为int类型

     

    mytype' (foo) // foo转换为mytype类型

     

     

     

    一个值还可以通过在强制转换操作符前指定一个10进制数来转换成不同的向量宽度,例如:

     

    17' (x - 2) // 将结果转换为17位宽度

     

     

    也可以将结果转换成有符号值,例如:

     

     

    signed' (x) // x转换为有符号值

     

    16. 操作符

     

    Verilog没有C语言的递增(++)和递减(--)操作符。而SystemVerilog加入了几个新的操作符:

     

    l         ++和--:递增和递减操作符;

     

    l         +=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=赋值操作符;

     

    17. 唯一性和优先级决定语句

     

    在Verilog中,如果没有遵循严格的编码风格,它的if-elsecase语句会在RTL仿真和RTL综合间具有不一致的结果。如果没有正确使用full_caseparallel_case综合指令还会引起一些其它的错误。

     

    SystemVerilog能够显式地指明什么时候一条决定语句的分支是唯一的,或者什么时候需要计算优先级。我们可以在if或case关键字之前使用uniquerequires关键字。这些关键字可以向仿真器、综合编译器、以及其它工具指示我们期望的硬件类型。工具使用这些信息来检查ifcase语句是否正确建模了期望的逻辑。例如,如果使用unique限定了一个决定语句,那么在不希望的case值出现的时候仿真器就能够发布一个警告信息。

     

    bit [2:0] a;

     

    unique if ((a==0) || (a==1)) y = in1;

     

    else if (a==2) y = in2;

     

    else if (a==4) y = in3; // 3567会引起一个警告

     

     

     

    priority if (a[2:1]==0) y = in1; // a01

     

    else if (a[2]==0) y = in2; // a23

     

    else y = in3; // 如果a为其他的值

     

     

     

    unique case (a)

     

      0, 1: y = in1;

     

      2: y = in2;

     

      4: y = in3;

     

    endcase // 3567会引起一个警告

     

     

     

    priority casez (a)

     

      2'b00? : y = in1; // a01

     

      2'b0?? : y = in2; // a23

     

      default : y = in3; //如果a为其他的值

     

    endcase

     

     

    18. 底部检测的循环

     

    Verilog包含forwhilerepeat循环,这几个循环都是在循环的起始处检测循环条件。SystemVerilog加入了一个do-while循环,这种循环在执行语句的结尾处检测循环条件。

     

    19. 跳转语句

     

    在语句的执行过程中,C语言提供了几种方式来跳转到新的语句,包括:returnbreakcontinuegoto。在Verilog中除了通过使用disable语句跳转到语句组的尾部外,没有提供任何其它跳转语句。使用disable语句执行中止和继续功能要求加入块的名字,并且会产生不直观的代码。SystemVerilog加入了C语言的breakcontinue关键字,这两个关键字不要求使用块名字。另外,SystemVerilog还加入了一个return关键字,它可以用来在任何执行点上退出一个任务或函数。

     

    l         break:退出一个循环,与C语言相同;

     

    l         continue:跳转到一个循环的尾部,与C语言相同;

     

    l         return 表达式:退出一个函数;

     

    l         return:退出一个任务或void类型的函数。

     

    SystemVerilog没有包含C语言中的goto语句。

     

    20. 块名字和语句标签

     

    在Verilog中,我们可以通过在beginfork

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)
    代码分层思考
    bash 字符串处理
    Shell脚本调试技术
    php fsockopen
    ajax 无刷新文件上传
    jquery validator
    详解机器学习中的熵、联合熵、条件熵、相对熵和交叉熵
    互信息
    条件熵
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706750.html
Copyright © 2011-2022 走看看