首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL FSM未编译

VHDL FSM未编译
EN

Stack Overflow用户
提问于 2018-05-23 03:34:47
回答 2查看 60关注 0票数 1

我创建了以下fsm来控制fir滤波器,但在编译时遇到两个错误。

代码语言:javascript
复制
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行:"process“附近的语法错误,第85行:"generic”附近的语法错误。在节目结束的时候。我知道我的代码甚至不能编译到你的任何机器上,因为我的过滤器没有定义,但我需要一些新的视角的帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-05-23 04:18:48

我使用'else if‘而不是'elsif’,它不能编译。

票数 0
EN

Stack Overflow用户

发布于 2018-05-24 17:19:59

filter0: filter_memory generic map(n=>n),但您的组件名称是filter_rom

试一试

filter0: filter_rom generic map(n=>n)

如果您将else If更改为elsif,请在此处也进行更改。

它在Vivado 2017.4中编译

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50475256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档