Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глобальный ресет и Xilinx
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
dr.Livsy
При изучении руководства по 3-му спартану наткнулся на пару интересных статей от Xilinx`a:
WP272: Get Smart About Reset: Think Local, Not Global, WP275: Get Your Priorities Right - Make Your Design up to 50% Smaller.
В них убедительно доказывается, что использование глобального ресета в ПЛИС не есть хорошо с точки зрения надежности и места занимаемого проектом в ПЛИС. При этом говорится, что при конфигурации ПЛИС вырабатывает сигнал Global Set\Reset и все триггеры и память переводяться в преодпределенное состояние. Однако, насколько я понял это состояние задается с помощью аттрибутов для библиотечных элементов. А как сделать аналогичную вещь для любой синхронной схемы без использования библиотечных триггеров и памяти от Xilinx?
Boris_TS
Цитата(dr.Livsy @ Aug 4 2009, 21:51) *
А как сделать аналогичную вещь для любой синхронной схемы без использования библиотечных триггеров и памяти от Xilinx?

Я так понимаю "без использования библиотечных триггеров" означает, что Вы хотите это описать на каком-либо языке.

Если для синтеза с языка использовать HDL, то начальное состояние триггера (ОЗУ и п.т.) задается через начальное значение переменной (сигнала), которая после синтеза превратиться в выход триггера.

Для VDHL это выглядит примерно так:
Код
library ieee;
library ieee;
use ieee.std_logic_1164.all;

entity FDRE_0 is
port(
    C, D, CE, PRE, RST:    in    std_logic;
    Q:                    out    std_logic );
end entity FDRE_0;

architecture FDRE_0_BODY of FDRE_0 is
begin
    process (C)
        variable    FF:    std_logic := '1';
    begin
        if rising_edge(C) then
            if PRE = '1' then
                FF := '1';
            elsif RST = '1' then
                FF := '0';
            elsif CE='1' then
                FF := D;
            end if;
        end if;
        Q <= FF;
    end process;
end FDRE_0_BODY;

В итоге получается триггер с начальным состоянием '1'.
Т.к. начальное состояние '1', то наивысший приоритет должен имеет сброс в '1' (т.е. PRE) - поэтому в основном if он проверяется первым.
Следующий по приоритету идёт "инверсный" сброс - в приведенном примере это RST.
Последним по приоритету идет сигнал CE и входные данные D (выход LUT или прямой вход на триггер мимо LUT).
des00
Цитата(dr.Livsy @ Aug 4 2009, 11:51) *
При изучении руководства по 3-му спартану наткнулся на пару интересных статей от Xilinx`a:
WP272: Get Smart About Reset: Think Local, Not Global, WP275: Get Your Priorities Right - Make Your Design up to 50% Smaller.
В них убедительно доказывается, что использование глобального ресета в ПЛИС не есть хорошо с точки зрения надежности и места занимаемого проектом в ПЛИС.


насколько я помню там доказывается не это, там утверждается что во всем важна мера и нужно сбрасывать только то, что должно быть сброшено. А с учетом архитектуры хилых это дает дополнительные бонусы в производительности и ресурсе и не факт что это будет так у альтер, латексов и других чипах.

Цитата
При этом говорится, что при конфигурации ПЛИС вырабатывает сигнал Global Set\Reset и все триггеры и память переводяться в преодпределенное состояние. Однако, насколько я понял это состояние задается с помощью аттрибутов для библиотечных элементов. А как сделать аналогичную вещь для любой синхронной схемы без использования библиотечных триггеров и памяти от Xilinx?


если синтезатор поддерживает синтез начальной инициализации то решение тривиально, в противном случае, если нет такой опции синтезатора (как например Power Up Don't Care у альтер) ручками.
dr.Livsy
Спасибо, разобрался. Попробовал сегодня на виртексе, все работает =)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.