VHDL: как присвоить значение входу?

Я написал "шаблон" для мультиплексора.

Моя цель состоит в том, что y=1, когда s="01" или s="11".

Теперь, как я должен связать 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;

person RainingChain    schedule 24.10.2014    source источник


Ответы (1)


Я ДУМАЮ, что вы спрашиваете, как вы вводите '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;

Для синтеза, если вы просто хотите реализовать MUX в своей FPGA, вы можете синтезировать его как есть. Затем есть еще один шаг, прежде чем вы сможете разместить и развести его для создания битового файла для программирования FPGA.

Этот шаг заключается в назначении выводов устройства для каждого из входных и выходных сигналов.

Эти назначения контактов сделаны в файле ограничений, который вы пишете, в соответствии с тем, как подключена ваша FPGA. Например, если есть переключатель, который вы хотите подключить к D0, и светодиод, который вы хотите подключить к Y, узнайте из схемы вашей платы, к какому выводу FPGA подключен переключатель, и напишите ограничение, соединяющее этот вывод со входом D0. Синтаксис этого файла ограничений (и некоторые примеры) должен быть в документации по инструментам FPGA.

person user_1818839    schedule 24.10.2014