Итак, я работал на простом компьютере в VHDL и создал свой ALU, используя нестандартный тип управляющего сигнала, чтобы дать синтезатору свободу выбора конкретной схемы кодирования, которая упрощает логику ALU. Отлично.
Затем я пошел писать блок управления, и для некоторых операций ALU не используется. В идеале для этих циклов я бы указывал условие «Не волнуйся» для управляющих сигналов АЛУ, чтобы избежать потенциальной необходимости дополнительной логики, чтобы перевести его в одно конкретное состояние, которое я мог бы выбрать плохо. Тем не менее, я не могу найти что-либо о том, как или если вообще возможно указать не волнующее условие для сигнала пользовательского типа. Замена сигнала alu_op на std_logic_vector устраняет проблему с блоком управления, но затем требует, чтобы я вручную указал кодировки в ALU. Можно ли как-нибудь получить лучшее из обоих миров (позволить синтезатору выбрать кодировку ALU, а также сгенерировать логику с Don't Care в блоке управления)?
Мой пользовательский тип определен в файле пакета как
type ALU_op is (PASS_A, PASS_B, ADD, SUB);
Тогда АЛУ выглядит так:
entity ALU is
GENERIC(N : integer := 8);
PORT(
A, B : IN unsigned(N-1 downto 0);
OP : IN ALU_op;
R : OUT unsigned(N-1 downto 0)
);
end ALU;
architecture arch of ALU is
signal result : unsigned(N-1 downto 0);
begin
with OP select
R <=
A when PASS_A,
B when PASS_B,
A+B when ADD,
A-B when SUB;
end arch;
А потом в блоке управления (между прочим) я не хочу делать что-то вроде:
process(state)
begin
case state is
when S1 => alu_op <= PASS_A;
when S2 => alu_op <= ADD;
when S3 => alu_op <= ???; --Don't Care, currently have to pick an arbitrary value
... (etc)
end case;
end process;
Я понимаю, что для этого небольшого примера это не будет иметь большого значения, но это казалось чем-то, что должно быть возможным и может быть очень полезным в более сложной системе. Спасибо!