マイクロコントローラ付きのパラレルバス上でFPGAを使用するさまざまなデザインがあります。私がテストベンチを持っている各デザインでは、MCUタイミングをエミュレートするプロシージャを使用して、バス上のいくつかの読み書き操作をシミュレートしました。テストベンチの刺激を求めるパッケージプロシージャ
これらの手順をパッケージに入れて再利用しやすいようにすることをお勧めします。現在、プロシージャは定義されており、テストベンチエンティティの範囲内の信号に作用します。私はむしろこれのようなものを持っています。
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の内部で何が起こっているのかを制御する手順が必要になることは分かっています。これは可能ですか?
もしそうでなければ、テスト刺激のための再利用可能な手順はどうでしょうか?
VHDLは大文字と小文字を区別しないので、 'data'と' Data'は名前の衝突を起こします。 (また、名前を区別するために大文字と小文字の区別に頼っているのは混乱のために尋ねるだけなので!) –
そうです!私は名前を変更します。 –
うわー、私はここで質問をしたのは初めてです。両方の方からの素早く良い返信に感心しました!それは厳しいコールでしたが、マシューは、私が最終結果のために欲しかったものに最も近づいたので、正解のポイントを得ました。私はあなたにも両方のアップホントを与えました。 – Lasse