1

離散時間 FIR フィルタのテストベンチを Quartus II に実装しようとしています。テストベンチは、.txt ファイルから入力コードを読み取り、出力を別の .txt ファイルに書き込みます。

RTL シミュレーション ボタンをクリックすると、ModelSim に次のエラーが表示されます。

エラー: filter2/simulation/modelsim/filter.vht(83): 不正な連続ステートメントです。
エラー: filter2/simulation/modelsim/filter.vht(111): サブプログラム "read" の実行可能なエントリがありません。
エラー: filter2/simulation/modelsim/filter.vht(147): VHDL コンパイラが終了しています

これらのエラーをどのように解決しますか? 私が書いたコードは次のとおりです。

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.std_logic_textio.all;
USE STD.TEXTIO.ALL;
USE ieee.std_logic_arith.all;                              

ENTITY filter_vhd_tst IS
END filter_vhd_tst;
ARCHITECTURE filter_arch OF filter_vhd_tst IS
-- constants                                                 
-- signals                                                   
SIGNAL clk : STD_LOGIC := '0';
SIGNAL clk_enable : STD_LOGIC;
SIGNAL filter_in : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL filter_out : STD_LOGIC_VECTOR(32 DOWNTO 0);
SIGNAL reset : STD_LOGIC;
    signal flag : std_LOGIC := '0';    
COMPONENT filter
    PORT (
    clk : IN STD_LOGIC;
    clk_enable : IN STD_LOGIC;
    filter_in : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
    filter_out : OUT STD_LOGIC_VECTOR(32 DOWNTO 0);
    reset : IN STD_LOGIC
    );
END COMPONENT;
BEGIN
    i1 : filter
    PORT MAP (
-- list connections between master ports and signals
    clk => clk,
    clk_enable => clk_enable,
    filter_in => filter_in,
    filter_out => filter_out,
    reset => reset
    );
init : PROCESS                                               
-- variable declarations  
    --constant clk_period : time := 20ns;

BEGIN                                                        
        -- code that executes only once 
            clk_enable <= '1';
            reset <= '0';
            clk <= '0';

WAIT;                                                       
END PROCESS init;                                           
always : PROCESS                                              
-- optional sensitivity list                                  
-- (        )                                                 
-- variable declarations                                      
BEGIN                                                         
        -- code executes for every event on sensitivity list
    clk_process:PROCESS
    BEGIN
            clk <= '0';
            wait for 10 ns; --clk_period/2;
            clk <= '1';
            wait for 10 ns; --clk_period/2;         
    end process;

    --Stimulus
    stim:process
            begin
                wait for 100 ns;
                wait for 2000 ns;--clk_period*100;
                wait for 50 us;

                --inserting stimulus
                wait;
            end process;

    process(clk)
        file in_file : text open READ_MODE is "wave.txt";
        variable in_line : LINE;
        variable filed : integer range 0 to 65535;
        variable divider : integer range 0 to 499 := 499;
    begin
        if(clk'event and clk = '1')then
            if(divider = 0)then
                if NOT ENDFILE(in_file)then
                        READLINE(in_file, in_line);
                        READ(in_file, filed);
                        filter_in <= conv_std_logic_vector(filed,16);
                        else
                            flag <= '1';
                        end if;
                    divider := 499;
                else
                    divider := divider - 1;
                end if;
        end if;
    end process;

    process(clk)
        file RESULT_FILE: text open WRITE_MODE is "out.txt";
        variable outline : LINE;
        variable temp : std_LOGIC_VECTOR(32 downto 0);
        variable divider : integer range 0 to 499 := 499;

    begin
    if(clk'event and clk = '0')then
        if(divider = 0)then
            if(flag = '0')then
                temp := filter_out;
                write(outline, temp);
                writeLine(RESULT_FILE, outline);
            end if;
            divider := 499;
            else
            divider := divider - 1;
        end if;
    end if;
end process;    


--WAIT;                                                        
END PROCESS always;                                          
END filter_arch;
4

1 に答える 1

1

最初のエラーである 83 行目は、プロセス内のプロセスが原因です。

always : PROCESS
BEGIN
    clk_process : PROCESS

また、プロセス宣言はシーケンシャル ステートメントではないため、次のエラー メッセージが表示されます。

エラー: filter2/simulation/modelsim/filter.vht(83): 不正な連続ステートメントです。

2番目のエラーは、最初の引数として取るためですが、与えられreadます:linefile

READ(in_file, filed);

したがって、次のように変更します。

READ(in_line, filed);
于 2015-04-23T14:30:36.383 に答える