реклама на сайте
подробности

 
 
> inout шины в Verilog, для MAX+plus II
Волощенко
сообщение Jun 8 2007, 08:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Привет всем!
Есть двунаправленная шина ввода-вывода для FPGA типа FLEX10KA, с декларацией на Verilog как:
inout [31:0] IO;
MAX+plus II запретил применить следующую запись (выдача DATA единицей на OE):
assign IO = OE ? DATA : {32{1'bz}};
а вместо неё рекомендовал применить примитив TRI (с тремя состояниями) или OPNDRN (открытый коллектор).
Тогда, следуя рекомендациям, и используя TRI, получил:
TRI aaa(DATA, OE, IO);
Однако, на выходах IO почему-то всегда нули, хотя код на DATA есть, что проверил контрольным считыванием по центру сигнала OE (его длительность 30нс), во вспомогательные регистры R1 и R2:
always @ (posedge CLK) R1<=DATA;
always @ (posedge CLK) R2<=IO;

Аналогичная ситуация с использованием OPNDRN, с конструкцией:
assign DATAx = OE ? DATA : {32{1'b1}};
OPNDRN bbb(DATAx, IO);
При этом была установлена опция "Automatic Open-Drain Pins"

Вопрос: Кто сталкивался с подобным, почему так происходит, почему не выдается информация в шину?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sazh
сообщение Jun 8 2007, 20:37
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



У всех кристаллов ест буфера по третьему состоянию. Мало кристаллов. у которых есть открытый сток. если память не изменяет это например семейство 7000 (CPLD). Что Вам нужно, то и реализуйте.
И то и другое должно работать. У Вас есть предупреждение. Устраните его и все заработает.
module ap6 (da, db, oe_n, dir);
inout [7:0] da;
inout [7:0] db;
input oe_n;
input dir;


assign db = (dir & !oe_n) ? da : 8'hzz;
assign da = (!dir & !oe_n) ? db : 8'hzz;

endmodule
Go to the top of the page
 
+Quote Post
Волощенко
сообщение Jun 11 2007, 07:07
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 16-02-06
Из: г.Николаев, Украина
Пользователь №: 14 377



Спасибо за ответ!
Я восстанавливаю программу для FLEX 10KA, написанную N-цать лет назад. На плате, FPGA связана шиной данных с Cache-RAM 32к*32 (IDT71V432), и на шине нет pull-up резисторов. Если FLEX 10KA имеет буферы с тремя состояниями, то явно промах мой, а если только буферы с открытым стоком - то разработчика этой платы. Если есть обе возможности, то не ясно, как переходить от одной к другой, опять же в документации на этом не акцентировали.
Я выдаю в шину код данных и проверяю его в этот момент контрольным считыванием во вспомогательный регистр, который потом просматриваю. Но пока получается, что на шине только нули.

Контекстная помощь для MAX+ дает такие разъяснения:
Help -> Verilog HDL -> Primitive -> TRI:
In ACEX 1K, FLEX 10K, and MAX 7000S projects, some configurations of TRI primitives and other logic are automatically converted into OPNDRN buffers.

Help -> Verilog HDL -> Primitive -> OPNDRN:
The OPNDRN primitive is supported only for the ACEX 1K, FLEX 10K , MAX 3000A, MAX 7000A, MAX 7000B, MAX 7000AE, and MAX 7000S device families; it is converted to an equivalent TRI primitive for other devices.

Из которых не ясно, присутствуют ли в FLEX 10KA оба типа буферов или только один.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016