Для копающихся в VHDL - информация к размышлению Да, в принципе банально, но вдруг кому пригодиться.
Как уменьшить количество описываемых сигналов в компонентах и соединениях? Объединять сигналы. Пример:
Описываем:
Код:
-- (Signals To the bus) physical signals driven -out- to the bus by cpu or busmaster peripherals
type BusSignalsTo is
record
Addr : std_logic_vector(21 downto 0); -- physical address
ctrlDataIn : std_logic; -- if '1', this is an input cycle
ctrlDataOut : std_logic; -- if '1', this is an output cycle
ctrlDataOutB : std_logic; -- if '1', the curr out cycle is for a byte
DataOut : std_logic_vector(15 downto 0); -- data out from cpu or busmaster peripherals
end record BusSignalsTo;
-- (Signals From the bus) physical signals driven -in- from the bus by cpu or busmaster peripherals
type BusSignalsFrom is
record
AddrMatch : std_logic; -- '1' if the address is recognized
DataReady : std_logic;
DataIn : std_logic_vector(15 downto 0); -- data input to cpu or busmaster peripherals
end record BusSignalsFrom;
type Signals is
record
sTo : BusSignalsTo;
sFrom : BusSignalsFrom;
end record Signals;
Используем:
Код:
component unibus is
port(
-- bus interface
BusOut : out BusSignalsTo
; BusIn : in BusSignalsFrom
...
signal Slot0 : Signals;
...
pdp11: unibus port map (
BusOut => Slot0.sTo
, BusIn => Slot0.sFrom
Итог - по две строчки (вместо восьми) в компоненте и отображении портов компонента на сигналы. На ЛЮБОМ количестве сигналов.
Почему две? Потому что, сцу... плохая собака - в описании типа (в нашем случае - записи) нельзя указать тип (in, out или ещё какой) поля. Только в описании сущностей - что в них входит, а что выходит. Поэтом приходится комбинировать в два типа - один - входные сигналы, другой - выходные.
Самое главное - при правильном подходе не подсоединишь не то не туда и не забудешь подсоединить.