0

VHDL で CPLD 用の単純なパルス ジェネレータを構築しようとしています。モジュールに接続されたバスの入力状態に応じて特定のタスクを実行する一連の単純なifステートメントがあります。

entity pulse_gen is
Port ( CLK : in  STD_LOGIC;
       pulse_sel_in : in  STD_LOGIC_VECTOR (2 downto 0);
       pulse_r : in  STD_LOGIC;
       pulse_s : inout  STD_LOGIC);
end pulse_gen; 

architecture Behavioral of pulse_gen is

signal pulse_sel: std_logic_vector (2 downto 0);
signal pulse_count: integer;
signal pulse_length: integer range 0 to 100;
signal pulse_a: std_logic;

begin

pulse_sel <= pulse_sel_in;

pulse: process(CLK) is
begin
    if(pulse_sel > "000" and pulse_a = '0') then
        pulse_s <= '1';
        pulse_a <= '1';
    end if;

    if(pulse_a = '1' and pulse_count < pulse_length) then
        pulse_count <= pulse_count + 1;
    end if;

    if(pulse_a = '1' and pulse_count = pulse_length) then
        pulse_s <= '0';
        pulse_a <= '0';
        pulse_count <= 0;
    end if;
end process;

set_max: process(CLK) is
begin
if (CLK'event) then
    case pulse_sel is
        when "001" => pulse_length <= 1;
        when "010" => pulse_length <= 10;
        when "011" => pulse_length <= 100;
        when others => null;
    end case;
end if;
end process;

end Behavioral;

このモジュールを iSim で実行する場合、_pulse_s_ バスを 000 以外に強制すると、パルス プロセスの最初の if ステートメントがトリガーされます。ただし、シミュレーションでは、_pulse_a_ 信号がロジック High に設定されることはありません。今、私はこのモジュールをさまざまな方法で書くのに何時間も費やしてきましたが、なぜこれが起こらないのか全く分かりません. 私は VHDL に比較的慣れていないので、完全に見落としている何らかの構文エラーまたは手続きエラーがあるのではないかと考えています。何か案は?

4

2 に答える 2

2

信号の初期値は「U」です。「1」または「0」に等しい条件はいずれも有効ではないため、新しい値は割り当てられません。

于 2013-10-14T10:01:04.120 に答える