だから私は、信号がアサートされていることに問題があるようです。だから基本的に私は2つのfpgaの間でi2cインターフェイスを実装しています。私のマスターは50バイト以上を送るでしょう。私のスレーブ側では、配列に入ってくるバイトを格納したい。だから、バイト全体が読み込まれて利用可能になったときにチェックして、それを配列に入れます。問題は、配列全体を塗りつぶした後、プロセスをアクティブにするシグナルをアサーションしたいということです。私の問題は、シグナルがアサートされ、プロセスがアクティブになってアイドルループに陥っていることです。これはプロセスを入力してフラグ信号のアサーション条件をチェックするという仮定の下にあったためです。高いと思われる。だから、私のシグナルがプロセスを活性化していないという問題、あるいはフラグがすでに0に戻っているという条件付きフラグアサーションをチェックする時間が私の問題なのですか? 私はいくつかのコードを添付しました:シグナルがプロセスを活性化していませんか?
signal i : integer range 0 to 49 := 0;
type field_array is array(0 to 49) of std_logic_vector(7 downto 0);
begin
process(clk,rst)
begin
if(rst = '1') then
i <= 0;
elsif (rising_edge(clk)) then
if(data_available = '1') then
array_of_data(i) <= Master_Data;
i <= i + 1;
end if;
if(i = 49) then
i <= 0; -- reset index back to zero
end if;
end if;
end process;
flag <= '1' when i = 49 else '0';
process(state,flag)
begin
next_state <= state;
case (state) is
when idle =>
if(flag = '1') then
next_state <= Send_data;
end if;
when Send_data =>...
あなたのコードスニペットからそれが明確でない 'next_state'(フラグが変更されたときにセットされる)はあなたのステートマシンの次の状態をトリガーするために' state'シグナルを変更するはずです。 – mfro