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

Подскажите пожалуйста как в EPM3128ATC144-5 (Altera)
реализовать двунправленную 8ми битную шину данных ???

это мне нужно для записи чтения байта из внешнего статического ОЗУ

Я делаю так
1.Обозначаю выводы как (BIDIRС) которые непосредственно идут на выводы
(d0..d7) микросхемы.

2.внутри схемы подводит данные порт реализованный на эквиваленте 1533ИР23
3.а выводит 1533ИР27 (если поставить ир23 то ругается компилятор)

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

а если исключить из схемы выводы которые идут на м икросхему памяти , тоесть игнорировать ее на время ,чтобы просто проверить передачу байта из регистра в регистр, то компилятор MaxPlus начинает ругаться на то что входы ИР27 оказались подключенными к выходам ИР23 , мол выходы ир23 должны быть подсоеденены только к BIDIRC
sazh
Я чем просто BIDIR не устраивает?
maior
в какой системе ведется проектирование?
Может проще воспользоваться библиотекой LPM модулей (tri-state buffer, etc)
или HDL (AHDL,VHDL,Verilog)?
_ZeroCold
Цитата(sazh @ May 5 2006, 16:48) *
Я чем просто BIDIR не устраивает?


не совсем понял суть вопроса ???
если про отличие BIDIR от BIDIRC то я и так и так пробывал , всеравно читается не то что выводится

даже если взять и считать во входной регистр не переводя выходной регистр в третье сотояние , то читается совсем не то что выводится !!!


Цитата(maior @ May 5 2006, 16:54) *
в какой системе ведется проектирование?
Может проще воспользоваться библиотекой LPM модулей (tri-state buffer, etc)
или HDL (AHDL,VHDL,Verilog)?



Проектирование ведется в графическом редакторе встроенном в MaxPlus II
динственное что я нашел более менее на взгляд пригодное это LPM-BUSTRI (наверное это и имелось ввиду) но в этом варианте возникает проблема как подвести байт с шины result (LPM-BUSTRI)
к регистру ???
коспилятор все время ругается и говорит что эта шина должна быть подключена к трехстабильным элементам

а Так бы все было бы супер , токо вот незнаю к какому мне регистру подключится для чтения байта

Цитата(_ZeroCold @ May 5 2006, 17:05) *
Цитата(sazh @ May 5 2006, 16:48) *

Я чем просто BIDIR не устраивает?


не совсем понял суть вопроса ???
если про отличие BIDIR от BIDIRC то я и так и так пробывал , всеравно читается не то что выводится

даже если взять и считать во входной регистр не переводя выходной регистр в третье сотояние , то читается совсем не то что выводится !!!


Цитата(maior @ May 5 2006, 16:54) *
в какой системе ведется проектирование?
Может проще воспользоваться библиотекой LPM модулей (tri-state buffer, etc)
или HDL (AHDL,VHDL,Verilog)?



Проектирование ведется в графическом редакторе встроенном в MaxPlus II
динственное что я нашел более менее на взгляд пригодное это LPM-BUSTRI (наверное это и имелось ввиду) но в этом варианте возникает проблема как подвести байт с шины result (LPM-BUSTRI)
к регистру ???
коспилятор все время ругается и говорит что эта шина должна быть подключена к трехстабильным элементам

а Так бы все было бы супер , токо вот незнаю к какому мне регистру подключится для чтения байта





Для более точной ясности вылаживаю файл проекта , при такой схеме компилятор не ругается но читаестя во входной порт не то что выводится в выходной порт !!!
vetal
LPM_BUSTRI - то что вам нужно.
Возьмите MegaWizard и создайте нужную вам конфигурацию.
Выход с 3-м состояниям подсоедините к ногам, на result получите данные снятые с ножек, а на data будете подавать то, что вы ходите передать. Направлением передачи управляйте в соответствии с вашим алгоритмом.
Alex11
Досточтимые сэры, вы бы хоть на диагностику смотрели. Там ошибка в 74374 N 7 - это тот, который стоит на входе с шины и работает на 74157 - там нельзя ставить деталь с тристабильным выходом, тем более, что он там и не нужен.
_ZeroCold
Цитата(Alex11 @ May 5 2006, 20:33) *
Досточтимые сэры, вы бы хоть на диагностику смотрели. Там ошибка в 74374 N 7 - это тот, который стоит на входе с шины и работает на 74157 - там нельзя ставить деталь с тристабильным выходом, тем более, что он там и не нужен.


Я заменил 374 на 377(ИР27) она без тристабильных выходов и то же самое
_ZeroCold
Цитата(vetal @ May 5 2006, 18:48) *
LPM_BUSTRI - то что вам нужно.
Возьмите MegaWizard и создайте нужную вам конфигурацию.
Выход с 3-м состояниям подсоедините к ногам, на result получите данные снятые с ножек, а на data будете подавать то, что вы ходите передать. Направлением передачи управляйте в соответствии с вашим алгоритмом.


Прошу прощение может быть за делитантский вопрос , а что значит сконфигурировать ???
у меня MegaWizard спросил только ширину шины и Bidirect/Undirect и все , после этого он сгенерил новый примитив LPM_BUSTRA который ведет себя точно также как и его родитель LPM_BUSTRI
или имеется ввиду что переписать исходный текст LPM_BUSTRI ???

я впринцыпе пробывал и то и другое
если просто переконфигурировал то компилятор ругается что к result должна быть подключена тристабильная шина!!!
Когда переписал исходник (LPM_BUSTRI) то читается всравно не то что пишется !!!
причем как то странно если писать число 0xFF или 0x7F то и читается то же ,а вот если чтото другое
даже 0x00 то читается совсем иное

исходник я переправил так:



PARAMETERS
(
LPM_WIDTH
);

SUBDESIGN lpm_bustri
(
tridata[LPM_WIDTH-1..0] : BIDIR;
data[LPM_WIDTH-1..0] : INPUT = VCC;
enabletr : INPUT = VCC;
enabledt : INPUT = VCC;
result[LPM_WIDTH-1..0] : OUTPUT;
)

VARIABLE
% Are the enable inputs used? %
IF (USED(enabledt)) GENERATE
dout[LPM_WIDTH-1..0] : TRI;
END GENERATE;
% IF (USED(enabletr)) GENERATE
din[LPM_WIDTH-1..0] : TRI;
END GENERATE;%

BEGIN

ASSERT (LPM_WIDTH > 0)
REPORT "Value of LPM_WIDTH parameter value must be greater than 0"
SEVERITY ERROR
HELP_ID LPM_BUSTRI_WIDTH;

ASSERT (USED(enabledt) & USED(data))
REPORT "lpm_bustri function requires data[] port -- Altera recommends using the TRI primitive instead"
SEVERITY ERROR
HELP_ID LPM_BUSTRI_DATA;

% Connect buffers if they are used %
IF (USED(enabledt)) GENERATE
dout[].oe = enabledt;
dout[] = data[];
tridata[] = dout[];
END GENERATE;

IF (USED(enabletr)) GENERATE
% din[].oe = enabletr;
din[] = tridata[];
result[] = din[];%
result[] = tridata[];
ELSE GENERATE
result[] = tridata[];
END GENERATE;
END;




Ктото практически делал двунаправленную шину на чипе EPM3128ATC144-5 (Altera) ???
Alex11
Ну как же то же самое, когда все работает с точностью до требуемого. Вот правильный файл с диаграммами. Я попутно удалил лишний пин (lpt_pin16), наложенный на lpt_pin1 и немного раздвинул провода, чтобы можно было понять, что куда идет.
Нажмите для просмотра прикрепленного файла
_ZeroCold
Всем большое спасибо за помощь , все работает
ошибка была в заниженном питании микросхемы !!!
точнее для нее то нормально было а вот для LPT порта мало для еденицы !!!
вот и был трабл с инверсным битом регистра сотояния !!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.