VHDL для мультиплексора 2to1 - PullRequest
2 голосов
/ 10 мая 2019

Вот что я пытаюсь написать в коде VHDL:

enter image description here

Я все еще учусь, поэтому не знаю, правильно ли написанное. Может ли кто-нибудь помочь мне с этим мультиплексором?

Мультиплексор

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
PACKAGE mux2to1_package IS
   COMPONENT mux2to1
        PORT (  s, w0, w1: IN   STD_LOGIC ;
            f       : OUT   STD_LOGIC ) ;
   END COMPONENT ;
END mux2to1_package ;

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;

ENTITY mux2to1 IS
PORT (  s, w0, w1   : IN    STD_LOGIC ;
        f   : OUT   STD_LOGIC ) ;
END mux4to1 ;

ARCHITECTURE Behavior OF mux2to1 IS 
BEGIN
   IF s='0' THEN
      f <= w0;
   ELSE
      f <= w1;
   END IF;
END Behavior ;

Код

ENTITY mux2 IS
PORT (  s, w    : IN    STD_LOGIC ;
    f   : OUT   STD_LOGIC ) ;
END mux2 ;

ARCHITECTURE structure OF mux2 IS   
   SIGNAL m : STD_LOGIC;
BEGIN
   mapping: mux2 PORT MAP ( w(0), w(1), s(0), m(0) ) ;
END Structure ;

Я чувствую, что картографическая часть вообще не верна.

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Мультиплексор:

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
PACKAGE mux2to1_package IS
   COMPONENT mux2to1
        PORT (  s, w0, w1: IN   STD_LOGIC ;
            f       : OUT   STD_LOGIC ) ;
   END COMPONENT ;
END mux2to1_package ;

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;

ENTITY mux2to1 IS
PORT (  s, w0, w1   : IN    STD_LOGIC ;
        f   : OUT   STD_LOGIC ) ;
END mux2to1;

ARCHITECTURE Behavior OF mux2to1 IS 
BEGIN
  PROCESS(s,w0,w1)
  BEGIN

     IF s='0' THEN
        f <= w0;
     ELSE
        f <= w1;
     END IF;

  END PROCESS;
END Behavior ;

Код тестового стенда:

library ieee;
use ieee.std_logic_1164.all;
use work.mux2to1_package.all;

ENTITY tb IS
END tb;

ARCHITECTURE arch OF tb IS
    SIGNAL s : std_logic := '0';
    SIGNAL w0, w1 : std_logic := '0';
    SIGNAL f : std_logic := '0';
BEGIN
    UUT : ENTITY work.mux2to1 port map(s => s, w0 => w0, w1 => w1, f => f);

    PROCESS
    BEGIN
        s <= 'X';
        w0 <= 'X';
        w1 <= 'X';
        wait for 1 ns;

        s <= '0';
        w0 <= '1';
        w1 <= '0';
        wait for 1 ns;

        s <= '1';
        w0 <= '0';
        w1 <= '1';
        wait for 1 ns;

        s <= '0';
        w0 <= '0';
        w1 <= '1';
        wait for 1 ns;

        assert false report "End of test";
        wait;
    END PROCESS;
END arch;

enter image description here

Как упомянуто user1155120, вы не были осторожныво время ассоциации сигналов в карте портов для mapping.В сущности mux2to1 вы перечислили s, w0, w1 и f в указанном порядке.В карте портов вы использовали позиционную ассоциацию, но вы не сделали ассоциацию должным образом.Способ user1155120 сделал это правильно, если вы хотите использовать позиционную связь.Если вы хотите сделать это, используя сопоставление имен, как я делал в коде выше, нет необходимости перечислять сигналы в том же порядке, в котором они перечислены в сущности (перечислены в том же порядке в том смысле, что вы смотрите, чтоделается по какому сигналу).При использовании ассоциации имен вы можете сделать следующее:

UUT : ENTITY work.mux2to1 port map( f => f, w0 => w0, w1 => w1, s => s,);

Вы можете перепутать их порядок.

Также в разделе Код во время сопоставления портов онкажется, вы пытаетесь использовать векторы, но они нигде не установлены, поэтому вы не можете их использовать.

Как упоминал Юрген, вы используете операторы if без процесса , который был исправлен в приведенном выше коде.

Краткое примечание об использовании пакета: при написании testbench, как я делал, или при использовании этого пакета в любом другом VHDL-дизайне, необходима следующая строка:

use work.mux2to1_package.all;

Также похвально, что выиспользуя пакет структуру, но на этом уровне я не думаю, что это необходимо.Вы могли бы просто объявить ENTITY .

1 голос
/ 10 мая 2019

Вы также можете использовать «когда», которое может быть вне процесса и не нуждается в списке чувствительности:

ARCHITECTURE Behavior OF mux2to1 IS 
BEGIN
   f <= w0 WHEN s='0' ELSE w1;
END Behavior;
...