Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос про ПЛИС в целом и VHDL
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Golikov A.
Здрасте. Пробовал воспользоваться поиском, ни к чему хорошему это не привело.

Вопроса 2.

Первый
Можно ли описать такую вещ? Шину надо отпускать в 3 состояние (или high impedance не уверен что это одно и тоже) но при этом подтянуть ее к земле. В смысле чтобы если ее никто не дергает она ноль, но если кто ее дергает, конфликтов нет. Можно ли это сделать внутри ПЛИС? Это аналог того, что с наружи резюком к земле шинку подтянуть ну или к питанию. Если можно то лучше пример.

Второй
Я как то его поднимал, и ответы меня устроили, но сейчас чуть другая ситуация. На плате 9 одинаковых ЦАП, хочется написать один интерфейсный модуль, а потом его размножить. Для этого надо писать модуль с возможностью задачи адреса (даже адресов). Как я понимаю это надо делать через Женерик или через внешнюю шину на которую константой задать адрес. Но вот беда, все что написано в женерике или передается снаружи не является статиком, и в кейз это запихать нельзя. На кейзе построен внутренний дешифратор адреса, каждый блок имеет несколько адресов. Я решил проблему описав кейз через иф и елсиф, но как то это криво. Как решают проблему профессионалы? Я имею ввиду как делаются по уму модули с меняемыми адресными пространствами? Пакедж не подойдет, потому что надо уметь создавать копии модулей с разными адресами.

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

Ну вот и все, надеюсь вопросы не вызовут бурю негодования по поводу их несерьезности, заранее спасибо. Все это для Ксалинксов и среды ИСЕ 7.1, и VHDL, но ради эрудиции хотелось бы и про другие плис-среды услышать.
dinam
Цитата(Golikov A. @ Jul 19 2006, 02:54) *
... в 3 состояние (или high impedance не уверен что это одно и тоже) ...
Одно и тоже smile.gif
Цитата(Golikov A. @ Jul 19 2006, 02:54) *
В смысле чтобы если ее никто не дергает она ноль, но если кто ее дергает, конфликтов нет. Можно ли это сделать внутри ПЛИС? Это аналог того, что с наружи резюком к земле шинку подтянуть ну или к питанию. Если можно то лучше пример.
У Altera, такая возможность обзывается bus-hold. Это уже обсуждалось, вот, здесь, например, http://electronix.ru/forum/index.php?showt...&hl=pull-up
seven7
Первый вопрос:
Если правильно понял вопрос, такое делал и вроде работало.
Надо сделать instantiation:

Library UNISIM;
use UNISIM.vcomponents.all;

PULLDOWN_inst : PULLDOWN
port map (
O => SIGNAL_NAME
);

для шины через generate:

PULLDOWN_BUS_inst:
for i in 0 to BUS_WIDTH-1 generate
begin
PULLDOWN_inst : PULLDOWN
port map (
O => BUS_NAME(i)
);
end generate;

Не уверен но через атрибуты тоже можно попробовать:

attribute pulldown: string;
attribute pulldown of SIGNAL_NAME: signal is "yes";

Для шины аналогично:

attribute pulldown of BUS_NAME: signal is "yes";

Второй вопрос тоже решал бы через generic, почему case не работает не понял,
надо увидеть код чтоб понять, почему не хочет синтезатор кушать smile.gif

Как generic передавать через графику не знаю, потому что графикой не пользуюсь smile.gif
Golikov A.
[quote name='dinam' date='Jul 19 2006, 09:14' post='135467']
[/quote] У Altera, такая возможность обзывается bus-hold. Это уже обсуждалось, вот, здесь, например, http://electronix.ru/forum/index.php?showt...&hl=pull-up
[/quote]

не совсем то!
это если шина выходит наружу. А меня интересует как это реализовать внутри ПЛИС, то есть если внутри ПЛИС блоки все висят на одной шине, и когда не выбраны отпускают ее в Z, но вот хочется чтобы когда все ее в Z отпустили она была бы в нуле.



Про instantiation.
если я правильно понял сделать еще один блок который следит за шиной, и если все устройства ее отпустили делает шину нулевой, а если кто то держит то наружу выпускает то что на шине? Глобально это имелось ввиду? или я совсем ничего не понял...


почему кейз не ест, ну наверное вот почему

ADRES_WIDTH - определен в пакедже.

generic (constant SDAC_ADR : std_logic_vector ((ADRES_WIDTH-1) downto 0) :=(others=>'0'));

case ADR is
when SDAC_ADR =>TimeOutAfterCS<="0000";
when others => Null;
end case;

Line 139. Choice SDAC_ADR is not a locally static expression.

причем вот сейчас это пишу и это просто варнинг, а вчера это был еррор... Странно может устал вчера и не так что то понял, но смысл такой. Наверное через кейз можно.
dinam
Цитата(Golikov A. @ Jul 19 2006, 15:42) *
не совсем то!
это если шина выходит наружу. А меня интересует как это реализовать внутри ПЛИС, то есть если внутри ПЛИС блоки все висят на одной шине, и когда не выбраны отпускают ее в Z, но вот хочется чтобы когда все ее в Z отпустили она была бы в нуле.
По хорошему нельзя делать никаких шин с Z-состоянием внутри ПЛИС. Где-то это об этом совсем недавно читал, но вот где не могу вспомнить sad.gif .
P.S. Нашел http://electronix.ru/forum/index.php?showtopic=16018
andrew_b
Цитата(dinam @ Jul 19 2006, 12:50) *
По хорошему нельзя делать никаких шин с Z-состоянием внутри ПЛИС.

Ерунда. Можно.

Цитата
Где-то это об этом совсем недавно читал, но вот где не могу вспомнить sad.gif .
P.S. Нашел http://electronix.ru/forum/index.php?showtopic=16018

Написано, что можно, и иногда полезно.
seven7
[quote name='Golikov A.' date='Jul 19 2006, 11:42' post='135539']
[quote name='dinam' date='Jul 19 2006, 09:14' post='135467']
[/quote] У Altera, такая возможность обзывается bus-hold. Это уже обсуждалось, вот, здесь, например, http://electronix.ru/forum/index.php?showt...&hl=pull-up
[/quote]

не совсем то!
это если шина выходит наружу. А меня интересует как это реализовать внутри ПЛИС, то есть если внутри ПЛИС блоки все висят на одной шине, и когда не выбраны отпускают ее в Z, но вот хочется чтобы когда все ее в Z отпустили она была бы в нуле.

[/quote]

Внутри ПЛИС нет как такового Z состояния. По-моему в втором спартане была что-то наподобие Z-состояния
т.е. там была логика типа открытого коллектора и pullup резистора поэтому могли несколько нетов к одной точки подключаться.

То что я предложил тебе написать, только лишь для того, чтоб синтезатор понял, какую логику ты хочешь построить. Потом при синтезе он ругнется что заменил, то что ты хотел, на комбинаторику.
Вроде такого
Xst:2040 - Unit GCTL: 2 multi-source signals are replaced by logic (pull-up yes): FXP_MAIN0/nREQOE, FXP_MAIN0/nREQOUT.

Но это будет работать, если написано правильно.

С кейсом работать generic не будет по определению.
См. параграф 8.8 IEEE Standard VHDL Language Reference Manual
dinam
Я разрабатываю схемы и пишу программы так, чтобы ни один вход не висел в водухе. Во первых: так как на такие выводы легко наводится помеха, то устройство может запросто начать сбоить. Во вторых может резко возрасти ток потребления если на шине с Z-состоянием будет напряжение около половины питания. Второе, насколько я понимаю и применимо как раз в этом случае, если нет никаких подтягивающих резисторов или bus-hold.

P.S. to seven7 пользуйтесь предварительным просмотром своего сообщения, а то читать невозможно sad.gif .
Wild
Цитата(Golikov A. @ Jul 18 2006, 23:54) *
Здрасте. Пробовал воспользоваться поиском, ни к чему хорошему это не привело.

Вопроса 2.

Первый
Можно ли описать такую вещ? Шину надо отпускать в 3 состояние (или high impedance не уверен что это одно и тоже) но при этом подтянуть ее к земле. В смысле чтобы если ее никто не дергает она ноль, но если кто ее дергает, конфликтов нет. Можно ли это сделать внутри ПЛИС? Это аналог того, что с наружи резюком к земле шинку подтянуть ну или к питанию. Если можно то лучше пример.


значение 'Н' в типе STD_LOGIC соответствует "подтяжке к питанию", 'L' - "подтяжке к земле".
Таким образом, линия имеющая два драйвера и подтянутая к "земле", для симуляции может быть описана так:
...
signal LINE:std_logic;
...
LINE<='L'; --подтяжка к земле
...
LINE<='Z' when OUT1_EN='0' else OUT1;
LINE<='Z' when OUT2_EN='0' else OUT2;

В железке подтяжку можно установить руками в UCF, или после разводки можно в FPGA EDITORе
andrew_b
Цитата(seven7 @ Jul 19 2006, 13:25) *
ВнутриПЛИС нет как такового Z состояния. По-моему в втором спартане былачто-то наподобие Z-состояния т.е. там была логика типа открытогоколлектора и pullup резистора поэтому могли несколько нетов к однойточки подключаться.

Ничего подобного. В Спартанах 1 и 2 и во всех Виртексах внутри есть тристабильные буферы (BUFE, BUFT).
seven7
Цитата(andrew_b @ Jul 19 2006, 13:45) *
Ничего подобного. В Спартанах 1 и 2 и во всех Виртексах внутри есть тристабильные буферы (BUFE, BUFT).

Могу ошибаться, мне так говорили когда учили, значит в этом соврали sad.gif Сам не имел на практике дела с сп1/2 и вертексом
Golikov A.
СПАСИБО ВСЕМ!

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

(diman)Про шину в Z состоянии, в спартане 3е точно есть три стайт буферы, и 2 схемы на них сейчас прекрасно работают. Схема состоит из нескольких блоков в каждый входит данные и адрес, и шину данных каждый блок включает либо на выход либо в 3 состояние давая работать другим блокам. Проблем нет.
А так написанная программа очень хорошо понятна и удобно масштабируется. Блоки добавляю, выкидываю все супер.

(wild)Я вчера когда писал сообщение вспоминал что есть какие-то еще буквы, спасибо H и L это именно то что я хотел услышать. Про подтяжку в железе, это наверное про тип выхода, когда пины задаешь, но это было понятно, а вот как сделать тристейт буфер подтянутый к земле в плис, это был вопрос... но теперь понятно спасибо.


(seven7)Про объяснения синтезатору... я не очень силен в тонкостях языка пока, потому если честно не очень понял что делает приведенный код. Но к счастью синтезатор сейчас меня понял как надо и я пока, если вас это не обидит, не буду разбираться в вашем описании.


(diman)Про входы в воздухе..., в воздухе никто и не весит, 3 состояние нужно для устранения конфликтов с внешним устройством. Но согласитесь не всегда на схемах разумно ставить подтягивающие резисторы, потому что в том случае если вы держите подтянутую шину то через резистор течет ток, а если шина 32 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себеsmile.gif)))


Про кейз и женерик. Я подумал вчера что логично, наверное, не давать работать кейзу с женериком, женерик может смениться, а это все таки не сигналы, и как развести кейз таблицу синтезатору... но сегодня когда писал что за ошибку дает синтезатор, обнаружил что ошибки больше нет, а есть только варнинг... Может быть потому что добавил значение адреса по умолчанию.

К счастью на текущий момент вопрос кейза остро не стоит, так как блок перестал быть универсальным. В любом случае кейз заменяеться на иф...ифелсе, а они то уж нормально должны работать, наверное%)... А если стандарт говорит что кейз и женерик не совместимы, я склонен ему верить (стандарту)


Огромное всем спасибо за потраченное на обсуждение темы время.




П.С. писав эту тему на русском языке, у меня вдруг возникла мысль. А переведение шины в "третье" состояние, не является ли исторической ошибкой. То есть возможно имелось ввиду переведение шины в Z, состояние, которое на русском выглядит как З[Зе] состояние, именно букву "Зе" может и приняли за цифру три? Вот что мне подумалось...smile.gif
dinam
Цитата(Golikov A. @ Jul 19 2006, 19:52) *
(diman)Про входы в воздухе..., в воздухе никто и не весит, 3 состояние нужно для устранения конфликтов с внешним устройством.
Немножко поясню, что я хотел сказать про входы в воздухе. Представим себе два двунаправленных буфера соединенных между собой. Так вот когда оба буфера переведены в 3 состояние, получается что вход каждого буфера висит в водухе. Т.е напряжение на затворах полевиков, стоящих на входе может стать равным половине напряжения питания, что является наихудшим случаем. При этом ток потребления, например, для дискретной логики 74HC, 74HCT может увеличиться на 2-3 порядка, если судить по даташитам фирмы Philips. Я думаю это соответствует и для ПЛИС. Насколько я понимаю бешенные токи потребления некоторых FPGA до конфигурации объясняется именно этим. Кстати, такая проблема для дискретной логики уже неоднокрано обсуждалось на форуме.
Цитата(Golikov A. @ Jul 19 2006, 19:52) *
(diman)Но согласитесь не всегда на схемах разумно ставить подтягивающие резисторы, потому что в том случае если вы держите подтянутую шину то через резистор течет ток, а если шина 32 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себеsmile.gif)))
Для этого и придумали bus-hold smile.gif .
Golikov A.
Цитата(dinam @ Jul 20 2006, 05:41) *
Цитата(Golikov A. @ Jul 19 2006, 19:52) *
(diman)Про входы в воздухе..., в воздухе никто и не весит, 3 состояние нужно для устранения конфликтов с внешним устройством.
Немножко поясню, что я хотел сказать про входы в воздухе. Представим себе два двунаправленных буфера соединенных между собой. Так вот когда оба буфера переведены в 3 состояние, получается что вход каждого буфера висит в водухе. Т.е напряжение на затворах полевиков, стоящих на входе может стать равным половине напряжения питания, что является наихудшим случаем. При этом ток потребления, например, для дискретной логики 74HC, 74HCT может увеличиться на 2-3 порядка, если судить по даташитам фирмы Philips. Я думаю это соответствует и для ПЛИС. Насколько я понимаю бешенные токи потребления некоторых FPGA до конфигурации объясняется именно этим. Кстати, такая проблема для дискретной логики уже неоднокрано обсуждалось на форуме.
Цитата(Golikov A. @ Jul 19 2006, 19:52) *
(diman)Но согласитесь не всегда на схемах разумно ставить подтягивающие резисторы, потому что в том случае если вы держите подтянутую шину то через резистор течет ток, а если шина 32 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себеsmile.gif)))
Для этого и придумали bus-hold smile.gif .

ну наверное мне это не грозит, на шине у меня всегда есть ДСПешник, который мастер и шину туды суды тягает, в третьем состоянии у меня только слайвы. Про логику интересный факт, если честно такое пока не встречали...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.