1

我为多路复用器编写了一个“模板”。

我的目标是当 s="01" 或 s="11" 时 y=1。

现在,我应该如何链接 d0 和它所持有的值?

(在本例中,d0 应为 0,d1=1,d2=0,d3=1。)

library IEEE;
use IEEE.std_logic_1164.all;

entity mux4v1 is 

 port(
        d0  : in    std_logic;  -- 0
        d1  : in    std_logic;  -- 1
        d2  : in    std_logic;  -- 0
        d3  : in    std_logic;  -- 1
        s   : in    std_logic_vector(1 downto 0); -- my inputs controller via switches
        y   : out   std_logic
    );

end mux4v1;


architecture struct of mux4v1 is

begin
  with s select
  y <= d0 when "00",
       d1 when "01",
       d2 when "10",
       d3 when "11";
end struct;
4

1 回答 1

2

我认为您要问的是您如何输入'0''1'输入...

答案是:从外部,在使用多路复用器的设计中。

对于仿真,您创建一个更高级别的设计并在其中实例化多路复用器。更高级别的设计可能类似于微处理器,但在这里我们只是想测试多路复用器,因此我们可以为它编写一个简单的测试平台。

测试平台通常没有输入或输出,因此它构成了设计的顶层,您可以在模拟器中运行它。

entity mux_tb is
end mux_tb;

在内部,它包含 DUT(被测设备)和您正在测试它的任何其他组件、将它们互连的信号、生成时钟和其他信号的过程,以及将设备输出与预期值进行比较并报告任何错误的过程.

architecture simple of mux_tb is

entity mux4v1 is 

signal test_d0 : std_logic := 0;  
signal test_d1 : std_logic := 1;
signal test_d2 : std_logic := 0;
signal test_d3 : std_logic := 0;

signal sel   :   std_logic_vector(1 downto 0); 
signal output :  std_logic;

begin

DUT : entity work.mux4v1
 port map(
        d0  => test_d0,
        d1  => test_d1,
        d2  => test_d2,
        d3  => test_d3
        s   => sel,
        y   => output
    );

Stimulus : process
begin
   sel <= "00";
   wait for 1 us;
   sel <= "01";
   -- and so on
end process;

end simple;

对于综合,如果您只是想在您的 FPGA 中实现 MUX,您可以按原样综合它。然后还有一个额外的步骤,您可以对其进行布局和布线以生成位文件以对 FPGA 进行编程。

该步骤是将设备引脚分配给每个输入和输出信号。

根据 FPGA 的连接方式,这些引脚分配在您编写的约束文件中进行。例如,如果有一个您想要连接到 D0 的开关和一个您想要连接到 Y 的 LED,请从您的电路板原理图中找出该开关连接到哪个 FPGA 引脚,然后编写一个将该引脚连接到输入 D0 的约束。该约束文件(和一些示例)的语法应该在您的 FPGA 工具文档中。

于 2014-10-24T09:53:35.330 回答