I have the following architecture:
architecture datapath of DE2_TOP is
begin
U1: entity work.lab1 port map ( --error on this line
clock => clock_50,
key => key,
hex6 => hex6,
hex5 => hex5,
hex4 => hex4
);
end datapath;
This architecture obviously depends on lab1 entity. Here is my lab1 entity and architecture:
entity lab1 is
port(
clock : in std_logic;
key : in std_logic_vector(3 downto 0);
hex4, hex5, hex6 : out std_logic_vector(6 downto 0);
value_counter : in unsigned(7 downto 0);
register_counter : in unsigned(3 downto 0)
);
end lab1;
architecture up_and_down of lab1 is
signal hex5_value : unsigned(7 downto 0);
begin
process(clock)
begin
value_counter<="00000000"; --default values?
register_counter<="0000";
if rising_edge(clock) then
if (key(3)='0' and key(2)='0' and key(1)='1' and key(0)='0') then
value_counter <= value_counter + "1";
elsif (key(3)='0' and key(2)='0' and key(1)='0' and key(0)='1') then
value_counter <= value_counter - "1";
end if;
end if;
hex5_value <= (value_counter - (value_counter mod 10))/10;
end process;
end architecture up_and_down;
I am getting the following error: Error (10346): VHDL error at DE2_TOP.vhd(280): formal port or parameter "value_counter" must have actual or default value
on the indicated line. It seems to me that I have set the default values already in my lab1 architecture. Anyone know what the problem is?
That's not a "default value" but an assignment to initialise it. It's also assigning to an input port which is illegal. Also, the entity is compiled before the architecture so the (illegal) assignment doesn't exist yet.
signal value_counter : unsigned(7 downto 0) := (others => 'X');
is a default value (or initial value), supplied in the declaration
port (
value_counter : in unsigned(7 downto 0) := (others => '1');
would be a default value on an input port, but I've never seen that done. I've always connected all input ports in the port map. If this works I'm (slightly) impressed, but probably not enough to be happy about unconnected inputs; it seems too easy to overlook mistakes that way.