组合逻辑建模时应使用阻塞赋值语句

本文介绍了Verilog中组合逻辑的概念及其应用,包括常见的组合逻辑部件如多路器、比较器等,并通过实例展示了如何使用阻塞赋值来正确实现组合逻辑。同时,文章还探讨了组合逻辑与时序逻辑混合使用时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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数字系统设计教程

 

转载于:https://www.cnblogs.com/qidaiymm/p/4887100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值