VHDL 中有一个功能可以提供类似于您所要求的内容。但在我们开始之前,您可能应该听听 Brian 的意见,并使您的注册文件成为您设计中的适当实体。这将迫使您准确思考这些部分将如何交互,您必须在某些时候这样做。
我正在谈论的功能是全局信号。它们可以在包中声明并在各种实体中使用。公平地说,我认为这不是一个好主意。如您所料,这可能不会使您的设计更清晰;它会使它更加神秘。无论如何,您可以自由尝试,然后告诉我们您的结论。
这是一个小例子来说明我的意思。它不应该做任何有用的事情,但它在 ModelSim 中运行正常并且在 Quartus 12.1 中合成正常:
package register_file_pkg is
type register_file_type is array (0 to 31) of integer range 0 to 255;
signal register_file: register_file_type;
alias pc is register_file(31);
end;
--------------------------------------------------------------------------------
use work.register_file_pkg.all;
entity alu is
port (
clock: in bit;
zero_flag: out boolean;
last_pc_flag: out boolean
);
end;
architecture rtl of alu is
begin
zero_flag <= (register_file(0) = 0);
last_pc_flag <= (pc = 255);
process (clock) begin
if clock'event and clock = '1' then
register_file(0) <= pc / 4;
end if;
end process;
end;
--------------------------------------------------------------------------------
library ieee;
use ieee.numeric_bit.all;
use work.register_file_pkg.all;
entity cpu is
port (
clock: in bit;
address_bus: out integer;
zero_flag: out boolean;
last_pc_flag: out boolean
);
end;
architecture rtl of cpu is
begin
address_bus <= pc;
process (clock) begin
if clock'event and clock = '1' then
pc <= pc + 1;
end if;
end process;
cpu_alu: entity work.alu
port map(
clock => clock,
zero_flag => zero_flag,
last_pc_flag => last_pc_flag
);
end;