Rob*_*ans 3 components record vhdl toplevel
为了能够在我的VHDL设计中支持可扩展性,我开始使用记录作为我的组件的输入和输出.目前,我正处于使用顶级架构中的端口映射将组件链接到外部的位置.问题是,记录有多个必须与不同来源链接的变量.
目前我在VHDL代码中使用的记录看起来像这样(名称已被假货替换):
TYPE some_record_input IS RECORD
input_one : sfixed(3 downto -32);
input_two : sfixed(3 downto -32);
input_rst : std_logic;
END RECORD;
TYPE some_record_output IS RECORD
output_one : std_logic_vector(15 downto 0);
output_dn : std_logic;
END RECORD;
Run Code Online (Sandbox Code Playgroud)
因此我正在使用fixed_pkg库来获取固定点.
这些记录在实体端口映射中使用如下.
ENTITY my_component IS
port
(
clk : IN std_logic;
data : IN some_record_input;
result : OUT some_record_output
);
END my_component;
Run Code Online (Sandbox Code Playgroud)
现在问题发生的部分.我在顶层使用这个组件将它与我的Altera Board可用的按钮和LED连接起来.这是通过在我的顶级实体的主体中使用端口映射来完成的:
A0 : my_component PORT MAP(clk => CLK, data => (input_one => IONE, input_two => ITWO, input_rst => RST), result => (output_one => OONE, output_dn => ODN));
Run Code Online (Sandbox Code Playgroud)
因此,资本信号是外向信号.很明显,这不是要走的路,因为modelsim没有编译它.我想知道是否有人可以告诉我如何在VHDL中为顶级实体完成端口映射记录.提前致谢.
而不是聚合,使用记录元素的单独关联:
A0 : my_component
PORT MAP(
clk => CLK,
data.input_one => IONE,
data.input_two => ITWO,
data.input_rst => RST,
result.output_one => OONE,
result.output_dn => ODN
);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,请确保单独关联数据和结果的所有部分.还要确保不要在对象的各个关联之间混合其他内容,因此,数据的所有部分必须彼此相邻.