zoukankan      html  css  js  c++  java
  • systemverilog学习(5)procedural statement ,task ,function&automatic

    本节内容是sv里的剩余语法,task,function,automatic

    一:procedural statement

    1:新操作符

      1)     i++,++i,i--,--i     同c语言,但易出现race现象。

      2)     ==?,!=?    如:a==?b  ,x与z只能出现在右侧,即b的值有x或者z

      3)    inside  用于值的范围

          

    2:强制转换

      1)数据类型强制转换

        通过赋值的方式,例如

        longint a,y;

        real r;

        y=a+longint(r);

      2)位宽强制转换

        

      在要处理的数据前面加上要扩展位宽值,如16‘

      3)符号位强制转换

      将无符号数转化为有符号数,将有符号数转化为无符号数

      signed'(expression)   unsigned'(expression)

    3: 循环

      1)for 

        verilog中,循环体内的变量需要在循环体外声明,sv里,可在循环体内声明变量,这种变量是local的,在循环体外看不见。若在循环体内外同时声明同一变量,则互不干扰。

      2)do while   sv里增加的循环,verilog里没有。

      3)case

        增加unique,priority(优先级)选项;

    二:function

    1:主要概念

      不消耗时间;不带时序,function里不能包含延时信息,@,wait等时间信息关键字;

      由于task可以带时序,所以规定function不能调用task;

    2:格式

      function [range] function_name; //[range] 指返回值function_name的类型

        parameters

        input declaration

        reg declaration

        --code body --

      endfunction

    3: void function

      不返回值;在verilog里,function一定返回值,且返回的值是function的名字。

    三:task

    1:基本概念

      消耗时间,含有输入输出双向端口;可含delay,timing,event;

    2:格式

      task task_name

        parameter

        input dedclarations

        output declarations

        reg declaration

        --code body--

      endtask

    3: task与function内部变量是静态变量,在不同地方对同一个变量赋值会产生race,需要注意

    四:sv里task与function增加点

    1:不需要加begin...end

    2:添加return,直接退出函数

    3:  function增加了void function

      function void fill_packet(input logic[63:0] data_in,output packet_t data_out);

        data_out.data = data_in

      endfunction

      没有输出,通过输出变量data_out输出

    4:在verilog里function只有input,没有output,返回值就是函数值;但在sv里,function增加了output,inout变量

    5:参数方向类型缺省时,类型默认为logic,方向默认为input

    6:引用ref

      所谓引用传递,就如c++里面的指针,也就是变量的入口地址;只有automatic型task,function可以使用ref;

      传值方式来传递参数,那么参数会被整体复制到其他地址,这样消耗一定的内存和操作时间;而用ref传值方式来传递参数,只是获得参数的入口地址,操作速度快,减少内存使用

      可在ref数组前加const,使数组不变。

     五:automatic

      一般硬件里的所有对象都是静态的;在verilog-1995,如果在多个地方调用同一个任务,本地变量是共同而且静态分配的,为此,不同的进程相互访问同一个值。在verilog-2001中,可以通过使用automatic关键字,将任务,函数和模块声明为自动存储模式,这样,仿真器就能够对所有形式的参数和内部变量使用堆栈的形式来存储。

  • 相关阅读:
    Spark Streaming源码解读之Receiver生成全生命周期彻底研究和思考
    linux 修改时间时区,修改语言
    远程链接mysql error 2003
    Android NDK r10c 编译boost 1.55 (使用Cygwin)
    linux上cocos2dx Android打包环境
    linux上cocos2dx 环境配置
    linux, windows编译安装 boost库 (boost 1.56)
    编译安装 gcc 4.8.3
    vim配置添加python
    mvn设置
  • 原文地址:https://www.cnblogs.com/xh13dream/p/9049879.html
Copyright © 2011-2022 走看看