我在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;
我有任何明显的错误吗?
答案 0 :(得分:1)
32:8从32位中选择8位。有两种显而易见的方法(以及其他不太明显的方法):
我假设你想要(2),因为你有一个2位选择器。因此,您的8个输出位中的每一个实际上都是4:1多路复用器。例如,输出的第0位选择输入的第0位,第8位,第16位或第24位,具体取决于2位选择器的状态。
在VHDL中有四种直接的方法:顺序案例语句,选定的信号分配,直接逻辑或数组元素选择。 Maia site上有所有4种风格的例子。它们只有1位输出,因此您的任务是将其转换为8位输出。如果您遇到问题,请查看并告诉我们。