具体的にいきます。
シミュレーションには Ubuntu 14.04LTS、GHDL コンパイラ、および GTKWave を使用しています。
シンプルな 2 マルチプレクサーをシミュレートするための 2 つのファイルがあります: mux2.vhd と mux2_testbench.vhd
これは、mux2.vhd のコードです。
-- Libraries
library ieee;
use ieee.std_logic_1164.all;
-- Entity declaration
entity mux2 is
port(
e0, e1 : in std_logic;
c : in std_logic;
output : out std_logic
);
end mux2;
-- Architecture declaration
architecture mux2_arch of mux2 is
begin
process (e0, e1, c)
begin
if c = '0' then
output <= e0;
else
output <= e1;
end if;
end process;
end mux2_arch;
テストベンチのコード
--Libraries
library ieee;
use ieee.std_logic_1164.all;
--Empty entity for simulation
entity mux2_testbench is
end mux2_testbench;
architecture testbench_arch of mux2_testbench is
component test is
port(
c : in std_logic;
e0, e1 : in std_logic;
output : out std_logic
);
end component;
signal c: std_logic;
constant clk: time:=50 ns;
signal e0: std_logic;
signal e1: std_logic;
signal output: std_logic;
begin
lab: test
port map(
c => c,
e0 => e0,
e1 => e1,
output => output
);
process
begin
--Case 1: Control signal is low
c <= '0';
e0 <= '0';
e1 <= '0';
wait for 100 ns;
e0 <= '0';
e0 <= '1';
wait for 100 ns;
e0 <= '1';
e0 <= '0';
wait for 100 ns;
e0 <= '1';
e0 <= '1';
wait for 100 ns;
--Case 2: Control signal is high
c <= '1';
e0 <= '0';
e1 <= '0';
wait for 100 ns;
e0 <= '0';
e0 <= '1';
wait for 100 ns;
e0 <= '1';
e0 <= '0';
wait for 100 ns;
e0 <= '1';
e0 <= '1';
end process;
end testbench_arch;
私がやっていること:
エラーなしで端末経由でコンパイルしています: ghdl -a mux2.vhdおよびghdl -a mux2_testbench.vhd
次に、テストベンチの実行可能ファイルを作成します: ghdl -e mux2_testbench
最後に、gtkwave を使用するために必要な vcd ファイルを作成します 。ghdl -r mux2_testbench --vcd=test.vcd &
シミュレーション: gtkwave test.vcd
このコードには 2 つの問題があります。 1. 信号 e0 と e1 に異なる値を書き込んでいますが、e1 はシミュレーションで何も示しません。常に「0」です。
- 出力信号はシミュレーションで値「U」を示します。これが何を意味するのかさえわからず、Googleで明確なものを見つけることができませんでした。
仲間の皆さん、よろしくお願いします。