【问题标题】:VHDL FSM not compilingVHDL FSM 未编译
【发布时间】:2018-11-01 16:03:33
【问题描述】:

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

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 行:“进程”附近的语法错误, 第 85 行:“通用”附近的语法错误。在程序结束时。我知道我的代码甚至不会编译到你的任何机器上,因为我的过滤器没有定义,但我需要一些新的帮助。

【问题讨论】:

  • 我不知道你可以在架构中声明变量。您确定它们不是问题的原因吗?
  • @mkrieger1 我将它们移到了进程中,但没有任何改变。编辑:愚蠢的我把'elsif'写成'else if'。
  • @Bill 确实:所以你可以回答你自己的问题。或者删除它。

标签: vhdl fsm


【解决方案1】:

我使用 'else if' 而不是 'elsif',但它没有编译。

【讨论】:

    【解决方案2】:

    filter0: filter_memory generic map(n=&gt;n) 但你的组件名称是filter_rom

    试试

    filter0: filter_rom generic map(n=&gt;n)

    如果你改变了 else if 到 elsif 也在这里改变它。

    在 Vivado 2017.4 中编译

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 2013-11-30
      • 1970-01-01
      • 2011-08-25
      • 2014-10-03
      • 2019-04-23
      • 2015-03-10
      • 2015-07-29
      • 1970-01-01
      相关资源
      最近更新 更多