zoukankan      html  css  js  c++  java
  • Verilog学习笔记基本语法篇(八)········ 结构说明语句

    Verilog中的任何过程都可以属于以下四种结构的说明语句;

    1) initial;  2) always;  3) task;   4) function;

    1) initial说明语句;

    一个程序中的 initial 和 always 的次数是不受限制的,他们都是在仿真的一开始同时开始运行的。initial 只执行一次,而 always语句则是不断地重复活动,直到仿真活动结束、但是always 后面的过程快是否运行,则要看他的触发条件是否满足,满足则运行一次,再满足再运行,直至仿真结束。

     格式:

       initial 

         begin

          语句1;

          语句2;

             ...

          语句n;

       end

    一个模块中可以有多个initial块,他们都是并行运行的。 initial 块常用于测试文件和虚拟模块的编写,用来产生仿真测试信号和设置信号记录等仿真环境。

    2)always说明语句

    其声明格式如下:

    always  <时序控制>  <语句>

    如果always没有时序控制,则会产生仿真器的死锁。 如:always  areg=~areg;这将产生0延迟的无限循环跳变过程,这时发生仿真死锁。

    always 的时序控制可以是边沿触发也可以是电平触发,可以单个信号亦可以十多个信号,中间用关键词or链接。

     A)  always @(posedge clock or posedge reset)

           begin

            ....

           end

    B)  always @(posedge clock or posedge reset)

           begin

            ....

           end

    上述中,A是由两个边沿触发的always只要其中一个沿出现,就立即执行一次过程块。B是有a b c 三个信号电平触发的,只要a b c 中任何一个发生变化,从高到低或从低到高都会执行过程块。

    边沿触发的always 块常常描述时序行为,如有限状态机,通常对应于寄存器组和门级组合逻辑的结构。而电平触发的always块常常用来描述组合逻辑的行为。

    在always语句中,由关键词or 链接的多个事件名或者信号名组成的列表称为敏感列表。用关键词or或者','表示这种关系。如果输入的逻辑变量较多,那么编写敏感列表会很繁琐而且容易出错。针对这种情况,Verilog中可以用@* 和 @(*),他们表示对后面语句块中所有的输入变量的变化是敏感的。

    电平敏感的时序控制:

    Verilog用关键字wait 来表示等待电平敏感的条件为真:

    如: always  

               wait  (count_enabal)  #20 count = count+1;

    这个例子中,仿真器连续见识count_enable的值,其值为0,则不执行后面语句。如果其值为1,则20个单位后执行这个语句,如果count_enable始终为1,那么count每20个单位时间+1。

     在always中,被赋值的只能是寄存器类型的变量,如reg,integer, real, time, realtime.等

  • 相关阅读:
    centos7安装node.js
    docker容器互联,实现目录、服务共享
    解决docker容器中Centos7系统的中文乱码
    修改centos7容器的时间和宿主机时间一致
    linux安装中文字体
    制作OpenOffice的Docker镜像并添加中文字体解决乱码问题
    centos容器yum安装JDK环境
    函数装饰器
    nc(NetCat)命令
    Linux源码包安装程序
  • 原文地址:https://www.cnblogs.com/SYoong/p/5865049.html
Copyright © 2011-2022 走看看