您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制Verilog HDL语言基础教程之组合逻辑电路的实现 正文
Verilog HDL语言基础教程之组合逻辑电路的实现

Verilog HDL语言基础教程之组合逻辑电路的实现

点击数:7442 次   录入时间:03-04 11:57:07   整理:http://www.55dianzi.com   电脑-单片机-自动控制

    数字逻辑电路分为两种,分别是组合逻辑与时序逻辑。

    (1)组合逻辑:输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关的逻辑电路。也就是说,当输入信号中的任何一个发生变化时,输出都有可能会根据其变化而变化,但与电路目前所处的状态没有任何关系。其中组合逻辑是由与、或、非门组成的网络。常用的组合电路有:多路器、数据通路开关、加法器、乘法器等。

    (2)时序逻辑:输出不只是当前输入的逻辑电平的函数,还与电路目前所处的状态有关。

    时序逻辑由多个触发器和多个组合逻辑块组成的网络,常用的有:计数器、复杂的数据流动控制逻辑、运算控制逻辑、指令分析和操作控制逻辑等。同步时序逻辑是设计复杂的数字逻辑系统的核心。时序逻辑借助于状态寄存器记住它目前所处的状态。在不同的状态下,即使所有的输入都相同,其输出也不一定相同。

    assign语句实现组合逻辑

    组合逻辑电路可以用assign语句实现,例如:

   

例1:assign加法器。

wire a,b,c;

assign c = a + b;              //加法器

 

例1实现的是一个简单的加法器,assign语句也可以实现复杂一些的组合逻辑电路,例如:

 

例2:assign选择器。

wire a,b,c;

wire ena;

assign c = ena ? a : b;    //数据选择器

例2实现的是一个数据选择器。如果组合逻辑比较复杂,用assign语句书写就会比较繁琐,可读性较差。例如用assign语句实现一个8选1数据选择器,如下所示:

 

例3:assign 8选1选择器。

wire a0,a1,a2,a3,a4,a5,a6,a7,b;

wire [2:0] addr;

assign b =                      //8选1数据选择器

      (addr == 3’d0) ? a0 :(addr == 3’d1) ? a1 :

      (addr == 3’d2) ? a2 :(addr == 3’d3) ? a3 :

      (addr == 3’d4) ? a4 :(addr == 3’d5) ? a5 :

      (addr == 3’d6) ? a6 : a7;

                  //在该表达式中,当addr不等于d0~d6时,b等于a7

                  //当addr等于d6时,b等于a6;当addr等于d5时,b等于a5,且优先级

                  //高于addr等于d6时的情况,依次类推

 

所以复杂的组合逻辑电路最好用always块实现。

从上面的几个例子可以看出,使用assign语句描述组合逻辑电路时,格式为:

 

assign 输出变量 = 输入变量之间的运算结果;

 

always块实现组合逻辑

组合逻辑电路也可以用assign语句实现,例如:

例4:always加法器。

 

wire a,b,c;

always @ (a or b)      //当a和b有变化时,触发加法器操作

      c = a + b;

[1] [2]  下一页


本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制