VHDL FSM не компилируется - PullRequest
0 голосов
/ 22 мая 2018

Я создал следующий fsm для управления пихтовым фильтром, но я получаю две ошибки при компиляции.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE ieee.numeric_std.ALL;

entity fsm is
generic (n: integer:=4);
port( clk: in STD_LOGIC;
        rst: in STD_LOGIC;
        a: out STD_LOGIC_VECTOR(2*n-1 downto 0));
end fsm;

architecture fsm_struct of fsm is
type state_type is (state0, state1, state2);
signal state: state_type;   

signal rstff, rom_enable, ram_read_enable, ram_write_enable: STD_LOGIC;




component filter_rom is
    generic (n: integer);
    port ( clk: in STD_LOGIC;
            rstff: in STD_LOGIC;
            rom_enable : in STD_LOGIC;
            ram_read_enable : in STD_LOGIC;
            ram_write_enable : in STD_LOGIC;
            a: out STD_LOGIC_VECTOR(2*n-1 downto 0));           
end component;


begin   



process(clk,rst)    
    variable delay1:integer:=0;
    variable delay2:integer:=0;
    variable delay3:integer:=0;
begin   
    if rst='1' then
        state<=state0;          
    else if rising_edge(clk) then

        case state is

            when state0 => --initialize & input data
                rom_enable<='1';
                rstff<='1'; 
                if delay1=1 then
                    rstff<='0';
                    state<=state1;
                    delay2:=0;
                else
                    delay1:=delay1+1;
                    state<=state0;
                end if;

            when state1 => --write data to ram
                if delay2=2 then
                    ram_write_enable<='1';
                    state<=state2;
                    delay3:=0;
                else
                    delay2:=delay2+1;
                    state<=state1;
                end if;


            when state2 => --read data from ram
                if delay3=1 then
                    ram_read_enable<='1';
                    state<=state0;
                    delay1:=0;
                else
                    delay3:=delay3+1;
                    state<=state2;
                end if;

        end case;
    end if;

end process;

filter0: filter_memory generic map(n=>n) port map(clk,rstff,rom_enable,ram_read_enable,ram_write_enable,a);

end fsm_struct;

Я получаю следующие ошибки: Строка 83: процесс синтаксической ошибки рядом "Msgstr ", строка 85: синтаксическая ошибка рядом с" универсальным ".в конце программы.Я знаю, что мой код даже не будет компилироваться ни на одну из ваших машин, так как мой фильтр не определен, но мне нужна свежая помощь.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

filter0: filter_memory generic map(n=>n) но имя вашего компонента filter_rom

try

filter0: filter_rom generic map(n=>n)

Если вы изменили другое значение на elsif, измените его и здесь.

Компилируется в Vivado 2017.4

0 голосов
/ 22 мая 2018

Я использовал 'else if' вместо 'elsif', и он не компилировался.

...