zoukankan      html  css  js  c++  java
  • 数据流建模

    学习目标

    讲述连续赋值语句(assign)、对于连续赋值语句的限制以及隐式连续赋值语句

    解释赋值延迟、隐式赋值延迟以及用于连续赋值语句的线网声明延迟

    定义表达式、操作符合操作数

    列表解释所有类型的操作符(算术、逻辑、关系、等价、按位、缩减、移位、拼接和条件等)

    使用数据流结构对实际的数字电路建模

    1连续赋值语句

    是Verilog数据流建模的基本语句,用于对线网进行赋值。等价于门级描述,是从更高的抽象角度对电路进行描述

    连续赋值语句必须以关键词assign开始,其语法如下:

    countinus_assign : :=assign [drive_strength ] [delay3 ]
                                     list_of_net_assignments ;
    list_of_net_assignments : := net_assignment {, net_assignment}
    net_assignment : :=net_lvalue = expression

     特点:

    连续赋值语句的左值必须是一个标量或向量线网,或标量或向量线网的拼接,而不能是向量或向量寄存器

    连续赋值语句总是处于激活状态

    操作数可以是标量或向量的线网或寄存器,也可以是函数调用

    赋值延迟用于控制对线网赋予新值的时间,根据仿真时间单位进行说明

    1.1隐式连续赋值

    在线网声明的同时对其进行赋值。由于线网只能被声明一次,因此对线网的隐式声明赋值只能有一次

    //普通的连续赋值
    wire out;
    assign out = in1&in2;
    
    //使用隐式连续赋值实现与上面两条语句同样的功能
    wire out = in1&in2;

    1.2隐式线网声明

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

    线网的宽度等于模块端口的宽度

    1 //连续赋值,out为线网类型
    2 wire i1,i2;
    3 assign out=i1&i2;//注意,out并未声明为线网,但Verilog仿真器会推断出来
    4                           // out是一个隐式声明的线网

    2延迟

    连续赋值语句中的延迟用于控制任一操作数发生变化到语句左值被赋予新值之间的时间间隔

    普通赋值延迟、隐式赋值延迟、线网声明延迟 

    普通赋值延迟

    指定延迟的第一种方法是在连续赋值语句中说明延迟值,延迟值位于关键字assign的后面

    2.2隐式连续赋值延迟

    使用隐式连续赋值语句来说明对线网的赋值以及赋值延迟

    2.3线网声明延迟

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

    //连续赋值语句中的延迟
    assign #10 out = in1 & in2;
    
    //隐式连续赋值延迟
    wire #10 out = in1&in2;
    
    //线网延迟
    wire #10 out;
    assign out = in1&in2;

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

    3.1表达式

    有操作符和操作数构成。目的是根据操作符的意义计算出一个结果值

    3.2操作数

    注意某些语法结构要求使用特定类型的操作数。

    3.3操作符

    对操作数进行运算并产生一个结果

    4操作符类型

    操作类型 操作符 执行的操作 操作数的个数
    算术 * 2
    / 2
    + 2
    - 2
    % 取模 2
    ** 求幂 2
    操作类型 操作符 执行的操作 操作数个数
    逻辑 ! 逻辑求反 1
    && 逻辑与 2
    || 逻辑或 2
    关系 > 大于 2
    < 小于 2
    >= 大于等于 2
    <= 小于等于 2
    等价 == 相等 2
    != 不等 2
    === case相等 2
    !== case不等 2
    操作类型 操作符 执行的操作 操作数的个数
    按位 ~ 按位求反 1
    & 按位与 2
    | 按位或 2
    ^ 按位异或 2
    ^~或~^ 按位同或 2
    缩减 & 缩减与 1
    ~& 缩减与非 1
    | 缩减或 1
    ~| 缩减或非 1
    ^ 缩减异或 1
    ^~或~^ 缩减同或 1
    移位 >> 右移 2
    << 左移 2
    >>> 算术右移 2
    <<< 算术左移 2
    拼接 {  } 拼接 任意个数
    复制 {{  }} 复制 任意个数
    条件 ?: 条件 3

    4.1算术操作符

    双目和单目

    双目

    若操作符任意一位为x,那么运算结果的全部位为x

    单目

    使用整数或实数来表示负数

    4.2逻辑操作符

    逻辑操作符的计算结果是1位的值:0表示假,1表示真,x表示不确实能够;

    如果一个操作数不为0,则等价于逻辑1(真);如果它等于0,则等价于逻辑0(假);如果任意一位为x或z,则它等价于x(不确定),则仿真器

    一般将其作为假来处理。

    逻辑操作符取变量或表达式作为操作数。

    4.3等价操作符

    表达式 说明 可能的逻辑值
    a==b a等于b,若在a或b中有x或z,则结果不定    0,1,x
    a!=b a不等于b,若在a或b中有x或z,则结果不定    0,1,x
    a===b                a等于b,包括x或z      0,1
    a!==b a不等于b,包括x或z 0,1

    逻辑等价操作符和case等价操作符是不同的,对逻辑等价操作符,如果操作数的某位为x或z,则结果为x;而case等价操作符必须包括x和z逐位的精确比较,

    只有在两者完全相等的情况下,结果才会为1,否则为0,。case等价操作符产生的结果肯定不会为x。

    4.4缩减操作符

    缩减操作符只有一个操作数,它对这个向量操作数作逐位进行操作,产生一个一位的结果。

    缩减与和缩减与非,缩减或和缩减或非,缩减异或和缩减同或的计算结果恰好相反。

     4.5操作符的优先级

    操作 操作符号 优先级别
    单目运算 + - ! ~ 最高
    乘、除、取模 * / %  
    加、减 + -  
    移位 << >>  
    关系 < <=   > >=  
    等价 == !=  
    === !==  
    缩减 & ~&  
    ^ ^~  
    | ~|  
    逻辑 &&  
    ||  
    条件 ?: 最低
  • 相关阅读:
    python-pytest学习(四)-fixture简介
    python-pytest学习(三)-setup/teardown
    python-pytest学习(二)-执行用例规则
    Vue 之五 生命周期钩子函数 自定义指令 过滤器
    Vue 之四 Swiper
    Vue 之三局部组件与全局组件
    Vue 之三 与后端交互
    有关于mysql面试的小故事
    Vue 基础之二
    kubernetes
  • 原文地址:https://www.cnblogs.com/fxygrzb/p/5946082.html
Copyright © 2011-2022 走看看