Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ассинхронная логика
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Serega_YSV
Имеется кучка логических микросхем на плате. Работают как дешифратор. Как заменить их на CPLD XC9500XL если нет клока. Возможна ли работа микросхемы как комбинационной схемы без тригеров в асинхронном режиме?
Волощенко
Все можно, т.к. CPLD заменяют схемы, как с внутренними элементами памяти, так и без них. Вход клока это либо групповой сигнал синхронизации, либо вход\выход общего назначения. Триггера не используйте, если они не нужны, здесь много свобод выбора.
Serega_YSV
Интересует вопрос такого плана: При использовании синхронной логики обычно входной сигнал поступал на информационный вход тригера, который сохранял этот сигнал по клоку. А при отсутствии синхросигнала и не использования триггеров возможна ли стабильная работа схемы?
dmivs
Но ваша схема на "рассыпухе" работает-же smile.gif

Синхронная реализация логических устройств позволяет избежать многих головных болей при проектировании сложных цифровых схем (как это обычно бывает в случае FPGA или современных ASIC).
Почитайте, например, про "гонки импульсов" и "метастабильность"

Для простых схем на CPLD можно использовать и традиционные методы, как в случае с дискретной логикой. В Интернете хватает примеров. И отлаживать такую схему можно традиционными методами. Только вместо перерезания дорожек и запаивания перемычек меняем прошивку CPLD smile.gif

Цитата(Serega_YSV @ Jul 4 2006, 09:12) *
Интересует вопрос такого плана: При использовании синхронной логики обычно входной сигнал поступал на информационный вход тригера, который сохранял этот сигнал по клоку. А при отсутствии синхросигнала и не использования триггеров возможна ли стабильная работа схемы?
Serega_YSV
Вывод:
1. Хотим получить стабильно работающую систему - используем синхронную логику(что я люблю делать).
2. Если старая плата на логических элементах (не, 2и-не, 3и-не) работает в асинхронном режиме, то нечего мудрить ставим CPLD и все работает как и работало, но с меньшим потреблением энергии и меньшими размерами платы в раз 20.

Спасибо!
makc
Цитата(Serega_YSV @ Jul 4 2006, 11:05) *
Вывод:
1. Хотим получить стабильно работающую систему - используем синхронную логику(что я люблю делать).
Спасибо!


Это не совсем правильный вывод, т.к. при создании полностью синхронных схем тоже есть свои подводные камни, только лежат они в другом месте. Простой пример: схема внутри полностью синхронна, а ее внешний интерфейс - асинхронный. Более сложный пример: внутри схемы есть несколько тактовых сигналов (доменов), между которыми должны передаваться данные. И там, и там возможна некорректная работа схемы, т.к. могут быть нарушены времена предварительной установки/удержания данных на входах тригеров, что приведет к возникновению метастабильности и нарушению работы схемы, если отдельные узлы будут спроектированы без учета подобной возможности.
sazh
Да какая разница, синхронная схема или асинхронная, работает по фронтам каких то сигналов или по уровню. Если нет в схеме клока, значит устройству согласно ТЗ безразличны всевозможные пички, формируемые на выходах комбинаторной логики. Причем от разводки к разводке при добавлении элементов в схему они будут то возникать, то пропадать. В противном случае это ошибка.
Димыч
Ну да, всё по полочкам хорошо разложили smile.gif
Действительно, стоит еще руководствоваться соображениями необходимости и достаточности. И не делать синхронную К155ЛА3 без крайней на то нужды.
almay
2. Если старая плата на логических элементах (не, 2и-не, 3и-не) работает в асинхронном режиме, то нечего мудрить ставим CPLD и все работает как и работало, но с меньшим потреблением энергии и меньшими размерами платы в раз 20.

C меньшими размерами согласен, а вот на счет потребления не совсем. CPLD 9500 весма прилично кушают, а за одно и греются.
Serega_YSV
Цитата(almay @ Jul 4 2006, 12:23) *
C меньшими размерами согласен, а вот на счет потребления не совсем. CPLD 9500 весма прилично кушают, а за одно и греются.

Почему? Серия XC9572XL (Питание 3В) при 50 Мгц потребление 50мА .
maior
Для простых проектов можно, а иногда и нужно использовать CPLD
и асинхронную логику. Для сложных - FPGA и синхронную логику +
всякие дополнительные фичи и навороты, имеющиеся в FPGA.
javalenok
CPLD любит асинхронность больше FPGA? Тулзы точно её презирают, любой скажет.
dmivs
Цитата(javalenok @ Jul 10 2006, 14:46) *
CPLD любит асинхронность больше FPGA? Тулзы точно её презирают, любой скажет.


FPGA любит Асинхронность
А CPLD любит ее еще больше
Но Тулзы презирают Асинхронность
А вот Асинхронность просто ненавидит их всех
Да и CPLD не долюбливает FPGA (из-за растущей популярности последней)
А FPGA любит CPLD как собственную мать. Вот только CPLD грузит ее частенько и иногда пытается ей командовать...
Если-же мы еще вспомним про многочисленные семейства Микроконтроллеров, и пусть не очень умную, но старую и опытную Логику (кстати, она в союзе с Асинхронностью)...

Как-же все сложно. И все об этом только и говорят biggrin.gif
javalenok
Цитата(dmivs @ Jul 10 2006, 15:03) *
Если-же мы еще вспомним про многочисленные семейства Микроконтроллеров, и пусть не очень умную, но старую и опытную Логику (кстати, она в союзе с Асинхронностью)...



АСИК? А кто асинхронность больше любит ASIC или CPLD? И почему?
maior
ASIC это понятие растяжимое. Большинство успешных фирм
используют свои наработанные библиотеки физических элементов для построения
своих ASICов (и делают это на физическом же уровне), согласованые
со своими технологиями (fab-ами) и мощные мини-эвм для их синтеза-верификации.
Так что там они могут делать что угодно, даже то, что
эфпиджи-эйщикам и сипиэл-дистам даже в кошмарном сне не приснится.
И все будет работать четко (commercial/industrial/military).

RTL-design для ASIC - скорее всего лишь в самой начальной
стадии проектирования какого-нибудь нового проекта новой группой разработчиков
в каком-нибудь старт-апе, и c этого момента до выпуска первых ASIC
может пройти лет пять.
Или с целью обучения, что вообще-то немаловажно для
формирования полноценного специалиста по ASIC.
cornflyer
да. я уже так делал. просто реализуешь логическую функцию на асинхронных триггерах
вот типичный код проекта для XC9572XL (посредник между DSP и платой сбора данных):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity linux is
port(
LD_DAC : in STD_LOGIC; -- load strobe for DAC
CS_DAC : in STD_LOGIC; -- chip select for LLD and ChW DAC's (Channel width DAC)
RDHB : in STD_LOGIC; -- RDHB' enable signal ('0' - active low level )
RDLB : in STD_LOGIC; -- RDLB' enable signal
REQ : out STD_LOGIC; -- data ready-signal for DSP
DAO : out STD_LOGIC_VECTOR(7 downto 0); -- data for DSP
DTIME : out STD_LOGIC; -- inquiry about dead time
SLD0 : out STD_LOGIC; -- strobe for LLD (low level discriminator)
SLD2 : out STD_LOGIC; -- strobe for ChW (Channel width DAC)
IRQ : in STD_LOGIC; -- data ready-signal from mezzanine:'
IACK : out STD_LOGIC; -- acknowledge from mediator-FPGA clears IRQ:'1'
DIO : in STD_LOGIC_VECTOR(13 downto 0);-- data from mezzanine
IORD : inout STD_LOGIC; -- '0' to output data from Mux to Count(out_port)
DT : in STD_LOGIC;
ConvEn: out STD_LOGIC;
EnaRST : out STD_LOGIC -- OUTPUT DRIVER STARTING VALUE is '1'
);
end linux;
architecture Behavioral of linux is
signal mux:STD_LOGIC_VECTOR(7 downto 0);
signal input:STD_LOGIC:='1';
begin
process(RDHB,DT)
begin
if DT='1' then
IACK<='0';
elsif RDHB'event and RDHB='1' then
IACK<='1';
end if;
end process;
ConvEn<='1';
------------------------------------------------
SLD0<=LD_DAC when CS_DAC='1' else '1';
SLD2<=LD_DAC when CS_DAC='0' else '1';
------------------------------------------------
process(LD_DAC,input)
begin
if (LD_DAC'event and LD_DAC='0') then
EnaRST <= input;
end if;
end process;
------------------------------------------------
DTIME<=DT;
------------------------------------------------
IORD<=(RDLB and RDHB);
REQ<=IRQ;
DAO<=mux when IORD='0' else "ZZZZZZZZ";
mux(0)<=(('0' and (not RDLB)) or (DIO(6) and RDLB));
mux(1)<=(('0' and (not RDLB)) or (DIO(7) and RDLB));
mux(2)<=((DIO(0) and (not RDLB)) or (DIO(8) and RDLB));
mux(3)<=((DIO(1) and (not RDLB)) or (DIO(9) and RDLB));
mux(4)<=((DIO(2) and (not RDLB)) or (DIO(10) and RDLB));
mux(5)<=((DIO(3) and (not RDLB)) or (DIO(11) and RDLB));
mux(6)<=((DIO(4) and (not RDLB)) or (DIO(12) and RDLB));
mux(7)<=((DIO(5) and (not RDLB)) or (DIO(13) and RDLB));
------------------------------------------------
end Behavioral;

Цитата(cornflyer @ Jul 14 2006, 16:53) *
да. я уже так делал. просто реализуешь логическую функцию на асинхронных триггерах
вот типичный код проекта для XC9572XL (посредник между DSP и платой сбора данных):
Тут все порты - это внешние ноги PLD

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity linux is
port(
LD_DAC : in STD_LOGIC; -- load strobe for DAC
CS_DAC : in STD_LOGIC; -- chip select for LLD and ChW DAC's (Channel width DAC)
RDHB : in STD_LOGIC; -- RDHB' enable signal ('0' - active low level )
RDLB : in STD_LOGIC; -- RDLB' enable signal
REQ : out STD_LOGIC; -- data ready-signal for DSP
DAO : out STD_LOGIC_VECTOR(7 downto 0); -- data for DSP
DTIME : out STD_LOGIC; -- inquiry about dead time
SLD0 : out STD_LOGIC; -- strobe for LLD (low level discriminator)
SLD2 : out STD_LOGIC; -- strobe for ChW (Channel width DAC)
IRQ : in STD_LOGIC; -- data ready-signal from mezzanine:'
IACK : out STD_LOGIC; -- acknowledge from mediator-FPGA clears IRQ:'1'
DIO : in STD_LOGIC_VECTOR(13 downto 0);-- data from mezzanine
IORD : inout STD_LOGIC; -- '0' to output data from Mux to Count(out_port)
DT : in STD_LOGIC;
ConvEn: out STD_LOGIC;
EnaRST : out STD_LOGIC -- OUTPUT DRIVER STARTING VALUE is '1'
);
end linux;
architecture Behavioral of linux is
signal mux:STD_LOGIC_VECTOR(7 downto 0);
signal input:STD_LOGIC:='1';
begin
process(RDHB,DT)
begin
if DT='1' then
IACK<='0';
elsif RDHB'event and RDHB='1' then
IACK<='1';
end if;
end process;
ConvEn<='1';
------------------------------------------------
SLD0<=LD_DAC when CS_DAC='1' else '1';
SLD2<=LD_DAC when CS_DAC='0' else '1';
------------------------------------------------
process(LD_DAC,input)
begin
if (LD_DAC'event and LD_DAC='0') then
EnaRST <= input;
end if;
end process;
------------------------------------------------
DTIME<=DT;
------------------------------------------------
IORD<=(RDLB and RDHB);
REQ<=IRQ;
DAO<=mux when IORD='0' else "ZZZZZZZZ";
mux(0)<=(('0' and (not RDLB)) or (DIO(6) and RDLB));
mux(1)<=(('0' and (not RDLB)) or (DIO(7) and RDLB));
mux(2)<=((DIO(0) and (not RDLB)) or (DIO(8) and RDLB));
mux(3)<=((DIO(1) and (not RDLB)) or (DIO(9) and RDLB));
mux(4)<=((DIO(2) and (not RDLB)) or (DIO(10) and RDLB));
mux(5)<=((DIO(3) and (not RDLB)) or (DIO(11) and RDLB));
mux(6)<=((DIO(4) and (not RDLB)) or (DIO(12) and RDLB));
mux(7)<=((DIO(5) and (not RDLB)) or (DIO(13) and RDLB));
------------------------------------------------
end Behavioral;
Harbour
есть даже ресурс в сети посвященный переводу синхронных схем в асинхронные - бонусы состоят в пониженном потреблении и отсутствии ярко выраженных электромагнитных излучений при защелкивании кипы триггеров по одному фронту.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.