• task


     

    任务就是一段封装在“task-endtask”之间的程序。任务是通过调用来执行的,而且只有在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,

    那么这个任务是不会执行的。

    定义任务的语法如下:

    任务:

    task <任务名>;
          <端口及数据类型声明语句>
          <语句1>
          <语句2>
          ...
          <语句n>
    endtask

     

    task程序的一些写法

    task send_data(len);//任务名字和长度,任务的声明,类似C语言
           integer len,i;//变量声明区
           begin//必须加begin和end
                    for(i=0;i<len;i=i+1)//循环语句
                    begin
                            @(posedge sclk);//for循环的时候一定要按照节拍来工作。如果注视掉本行,在波形图上i_data和i_addr都为零不动了。因为瞬间溢出成0
                            i_addr<=i[7:0];//可以用阻塞赋值也可以用非阻塞赋值。阻塞赋值就是直接赋过去,非阻塞赋值会延时一拍。
                            i_data<=i[7:0];//截取低8位
                            //用case语句产生一个协议,当地址为0时,i_data=0xff;
                            //当地址为1时,i_data=0x55;
                            //当地址为2时,i_data=0x00;
                            //其他地址全部保留赋值为0xff;
                    end
                    i_addr<=0;
                i_data<=0;
           end  
    endtask

     

     1 //实现len个时钟周期延时
     2 task delay(len);
     3 
     4     integer i,len;
     5     begin
     6             for(i= 0;i<len;i = i+1)
     7             begin
     8                 @( posedge    clk );
     9 
    10             end
    11     end
    12 endtask
    13 //产生一位的时序
    14 task spi_bit();
    15     begin
    16             sclk = 0;
    17             delay(5);
    18             sclk = 1;
    19             delay(5);
    20             sclk    = 0;
    21     end
    22     endtask
    23 //产生len位的时钟
    24     task    spi_data(len);
    25             integer    len,i;
    26             begin
    27                     cs_n    = 0;
    28                     for(i = 0;i < len ; i = i + 1)
    29                     begin
    30                             @( posedge    clk)
    31                             spi_bit();
    32                     end
    33                     
    34                     delay(5);
    35                     cs_n = 1;
    36             
    37     
    38      end
    View Code
    1 //在initial语句中的调用
    2 initial
    3     begin
    4             #0
    5                     sclk    = 0;
    6                     mosi    =    1'bz;   
    7             #200
    8                     spi_data(10);
    9     end
    View Code
  • 相关阅读:
    leetcode 890. 查找和替换模式 Python
    TensorFlow-GPU+cuda8+cudnn6+anaconda安装遇到的版本错误
    leetcode 921. 使括号有效的最少添加(Python)
    BFC概念详解及应用
    做一个网页阅读百分比指示器
    margin-bottom和vertical-align的区别
    MD5算法
    Array.prototype.slice.call()方法详解
    String stringbuffer StringBuilder
    价值观
  • 原文地址:https://www.cnblogs.com/zhongguo135/p/9179322.html
Copyright © 2020-2023  润新知