У меня есть различные конструкции, которые используют ПЛИС на параллельной шине с микроконтроллером. Для каждой конструкции у меня есть testbench, я имитирую несколько операций чтения/записи на шине, используя процедуры, которые эмулируют синхронизацию MCU.Процедура обработки пакетов для стимула testbench
Я хотел бы знать, как можно использовать эти процедуры в пакете для более простого повторного использования. В настоящее время процедуры определены и действуют на сигналы в рамках объекта testbench. Я бы предпочел что-то подобное.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.mcu_sim.all; -- contains MCU component and procedures for bus R/W operations
entity tb is
end tb;
architecture a of tb is
-- DUT
component fpga is
port (
clk, rst: in std_logic;
Data: inout std_logic_vector(7 downto 0);
Addr: in std_logic_vector(15 downto 0);
wr: in std_logic;
rd: in std_logic);
end component;
signal clk, rst: std_logic;
-- Bus signals
signal Data: std_logic_vector(7 downto 0);
signal Addr: std_logic_vector(15 downto 0);
signal rd: std_logic;
signal wr: std_logic;
begin
dut: fpga
port map (
clk => clk,
rst => rst,
Data => Data,
Addr => Addr,
wr => wr,
rd => rd
);
mcu1: mcu
port map (
clk => clk,
rst => rst,
Data => Data,
Addr => Addr,
wr => wr,
rd => rd
);
process
begin
clk <= '0';
wait for 0.5 us;
clk <= '1';
wait for 0.5 us;
end process;
stimulus: process
begin
rst <= '1', '0' after 1 us;
-- A list of nice, easy-to-read procedure calls to control the MCU
-- Defined in package mcu_sim: procedure buswrite(data: in std_logic_vector(7 downto 0); addr: in std_logic_vector(15 downto 0));
buswrite(X"01", X"0000"); -- Command for mcu to take control of bus and do a write operation to the fpga
buswrite(X"02", X"0001"); -- Command for mcu to take control of bus and do a write operation to the fpga
wait;
end process;
end a;
Пакет mcu_sim будет содержать все необходимое для эмуляции операций шины MCU, и я могу легко Тэйлор моего стимул программа, использующая вызовы процедур. Я понимаю, что для этого потребуются процедуры для контроля того, что происходит внутри mcu1. Можно ли сделать это?
Если нет, как бы вы делали многоразовые процедуры для тестовых стимулов?
У этой проблемы: 'data' и' Data' образуют конфликт имен, потому что VHDL не чувствителен к регистру, благодаря своим корням, возвращаясь к тому времени, прежде чем вы могли предположить, что в нижнем регистре было доступно. (А также потому, что полагаться на чувствительность к регистру, чтобы дифференцировать имена, просто ПРОСЬБА для путаницы!) –
Так оно и есть! Я изменю имена. –
Вау, это первый раз, когда я задал здесь вопрос, впечатленный быстрыми и хорошими ответами от вас обоих! Это был непростой призыв, но Мэтью получил очки за правильный ответ, поскольку он был ближе всего к тому, что я хотел для конечного результата. Я также дал вам оба показателя. – Lasse