syntax-error - 在 VHDL 中的实体内声明数组

标签 syntax-error vhdl hdl

我正在尝试为小型 CPU 设计制作一个缓冲区来保存 16 条 16 位宽的指令。

我需要一种方法将指令从我的测试平台加载到缓冲区中。所以我想使用 std_logic_vectors 数组来完成这个。但是,我遇到了语法错误,我不确定为什么(或者是否允许我在 VHDL 中这样做)。

语法错误在我声明 instructions 的那一行

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;




entity instruction_buffer is
    port
    (
    reset               : in std_logic;
    instructions        : in array(0 to 15) of std_logic_vector(15 downto 0);
    instruction_address : in  std_logic_vector(3 downto  0);
    clk                 : in std_logic;
    instruction_out     : out std_logic_vector(15 downto 0)
    );
end instruction_buffer;

我也试过这样做,但后来我的实体端口映射中出现语法错误,告诉我 std_logic_vector是未知类型。我发誓,VHDL 的语法错误没有 C 有意义 哈哈
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

package instructionBuffer is
    type instructionBuffer is array(0 to 15) of std_logic_vector (15 downto 0);
end package instructionBuffer;

entity instruction_buffer is
    port
    (
    instruction_address : in  std_logic_vector(3 downto  0);
    clk                 : in std_logic;
    instruction_out     : out std_logic_vector(15 downto 0)
    );
end instruction_buffer;

最佳答案

无需拆分成两个文件,只需将所有代码放在一个文件中即可。您还可以在包中使用泛型来实现可扩展性:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

package instruction_buffer_type is
constant INSTRUCTION_BUFFER_ADDRESS : integer := 4;  --bits wide
constant INSTRUCTION_BUFFER_DATA    : integer := 16; --bits wide
type instructionBuffer is array(0 to 2**INSTRUCTION_BUFFER_ADDRESS -1) of std_logic_vector (INSTRUCTION_BUFFER_DATA -1 downto 0);
end package instruction_buffer_type;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

use work.instruction_buffer_type.all;

entity instruction_buffer is
    port
    (
    instruction_address : in  std_logic_vector(INSTRUCTION_BUFFER_ADDRESS-1 downto  0);
    instructions        : in instructionBuffer;
    clk                 : in std_logic;
    instruction_out     : out std_logic_vector(INSTRUCTION_BUFFER_DATA-1 downto 0)
    );
end instruction_buffer;

关于syntax-error - 在 VHDL 中的实体内声明数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308514/

相关文章:

python - 为什么这段代码不正确?

ruby-on-rails - HAML 语法错误 "expecting $end"

在没有 FPGA 的情况下测试我的 HDL 代码(Verilog/VHDL)?

fpga - 比特流加密

vhdl - 中缀表达式 VHDL 中的歧义类型

Verilog 始终 block 属性 - 顺序与组合

javascript - 如果 return 和 { 之间有换行符,为什么 JS 会抛出语法错误

python - 错误: 'Invalid Character in Idnetifier' when trying to solve ODE's in python

port - VHDL错误: formal port 'num' has no actual or default value

tcl - Modelsim - 为没有 GUI 的文件设置 "compile to library"