Сделайте простую схему для рассеивания мощности в VHDL
Я ищу идеи о чем-то простом, чтобы написать, что я могу использовать для измерения мощности. Мне просто нужно убедиться, что мои измерения мощности работают. Я использую Xilinx ISE 14.1 на Virtex-6. Я хотел бы простую схему, чтобы написать и синтезировать.
До сих пор я пробовал счетчик бит 1K, но это было не очень заметно. Я попробовал счетчик бит 9K, но ISE не смог его синтезировать (я позволил ему проработать час, прежде чем его убить). Сейчас я пытаюсь реализовать большие BRAM и постоянно их поддерживать.
Мне нужен способ ограничить оптимизацию больших векторов, поэтому я бы хотел перезаписать все биты вместе и подать однобитный выход на светодиод. Есть ли простой способ сделать это для очень больших векторов?
2 ответа
Вот что я придумал. Я чувствую, что это дает хороший компромисс для простого кода и быстрого времени компиляции. Это сдвиг со всеми остальными битами, поэтому каждый FF должен переключаться каждый такт (после того, как он был настроен). Сигнал может быть инициализирован в начале, если это необходимо, но это не должно занять больше секунды или двух, в зависимости от ваших часов, чтобы достичь равновесия. Я использовал светодиод в качестве выхода, чтобы предотвратить оптимизацию схемы.
architecture Behavioral of top is
signal shifter : std_logic_vector(<insert size> downto 0) := (others => '0');
begin
process(clk)
begin
if(clk'event and clk = '1')then
shift_bit <= not shift_bit;
shifter <= shift_bit & shifter(shifter'high downto 1);
end if;
end process;
led <= shifter(0);
end Behavioral;
В VHDL 2008 вы можете сделать xor, например, так:
signal wide : std_logic_vector(1000 downto 0);
signal narrow : std_logic;
narrow <= xor wide;
Не уверен, что ISE поддерживает это.
Вы можете использовать функцию как:
function xor_vector(i:std_logic_vector) returns std_logic is
variable ret:std_logic:=i(i'low);
begin
for c in i'low+1 to i'high loop
ret := ret xor i(c);
end loop;
return ret;
end function;
(Не проверено, только что набрано - возможно, потребуется синтаксическая настройка!)
Для рассеивания мощности, вы можете попробовать кормить переменным '1'
а также '0'
шаблон в регистр сдвига, а не счетчик - тогда все биты будут меняться каждый цикл. Установите сброс в регистр сдвига, чтобы инструменты не делали вывод SRL16 более эффективным.