[verilog读书笔记]6.数据流建模

来源:互联网 发布:java jsonarray清空 编辑:程序博客网 时间:2024/06/05 19:06

    在电路规模较小的情况下,由于包含的门数比较少,设计者可以逐个地引用逻辑门实例。但随着芯片集成度的迅速提高,数据流建模的重要性越来越显著。我们从数据流的角度,根据数据在寄存器之间的流动和处理过程来对电路进行描述。借助于计算机辅助设计工具,自动将电路的数据流设计直接转换为门级结构,这个过程也称为逻辑综合

一、连续赋值语句

    连续赋值语句是verilog数据流建模的基本语句,用于对线网进行赋值,以关键字assign开始。
    连续赋值语句具有以下特点:
  • 连续赋值语句的左值必须是一个标量或向量线网,或者是标量或向量线网的拼接,而不能是向量或向量寄存器; 
  • 连续赋值语句总是处于激活状态。只要任意一个操作数发生变化,表达式就会被立即重新计算,并且将结果赋给等号左边的线网;
  • 操作数可以是标量或向量的线网或寄存器,也可以是函数调用;
  • 赋值延迟用于控制对线网赋予新值得时间,根据仿真时间单位进行说明。赋值延迟类似于门延迟,对于描述实际电路中的时序是非常有用的。
        

    1.隐式连续赋值

        

    2.隐式线网声明

        如果一个信号名被用在连续赋值语句的左侧,那么verilog编译器认为该信号是一个隐式声明的线网。如果线网被连接到模块的端口上,则verilog编译器认为隐式声明线网的宽度等于模块端口的宽度。

二、延迟

    连续赋值语句中的延迟用于控制任一操作数发生变化到语句左值被赋予新值之间的时间间隔。共有三种方法指定赋值延迟。

    1.普通赋值延迟

        在连续赋值语句中说明延迟值,延迟值位于关键字assign的后面。

        assign #10 out = in1 & in2;
        当in1和in2中的任意一个发生变化,那么在计算表达式in1 & in2的新值并将新值赋给语句左值之前,会产生10个时间单位的延迟。

       如果在此10个时间单位期间,即左值获得新值之前,in1或in2的值会再次发生变化,那么在计算表达式的新值时会取in1或in2的当前值。 
       我们称之为惯性延迟。也就是说,脉冲宽度小于赋值延迟的输入变化不会对输出产生影响。

    2.隐式连续赋值延迟

        wire #10 out = in1 & in2;

    3.线网声明延迟

         verilog允许在声明线网的时候指定一个延迟,这样对该线网的任何赋值都会被推迟指定的时间。

三、表达式、操作符和操作数

    数据流建模使用的是表达式而不是门级原语来描述设计。

    1.表达式

    

    2.操作数

        操作数可以是任何数据类型,但是某些语法结构要求使用特定类型的操作数。
        操作数可以是常数、整数、实数、线网、寄存器、时间、位选(向量线网或向量寄存器的一位)、域选(向量线网或向量寄存器的一组选定的位)以及存储器和函数调用。

四、操作符类型

        
       

    1.算数操作符

        双目操作符

        

        单目操作符

       

    2.逻辑操作符

        

  

 
       

0 0