VHDL:如何为输入赋值?

VHDL:如何为输入赋值?,vhdl,intel-fpga,quartus,Vhdl,Intel Fpga,Quartus,我为多路复用器编写了一个模板 我的目标是当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_

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

我的目标是当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;

我认为您要问的是如何将“0”和“1”输入到输入中

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

对于模拟,可以创建更高级别的设计并在其中实例化mux。更高层次的设计可能类似于微处理器,但这里我们只想测试mux,所以我们可以为它编写一个简单的测试平台

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

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工具文档中