Vhdl ModelSim上的非法顺序语句错误

Vhdl ModelSim上的非法顺序语句错误,vhdl,modelsim,quartus,Vhdl,Modelsim,Quartus,我正在尝试在Quartus II上为离散时间FIR滤波器实现一个测试台。测试台将从一个.txt文件读取输入代码,并将输出写入另一个.txt文件 单击RTL simulation按钮时,ModelSim上会出现以下错误: 错误:filter2/simulation/modelsim/filter.vht(83):非法的顺序语句。 错误:filter2/simulation/modelsim/filter.vht(111):子程序“读取”没有可行的条目。 错误:filter2/simulation/

我正在尝试在Quartus II上为离散时间FIR滤波器实现一个测试台。测试台将从一个.txt文件读取输入代码,并将输出写入另一个.txt文件

单击RTL simulation按钮时,ModelSim上会出现以下错误:

错误:filter2/simulation/modelsim/filter.vht(83):非法的顺序语句。
错误:filter2/simulation/modelsim/filter.vht(111):子程序“读取”没有可行的条目。
错误: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;
ieee库;
使用ieee.std_logic_1164.ALL;
使用ieee.std_logic_unsigned.all;
使用ieee.std_logic_textio.all;
使用STD.TEXTIO.ALL;
使用ieee.std_logic_arith.all;
实体筛选器\u vhd\u tst为
结束过滤器\u vhd\u tst;
过滤器的体系结构过滤器是
--常数
--信号
信号时钟:标准逻辑:='0';
信号时钟启用:标准时钟逻辑;
信号滤波器输入:标准逻辑向量(15至0);
信号滤波器输出:标准逻辑向量(32至0);
信号复位:标准逻辑;
信号标志:标准逻辑:='0';
组件过滤器
港口(
clk:标准逻辑中;
时钟启用:在标准逻辑中;
过滤器输入:标准逻辑输入向量(15到0);
过滤输出:输出标准逻辑矢量(32到0);
复位:在标准逻辑中
);
端部元件;
开始
i1:过滤器
港口地图(
--列出主端口和信号之间的连接
时钟=>clk,
clk_启用=>clk_启用,
filter_in=>filter_in,
filter\u out=>filter\u out,
重置=>重置
);
初始化:进程
--变量声明
--恒定时钟周期:时间=20ns;
开始
--只执行一次的代码

clk_enable第一个错误,第83行,是由于进程中的进程引起的:

always : PROCESS
BEGIN
    clk_process : PROCESS
由于进程声明不是顺序语句,因此会收到错误消息:

错误:filter2/simulation/modelsim/filter.vht(83):非法的顺序语句

第二个错误是因为
read
作为第一个参数,但给出了
文件

READ(in_file, filed);
因此,请改为:

READ(in_line, filed);