4-битная передача с использованием синхронного d-триггера (передача 4-битных данных из регистра a в регистр b)

Когда я запускаю этот код, появляются две ошибки: «Тип фактического параметра в карте портов не соответствует типу формального порта». Мне нужна помощь, чтобы понять, как это исправить.

-- code that try in EDA playground to transfer from one register to another 

 -- library 
 library ieee;
 use ieee. std_logic_1164.all;


 -- declaration for d flip-flop
 entity D_FF is
 PORT( D : in std_logic_vector(7 downto 0);
       s :in std_logic; 
       CLOCK: in std_logic;
       Q: out std_logic_vector(7 downto 0));
  end D_FF;

 architecture behavioral of D_FF is
 -- signals declaration
 signal s1,s2,s3,s4,s5,s6,s7,s8: std_logic;
 begin

 --transfer the 4 bit to another register
s1 <= D(0) and (not s);
Q(0) <= s and D(0);
s2 <= D(1) and (not s);
Q(1) <= (Q(0)and s) or s2;
s3 <= D(2) and (not s);
Q(2) <= (Q(1)and s) or s3;
s4 <= D(3) and not s;
Q(3) <= (Q(2)and s)or s4;
s5 <= D(4) and not s;
Q(4) <= (Q(3)and s)or s5;
s6 <= D(5) and not s;
Q(5) <= (Q(4)and s)or s6;
s7 <= D(6) and not s;
Q(6) <= (Q(5)and s)or s7;
s8 <= D(7) and not s;
Q(7) <= (Q(6)and s)or s8;

end behavioral;

 ------------------------------
-- testbench
 ------------------------------
 -- library
library ieee;
use ieee. std_logic_1164.all;


entity testbench is 
-- empty entity
end testbench;
-----------------------------
architecture tb of testbench is -- testbench 
-- architecture  -- REDUNDANT transcription error?
 -- component declaration
 component D_FF is
 PORT( D : in std_logic_vector(7 downto 0);
       s :in std_logic;
       CLOCK: in std_logic;
       Q: out std_logic_vector(7 downto 0));
  end component;

  -- signals that need in testbench -- COMMENT DELIMITER transcription error?
  signal D_s: std_logic_vector(7 downto 0);-- signals for entity i/o
  signal Q_s: std_logic_vector(7 downto 0);-- signals for entity i/o
  signal s_s: std_logic;
  signal CLOCK_s: std_logic;
  -- is the signal that must be run 4 time to transfer the bit 
  signal loop_count: integer;
   begin

  dut:D_FF port map(D_s,Q_s,s_s,CLOCK_s);   
  -- design under test instantiation

 stimProcess: process                                           -- 
 --stimulus generator
  begin
    --the run 4 time this to transfer the 4 bit 
    for loop_counter in 0 to 3 loop
    D_s <= "01100000";
    wait until CLOCK_s = '1' and CLOCK_s'event;
    end loop;

  end process stimProcess;                                  
  -- without sensitivity list
  end tb;

person sofronis    schedule 29.05.2019    source источник
comment
`dut: карта портов D_FF (D_s,Q_s,s_s,CLOCK_s);` имеет позиционную ассоциацию портов сигналов std_logic_vector, std_logic_vector, std_logic, std_logic, в то время как порядок, показанный в объявлении компонента D_FF, является std_logic_vector, std_logic, std_logic, std_logic_vector. Либо используйте формальную ассоциацию, либо исправьте порядок ассоциации для dut.   -  person    schedule 29.05.2019
comment
Возможный дубликат ошибки машины выбора VHDL в карте портов   -  person    schedule 29.05.2019
comment
Предоставьте минимальный воспроизводимый пример, который воспроизводит проблему и включает полные сообщения об ошибках.   -  person    schedule 29.05.2019
comment
EEE Std 1076-2008 6.5.7 Списки ассоциаций, 6.5.7.1 Общий пункт 13 (частично) Тип фактического (после применения функции преобразования или преобразования типа, если он присутствует в фактической части) должен быть таким же, как тип соответствующего формального, ...   -  person    schedule 29.05.2019


Ответы (1)


Вы используете позиционную ассоциацию для карты портов. При этом порядок портов в карте портов должен совпадать с порядком портов в объявлении компонента. Используя позиционную ассоциацию, правильный порядок:

dut:D_FF port map(D_s,s_s,CLOCK_s,Q_s); 

Обратите внимание, что в вашем примере вы подключили сигнал Q_s к s, s_s к CLOCK и CLOCK_s к Q (потому что ваш порядок был другим).

Я всегда предпочитаю именную ассоциацию. Слева у вас есть ваш «формальный» (порт, указанный в объявлении вашего компонента). Справа у вас есть «фактический» (сигнал, который вы подключаете к этому порту). Пробел просто для улучшения читаемости.

dut: D_FF 
  port map (
    D     => D_s,
    s     => s_s,
    CLOCK => CLOCK_s,
    Q     => Q_s
  );

Карты портов с именованными ассоциациями намного проще отлаживать, и порты могут быть сопоставлены в любом порядке.

person Kevin Kruse    schedule 29.05.2019
comment
спасибо, Кевин запущен, теперь выкладываю не то, что я ожидаю. Я ожидаю, что если мой D = 01100000, то вы должны выглядеть так: D = 00000110, вы можете помочь мне в этом, пожалуйста ??. -user6411653 - person sofronis; 30.05.2019
comment
объект D_FF - это ПОРТ ( D : в std_logic_vector (7 до 0); s : в std_logic; CLOCK: в std_logic; Q: вне std_logic_vector (7 до 0)); конец D_FF; поведение архитектуры D_FF -- объявление сигналов --signal s1,s2,s3,s4,s5,s6,s7,s8: std_logic; начинать - person sofronis; 30.05.2019
comment
--перенести 4 бита в другой регистр d_ff: entity work.D_FF port map(D(0),CLOCK,Q(0)); d_ff1: сущность work.D_FF карта портов (D(1),CLOCK,Q(2)); d_ff2: сущность work.D_FF карта портов (D(2),CLOCK,Q(2)); d_ff3: сущность work.D_FF карта портов (D(3),CLOCK,Q(3)); d_ff4: сущность work.D_FF карта портов (D(4),CLOCK,Q(4)); d_ff5: сущность work.D_FF карта портов (D(5),CLOCK,Q(5)); d_ff6: сущность work.D_FF карта портов (D(6),CLOCK,Q(6)); d_ff7: сущность work.D_FF карта порта (D(7),CLOCK,Q(7)); процесс (CLOCK,D,s) начинается, если s = '1', тогда Q‹=D; закончить, если; завершить процесс; конечный поведенческий; - person sofronis; 30.05.2019
comment
это код, который я сейчас пытаюсь поставить, появляются некоторые ошибки. ОШИБКА COMP96 COMP96_0100: Фактический тип параметра в карте портов не соответствует типу формального порта 'D'. design.vhd 20 33 это ошибка для всех D, которые я поместил в карту портов d_ff - person sofronis; 30.05.2019
comment
помогите пожалуйста понять как решить это упражнение - person sofronis; 30.05.2019
comment
@sofronis, если у вас возникла новая проблема, вам следует задать новый вопрос. Очень трудно читать код, размещенный в комментариях, но я уже вижу, что вы не уделяете должного внимания своим картам портов. - person Kevin Kruse; 30.05.2019