Цитата(des00 @ May 13 2005, 08:14)
Как в нем делаеться репликация ?
Раньше я писал на верилоге, теперь вот сел за ВХДЛ,
например нужно доопределить знаковый разряд-> Пример:
sum[15:0] <= {5{a(10)}, a[10:0]} + {b[14],b[14:0]};
а как сделать это на ВХДЛ ?
sum(15 downto 0) <= (others => a(a'high)) & a(10 downto 0) + b(b'high) & b(14 downto 0);
не прокатывает, а возможности репликации в ВХДЛ я не нашел. Не расписывать же нужное кол-во бит руками ?

(
Для знакового и беззнакового расширений std_logic_vector есть функции sxt и ext в пакете std_logic_misc.
Для типов signed и unsigned --- фунция resize в пакете numeric_std.
Цитата
И еще есть ли в ВХДЛ такой аналог верилога как
reg[15:0] <= reg[15:0] ^ {16{reg[15]}};
если делаю
reg <= reg xor (others => reg(reg'high));
говорит про ошибку, но если вести доп.переменную то нормально есть:
temp = (others => reg(reg'high));
reg <= reg xor temp;
???
ЗЫ сильно не пинайте если в что, я только учюсь
Просто так, по-моему, нельзя. Можно через generate
Код
genXor:
for i in 15 downto 0 generate
reg0(i) <= reg1(i) xor reg1(15);
end generate;
или в цикле, если внутри процесса.
Либо можно перегрузить функцию xor:
Код
function "xor" (l : std_logic_vector, r : std_logic) return std_logic_vector is
variable ret : std_logic_vector(l'renge);
begin
for i in l'range loop
ret(i) := l(i) xor r;
end loop;
return ret;
end;
поместить ее в пакет, и по мере необходимости его использовать. Аналогично можно перегрузить функции and и or.
Таким образом можно сделать пакет с полезными функциями, который время от времени будет пополняться новыми.