ModelSim中VHDL端口映射时如何正确使用拼接操作?
VHDL端口映射中拼接操作的编译错误解决方法
在ModelSim中编译VHDL代码时,若在端口映射内直接使用拼接操作,会触发如下错误:
Actual expression (infix expression) of formal "code" is not globally static
原代码片段(仅begin部分):
signal en_out : std_logic; signal count : std_logic_vector(2 downto 0); signal segments_out : std_logic_vector(6 downto 0); begin output_1 : clock_divider port map(enable,reset,clk,en_out); output_2 : counter port map(enable,reset,clk,count); output_3 : seven_segment_decoder port map('0'&count, segments_out); -- I want to concatenate here to obtain a 4-bit std_logic_vector HEX0 <= segments_out; end behavioral;
解决方法
ModelSim要求端口映射的实参必须是全局静态表达式,直接在端口映射里写拼接操作不符合这个要求。只需新增一个中间信号,先将拼接结果赋值给该信号,再用这个信号作为端口映射的实参即可。
修改后的代码:
signal en_out : std_logic; signal count : std_logic_vector(2 downto 0); signal segments_out : std_logic_vector(6 downto 0); -- 新增4位中间信号,存储拼接后的结果 signal count_4bit : std_logic_vector(3 downto 0); begin -- 先执行拼接操作并赋值给中间信号 count_4bit <= '0' & count; output_1 : clock_divider port map(enable,reset,clk,en_out); output_2 : counter port map(enable,reset,clk,count); -- 使用中间信号完成端口映射 output_3 : seven_segment_decoder port map(count_4bit, segments_out); HEX0 <= segments_out; end behavioral;
内容的提问来源于stack exchange,提问作者Vanessa
相关产品推荐
相关产品推荐

