Vhdl 端口映射内存组件不工作
我使用的是Quartus II,我需要用128x1B的8个组件创建一个256 x 4B(1KB)的内存,但我不是vhdl中的乞丐 以下是使用MegaWizard Quartus II插件创建的128x1B组件(问题不在这里):Vhdl 端口映射内存组件不工作,vhdl,Vhdl,我使用的是Quartus II,我需要用128x1B的8个组件创建一个256 x 4B(1KB)的内存,但我不是vhdl中的乞丐 以下是使用MegaWizard Quartus II插件创建的128x1B组件(问题不在这里): LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; USE altera_mf.all; ENTITY RAM_128B_MegaWizard IS PORT ( address
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.all;
ENTITY RAM_128B_MegaWizard IS
PORT
(
address : IN STD_LOGIC_VECTOR (6 DOWNTO 0);
clock : IN STD_LOGIC := '1';
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END RAM_128B_MegaWizard;
ARCHITECTURE SYN OF ram_128b_megawizard IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);
COMPONENT altsyncram
GENERIC (
clock_enable_input_a : STRING;
clock_enable_output_a : STRING;
intended_device_family : STRING;
lpm_hint : STRING;
lpm_type : STRING;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_aclr_a : STRING;
outdata_reg_a : STRING;
power_up_uninitialized : STRING;
widthad_a : NATURAL;
width_a : NATURAL;
width_byteena_a : NATURAL
);
PORT (
wren_a : IN STD_LOGIC ;
clock0 : IN STD_LOGIC ;
address_a : IN STD_LOGIC_VECTOR (6 DOWNTO 0);
q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END COMPONENT;
BEGIN
q <= sub_wire0(7 DOWNTO 0);
altsyncram_component : altsyncram
GENERIC MAP (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone II",
lpm_hint => "ENABLE_RUNTIME_MOD=NO",
lpm_type => "altsyncram",
numwords_a => 128,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "UNREGISTERED",
power_up_uninitialized => "FALSE",
widthad_a => 7,
width_a => 8,
width_byteena_a => 1
)
PORT MAP (
wren_a => wren,
clock0 => clock,
address_a => address,
data_a => data,
q_a => sub_wire0
);
END SYN;
我知道这是不完整的,但无论我做什么,编译都会给我同样的错误。即使开始和结束架构之后的部分只是
1.1: RAM_128B_MegaWizard port map
(Clock, En(0), Address(depth-4 downto 0), data(width-1 downto 24), dOut0(width-1 downto 24));
同样的事情也会发生
我知道端口映射不能在进程内部使用,但是带有进程的组件(128x1B)也不能进行端口映射?我如何组合这些组件来实现我想要的功能?在我看来,通过引用进行端口映射时遇到了问题。以下是您正在实例化的组件:
address : IN STD_LOGIC_VECTOR (6 DOWNTO 0);
clock : IN STD_LOGIC := '1';
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
因此,如果您是通过引用进行的,您应该具有以下实例化:
inst_1_1 : RAM_128B_MegaWizard port map
(Address(depth-4 downto 0), Clock, data(width-1 downto 24), En(0), dOut0(width-1 downto 24));
注意信号的位置。这就是为什么我更喜欢显式端口映射,这样会减少错误
此外,我不确定对实例化名称有什么限制,但1.1对我来说似乎不是一个好名字。尝试以字母开头且只有下划线而没有句点的内容。标签必须是标识符。这些导致错误(10500)VHDL。。。错误 基本标识符:
basic_identifier ::=
letter { [ underline ] letter_or_digit }
letter_or_digit ::= letter | digit
letter ::= upper_case_letter | lower_case_letter
extended_identifier ::=
\ graphic_character { graphic_character } \
或扩展标识符:
basic_identifier ::=
letter { [ underline ] letter_or_digit }
letter_or_digit ::= letter | digit
letter ::= upper_case_letter | lower_case_letter
extended_identifier ::=
\ graphic_character { graphic_character } \
在您的情况下,标签(1.1、1.2等)需要以字母开头,这有点像Russel在他的回答中附带说明的,除了在端口接口中实例化它们的位置关联不正确之外
解决这两个问题。谢谢你发现了第一个错误,我自己也应该看到的。真正的问题是实例化名称,正如您也指出的。我现在有其他问题,我应该能够解决,但那个问题已经解决了。再次感谢