📜  Verilog Multiplexer

📅  最后修改于: 2021-01-11 15:20:01             🧑  作者: Mango

Verilog多路复用器

多路复用器是一种从多个输入中选择一个输出的设备。也称为数据选择器。我们用术语MUXMPX指一个多路复用器。

在通信系统中使用多路复用器以在一定的时间和带宽内增加通过网络发送的数据量。它使我们可以将多条数据线压缩为一条数据线。

它在许多输入线之一之间切换,并将它们一一合并到输出。它使用控制信号来决定切换哪条输入线。

物理上,多路复用器具有n个输入引脚,一个输出引脚和m个控制引脚。 n = 2 ^ m。由于多路复用器的工作是选择数据输入线之一并将其发送到输出,因此它也被称为数据选择器

构造多路复用器的主要方法有三种。

  • 数字多路复用器由逻辑门组成。
  • 模拟多路复用器是使用晶体管制成的。
  • 机械开关或旋转开关是使用旋转轴制成的。

MUX本身就像一个数字控制的多位置开关,在该开关中,应用于选择输入的二进制代码控制数据输入,该数据输入将切换到输出。

例如,它基于选择信号将数据从N个输入之一传输到输出。一个4位多路复用器将具有4个位中的每个N个输入,其中每个输入可通过使用选择信号传输到输出。

Sel是2位输入,可以有四个值。选择行上的每个值都将允许将其中一个输入发送到输出。

4×1多路复用器可以通过多种方式实现,在这里我们展示两种最常见的方式:

1.使用assign语句

module mux_4to1_assign ( input [3:0] a,                 // 4-bit input called a
                         input [3:0] b,                 // 4-bit input called b
                         input [3:0] c,                 // 4-bit input called c
                         input [3:0] d,                 // 4-bit input called d
                         input [1:0] sel,               // input sel used to select between a,b,c,d
                         output [3:0] out);             // 4-bit output based on input sel

   // When sel[1] is 0, (sel[0]? b:a) is selected and sel[1] is 1, (sel[0] ? d:c) is taken
   // If sel[0] is 0, a is sent to output, else b and if sel[0] is 0, c is sent to output, else d
   assign out = sel[1] ? (sel[0] ? d : c) : (sel[0] ? b : a);

endmodule

名为mux_4x1_assign的模块具有4个4位数据输入,1个2位选择输入和1个4位数据输出。多路复用器将使用assign语句根据选择信号sel选择a,b,c或d。

2.使用案例陈述

当我们使用case语句时,信号输出被声明为reg类型,因为它在程序块中使用。

module mux_4to1_case ( input [3:0] a,                 // 4-bit input called a
                       input [3:0] b,                 // 4-bit input called b
                       input [3:0] c,                 // 4-bit input called c
                       input [3:0] d,                 // 4-bit input called d
                       input [1:0] sel,               // input sel used to select between a,b,c,d
                       output reg [3:0] out);         // 4-bit output based on input sel

   // This always block gets executed whenever a/b/c/d/sel changes value
   // When it happens, output is assigned to either a/b/c/d
   always @ (a or b or c or d or sel) begin
      case (sel)
         2'b00 : out <= a;
         2'b01 : out <= b;
         2'b10 : out <= c;
         2'b11 : out <= d;
      endcase
   end
endmodule

称为mux_4x1_case的模块具有四个4位数据输入,一个2位选择输入和一个4位数据输出。多路复用器将使用case语句根据选择信号sel选择a,b,c或d。

多路复用器的用途

多路复用器包括以下有用的点,例如:

  • 在拥有通信网络的通信系统中,多路复用器通过允许在单个通道上传输音频和视频数据来提高系统效率。
  • 在光纤通信中,多路复用器执行相同的工作,以使用称为密集波分复用的技术将多条光缆组合到一条光缆中。
  • 在卫星通信中,多路复用器使用GSM通信将数据从卫星的计算机系统传输到地面部分。
  • 它也可以用作并行到串行数据转换器。
  • 计算机减少了将内存连接到其他计算机部件所需的铜线数量。

如何加入多路复用器?

如果我们有小的多路复用器,但是我们想增加它们的功能,则可以将它们加入以获得具有更多输入的MUX。多路复用器的级联很容易。确保我们进行连接以提供与目标MUX相同数量的输入和控制线。

让我们使用2:1多路复用器制作4:1 MUX。我们知道一个2:1 MUX有两个输入和一个选择线。因此,连接两个2:1多路复用器将为我们提供四个输入和两条选择线。

我们可以将输出减少到一个,因此我们使用另一个2:1 MUX将两行组合成一条线。

但是,尽管这给了我们所需的一个输出,但它给了我们另外一条选择线。所以现在我们有三个选择行。

现在我们将三条选择线减少为两条选择线。我们可以通过连接两条选择线来做到这一点。那实际上将把两行减少到一条行。下图显示了通过应用逻辑获得的结果。

8:1和16:1多路复用器

与上面的过程类似,我们可以设计一个使用2:1多路复用器的8:1多路复用器,使用4:1 MUX的16:1 MUX或使用8:1多路复用器的16:1 MUX。

我们也可以采取相反的方法,使用多路复用器,输入的数量要多于较小的MUX。这是一个8:1多路复用器,用作2:1多路复用器。

解复用器

解复用器是执行与复用器相反函数的组合逻辑电路。解复用器可替代地称为解复用器

在多路分离器中,我们有n条输出线,一条输入线和m条选择线。输出线数和选择线数之间的关系与我们在多路复用器中看到的相同。也就是说,2 ^ m = n。根据选择线形成的二进制数的值,任何一条输出线都连接到输入线。

此时,其余输出线将变为OFF状态。即,其余行的值为0。

这样,解复用器将串行数据转换为并行数据,并充当串行并行转换器。此外,由于其将一条数据线连接到多条数据线并在它们之间切换,所以多路分解器也被称为数据分配器。下图显示了解复用器的一般符号。

解复用器如何工作?

为了了解解复用器的工作原理,我们将直接设计一个解复用器。 1:2解复用器是所有解复用器中最简单的。我们有一个输入,两个输出和一条选择线(2 ^ m = 2,因此m = 1)。

如我们所见,根据选择线的值,输出之一连接到输入线。当S为0时,第一条输出线连接到输入。当S为1时,第二条输出线连接到输入。

这样,多路分解器将数据从一条数据线分配到多条数据线。

接下来,我们将设计一个1:4解复用器。从上面看到的选择线公式中,1:4多路分配器将有两条选择线。让我们为1:4多路复用器绘制真值表。

真相表

I0 S0 S1 Y0 Y1 Y2 Y3
I 0 0 I 0 0 0
I 0 1 0 I 0 0
I 1 0 0 0 I 0
I 1 1 0 0 0 I

如我们所见,该真值表比4:1多路复用器的真值表短,因为我们没有将输入的两个可能值都取,而是将其取为I。结果方程式是相同的。因此,从真值表中我们可以得出,

Y0 = S0'S1'
y1="S0'S1
" y2="S0S1'
" y3="S0S1

上述方程式的合成电路如下所示。

解复用器的用途

这是解复用器的一些重要用途,例如:

  • 解复用器可以从通信系统中传输端存在的复用器接收串行数据。然后,多路分解器将数据转换为其原始格式。
  • 我们可以使用解复用器将ALU的输出存储在多个存储寄存器中。
  • 解复用器还充当串行到并行转换器。

>