zoukankan      html  css  js  c++  java
  • 组合逻辑建模时应使用阻塞赋值语句

    1、什么是组合逻辑?

      任意时刻的输出仅仅取决于该时刻的输入逻辑。个人认为在verilog中,由与或非门逻辑运算组成的就是组合逻辑。但是组合逻辑什么时候输出就不是组合逻辑含义的范畴了

    2、组合逻辑部件有哪些?

      (如多路器、比较器、加法器、乘法器、双向三态门和总线等)电路结构和性能的深入了解,是设计复杂数字逻辑系统的基础。

    所以应该认真地复习一下它们的结构和逻辑表达式,并用可综合的verilog模块来表示。

      多路器 

      比较器

      加法器

      乘法器

      双向三态门

      总线

    3、单组合逻辑应用阻塞赋值举例

      1、always@(a or b or c or d)

          begin 

            tmp1<=a&b;

            tmp2<=c&d;

            y<=tmp1|tmp2;

          end

        //这里需要说的的是,这是一个组合逻辑电路,但是没有达到我们的期望  

        //因为,这里的tmp1和tmp2是进入always之前的数据,你懂的,并不是我们想要的数据。  

      2、always@(a or b or c or d or tmp1 or tmp2)

          begin 

            tmp1<=a&b;

            tmp2<=c&d;

            y<=tmp1|tmp2;

          end

         //这样虽然实现了功能,但是我们知道他是经过了几重参数传递才实现的。所以效率不高。

      3、always@(a or b or c or d)

          begin 

            tmp1=a&b;

            tmp2 =c&d;

            y =tmp1|tmp2;

          end

        //这样显然是简单正确的。

    4、时序和组合的混合逻辑时,使用非阻塞赋值

      1、always@(posedge clk or negedge rst)

          if(!rst)  q<=1'b0;//这是时序逻辑

          else   q<=a^b;//这里的异或是组合逻辑

      2、always@(a or b)

          y=a^b;//组合逻辑(看到组合逻辑就要想到,我们这么写对其他always块会不会有不正确的影响)

        always@(posedge clk or negedge rst)

          if(!rst)  q<=1'b0';

          else   q<=y;

        //也可以用两个always块,你懂的。。。 

    5、结论

      1、使用always块描述组合逻辑时,应采用阻塞赋值语句。

        2、在同一个always快中描述时序和组合逻辑电路时,用非阻塞赋值。

    摘自:verilog数字系统设计教程

  • 相关阅读:
    Java并发编程笔记——技术点汇总
    Hello Blog
    shell变量
    认识bash这个shell
    使用myeclipse创建带注解的model实体类
    python List,切片的用法
    ignite从0到1的学习过程记录-第一篇:安装和体验
    安卓Service完全解析(中)
    安卓Service完全解析(上)
    JAVA之数组
  • 原文地址:https://www.cnblogs.com/qidaiymm/p/4887100.html
Copyright © 2011-2022 走看看