|
|
  |
Вопрос про ПЛИС в целом и VHDL, как описать адресуемый модуль |
|
|
|
Jul 18 2006, 19:54
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Здрасте. Пробовал воспользоваться поиском, ни к чему хорошему это не привело.
Вопроса 2.
Первый Можно ли описать такую вещ? Шину надо отпускать в 3 состояние (или high impedance не уверен что это одно и тоже) но при этом подтянуть ее к земле. В смысле чтобы если ее никто не дергает она ноль, но если кто ее дергает, конфликтов нет. Можно ли это сделать внутри ПЛИС? Это аналог того, что с наружи резюком к земле шинку подтянуть ну или к питанию. Если можно то лучше пример.
Второй Я как то его поднимал, и ответы меня устроили, но сейчас чуть другая ситуация. На плате 9 одинаковых ЦАП, хочется написать один интерфейсный модуль, а потом его размножить. Для этого надо писать модуль с возможностью задачи адреса (даже адресов). Как я понимаю это надо делать через Женерик или через внешнюю шину на которую константой задать адрес. Но вот беда, все что написано в женерике или передается снаружи не является статиком, и в кейз это запихать нельзя. На кейзе построен внутренний дешифратор адреса, каждый блок имеет несколько адресов. Я решил проблему описав кейз через иф и елсиф, но как то это криво. Как решают проблему профессионалы? Я имею ввиду как делаются по уму модули с меняемыми адресными пространствами? Пакедж не подойдет, потому что надо уметь создавать копии модулей с разными адресами.
И как бы подпункт этого вопроса, я потом все написанные модули объединяю в графике, мне так как то удобно, но вот вопрос, как нарисованному модулю задать параметры женерика? Есть ли какие методы, я вроде все обтыкал не нашел.
Ну вот и все, надеюсь вопросы не вызовут бурю негодования по поводу их несерьезности, заранее спасибо. Все это для Ксалинксов и среды ИСЕ 7.1, и VHDL, но ради эрудиции хотелось бы и про другие плис-среды услышать.
|
|
|
|
|
Jul 19 2006, 05:14
|
Профессионал
    
Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898

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

Группа: Участник
Сообщений: 33
Регистрация: 13-07-06
Пользователь №: 18 795

|
Первый вопрос: Если правильно понял вопрос, такое делал и вроде работало. Надо сделать 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 не работает не понял, надо увидеть код чтоб понять, почему не хочет синтезатор кушать  Как generic передавать через графику не знаю, потому что графикой не пользуюсь
|
|
|
|
|
Jul 19 2006, 08:42
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
[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. причем вот сейчас это пишу и это просто варнинг, а вчера это был еррор... Странно может устал вчера и не так что то понял, но смысл такой. Наверное через кейз можно.
|
|
|
|
|
Jul 19 2006, 09:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(dinam @ Jul 19 2006, 12:50)  По хорошему нельзя делать никаких шин с Z-состоянием внутри ПЛИС. Ерунда. Можно. Цитата Где-то это об этом совсем недавно читал, но вот где не могу вспомнить  . P.S. Нашел http://electronix.ru/forum/index.php?showtopic=16018Написано, что можно, и иногда полезно.
|
|
|
|
|
Jul 19 2006, 09:25
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 13-07-06
Пользователь №: 18 795

|
[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
|
|
|
|
|
Jul 19 2006, 09:45
|
Местный
  
Группа: Участник
Сообщений: 216
Регистрация: 26-05-06
Из: Коломна
Пользователь №: 17 479

|
Цитата(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е
|
|
|
|
|
Jul 19 2006, 11:41
|
Участник

Группа: Участник
Сообщений: 33
Регистрация: 13-07-06
Пользователь №: 18 795

|
Цитата(andrew_b @ Jul 19 2006, 13:45)  Ничего подобного. В Спартанах 1 и 2 и во всех Виртексах внутри есть тристабильные буферы (BUFE, BUFT). Могу ошибаться, мне так говорили когда учили, значит в этом соврали  Сам не имел на практике дела с сп1/2 и вертексом
|
|
|
|
|
Jul 19 2006, 12:52
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
СПАСИБО ВСЕМ! Оказалось сделать не универсальный блок лучше, так как такую логику изначально закладывал схемотехник, и проблема женерика сама собой отвалилась. (diman)Про шину в Z состоянии, в спартане 3е точно есть три стайт буферы, и 2 схемы на них сейчас прекрасно работают. Схема состоит из нескольких блоков в каждый входит данные и адрес, и шину данных каждый блок включает либо на выход либо в 3 состояние давая работать другим блокам. Проблем нет. А так написанная программа очень хорошо понятна и удобно масштабируется. Блоки добавляю, выкидываю все супер. (wild)Я вчера когда писал сообщение вспоминал что есть какие-то еще буквы, спасибо H и L это именно то что я хотел услышать. Про подтяжку в железе, это наверное про тип выхода, когда пины задаешь, но это было понятно, а вот как сделать тристейт буфер подтянутый к земле в плис, это был вопрос... но теперь понятно спасибо. (seven7)Про объяснения синтезатору... я не очень силен в тонкостях языка пока, потому если честно не очень понял что делает приведенный код. Но к счастью синтезатор сейчас меня понял как надо и я пока, если вас это не обидит, не буду разбираться в вашем описании. (diman)Про входы в воздухе..., в воздухе никто и не весит, 3 состояние нужно для устранения конфликтов с внешним устройством. Но согласитесь не всегда на схемах разумно ставить подтягивающие резисторы, потому что в том случае если вы держите подтянутую шину то через резистор течет ток, а если шина 32 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себе  ))) Про кейз и женерик. Я подумал вчера что логично, наверное, не давать работать кейзу с женериком, женерик может смениться, а это все таки не сигналы, и как развести кейз таблицу синтезатору... но сегодня когда писал что за ошибку дает синтезатор, обнаружил что ошибки больше нет, а есть только варнинг... Может быть потому что добавил значение адреса по умолчанию. К счастью на текущий момент вопрос кейза остро не стоит, так как блок перестал быть универсальным. В любом случае кейз заменяеться на иф...ифелсе, а они то уж нормально должны работать, наверное%)... А если стандарт говорит что кейз и женерик не совместимы, я склонен ему верить (стандарту) Огромное всем спасибо за потраченное на обсуждение темы время. П.С. писав эту тему на русском языке, у меня вдруг возникла мысль. А переведение шины в "третье" состояние, не является ли исторической ошибкой. То есть возможно имелось ввиду переведение шины в Z, состояние, которое на русском выглядит как З[Зе] состояние, именно букву "Зе" может и приняли за цифру три? Вот что мне подумалось...
|
|
|
|
|
Jul 20 2006, 01:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 415
Регистрация: 10-06-05
Из: Наукоград Кольцово(Новосибирск)
Пользователь №: 5 898

|
Цитата(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 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себе  ))) Для этого и придумали bus-hold  .
|
|
|
|
|
Jul 21 2006, 10:26
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(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 бита да и не одна, можно и процессор перенапрячь... (во всяком случае я так понял схемотехника, а ему я в этих вопросах больше доверяю чем себе  ))) Для этого и придумали bus-hold  . ну наверное мне это не грозит, на шине у меня всегда есть ДСПешник, который мастер и шину туды суды тягает, в третьем состоянии у меня только слайвы. Про логику интересный факт, если честно такое пока не встречали...
Сообщение отредактировал Golikov A. - Jul 21 2006, 10:27
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|