32:8多路复用器如何工作?

时间:2015-08-06 08:49:12

标签: vhdl

我在vhdl中编写32:8多路复用器。 该任务基于一个考试问题,这个问题显然可以通过多种方式解释。原始任务是:编程32:8多路复用器,使用"选择何时"和"如果那么其他"。我确实得到了32:8多路复用器的工作方式,所以我确实知道从哪里开始,但多亏你们,我想我会把它编程为4:1多路复用器,通过4组8位。

这就是我得到的:

library ieee;
use ieee.std_logic_1164.all; 
entity mux_using_with is
port (
         input   :in  std_logic_vector (31 downto 0);
         sel     :in  std_logic_vector (1 downto 0);
         mux_out :out std_logic_vector (7 downto 0));
end entity;

architecture behavior of mux_using_with is

begin
with (sel) select
mux_out <= input(7 downto 0) when '00',
           input(15 downto 8) when '01',
           input(23 downto 16) when '10',
           input(31 downto 24) when others;
end architecture;

对于if版本:

library ieee;
use ieee.std_logic_1164.all; 
entity mux_using_if is
port (
         input   :in  std_logic_vector (31 downto 0);
         sel     :in  std_logic_vector (1 downto 0);
         mux_out :out std_logic_vector (7 downto 0));
end entity;

architecture behavior of mux_using_if is
begin
MUX:
   process (sel, input) begin
     if (sel = '00') then
         mux_out <= input(7 downto 0);
     elsif (sel = '00') then
         mux_out <= input(15 downto 8);
     elsif (sel = '00') then
         mux_out <= input(23 downto 16);
     else
         mux_out <= input(31 downto 24);;
end if;
end process;
end architecture;

我有任何明显的错误吗?

1 个答案:

答案 0 :(得分:1)

32:8从32位中选择8位。有两种显而易见的方法(以及其他不太明显的方法):

  1. 从32位输入中的任意点开始,选择任意连续的8位组,并可能进行环绕。这实际上是一个“桶式移位器”。有32个'开始'位置,所以你需要一个5位选择器;或
  2. 选择4组[7:0],[15:8],[23:16]或[31:24]中的一组。在这种情况下,您需要一个2位选择器来选择其中一个组。
  3. 我假设你想要(2),因为你有一个2位选择器。因此,您的8个输出位中的每一个实际上都是4:1多路复用器。例如,输出的第0位选择输入的第0位,第8位,第16位或第24位,具体取决于2位选择器的状态。

    在VHDL中有四种直接的方法:顺序案例语句,选定的信号分配,直接逻辑或数组元素选择。 Maia site上有所有4种风格的例子。它们只有1位输出,因此您的任务是将其转换为8位输出。如果您遇到问题,请查看并告诉我们。