2

このコードはいくつかのツールで動作します

  • アルデック リビエラ プロ

しかし、他の人ではありません

  • GHDL (エラーの選択はローカルで静的な式でなければなりません)
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY INSTRUCTION_PROCESSOR IS

    PORT (
        clk : IN std_logic;
        instruction : IN INTEGER
    );
END ENTITY INSTRUCTION_PROCESSOR;
ARCHITECTURE behavioural OF INSTRUCTION_PROCESSOR IS

    TYPE INSTRUCTION_t IS RECORD
        instr : INTEGER;
        cycles : INTEGER;
    END RECORD;

    CONSTANT CMD_A : INSTRUCTION_t := (instr => 0, cycles => 5);
    CONSTANT CMD_B : INSTRUCTION_t := (instr => 1, cycles => 3);

BEGIN
    PROCESSOR : PROCESS (clk)
        VARIABLE loop_cycles : INTEGER := 0;
    BEGIN
        IF clk'event AND clk = '1' THEN
            CASE instruction IS
                WHEN CMD_A.instr =>
                    loop_cycles := CMD_A.cycles;

                WHEN CMD_B.instr =>
                    loop_cycles := CMD_B.cycles;

                WHEN OTHERS =>
                    NULL;
            END CASE;
        END IF;
    END PROCESS;
END ARCHITECTURE;

https://www.edaplayground.com/x/jYD

CMD_A と CMD_B は定数レコードとして宣言されているため、これが機能すると予想されます...

知恵の言葉はありますか、それとも単に悪い考えですか?

4

2 に答える 2