Цитата(sazh @ Jun 11 2007, 12:30)

Так вот при включенном указании компилятору этот буфер tri в open-drain buffer, если он есть. Я это так понимаю.
Мне кажется у Вас есть ошибка. Вы хотите внешнюю шину по третьему состоянию. Вы это делаете.
assign db = (dir & !oe_n) ? da : 8'hzz;
Такое описание не подходит, по моему мнению, к Auto Open-Drain Pins logic option
Потому что Вы требуете три состояния на шине 0,1, z.
ОЗУ имеет буфер с тремя состояниями, считаю, что FPGA должен ему выдавать 0, 1, z.
Я изменял опцию Assign-> Global Project Logic Synthesis -> Automatic Open-Drain Pins, но это ничего не меняло.
Но появилось новое обстоятельство. Мой проект выполнен в *.gdf, и включает sim-элемент PCI-ядра и sym-элемент с собственной логикой управления на Verilog (он управляет в том числе и ОЗУ). При этом все выводы FPGA были подключены к обоим эти элементам. Я удалил из sym-элемента управления примитив TRI aaa(DATA, OE, IO), который формирует шину данных IO для ОЗУ, а эту, и только эту функцию шины данных реализовал на отдельном графическом примитиве tri из библиотеки c:\maxplus2\max2lib\prim. В итоге все заработало, почти так как надо, т.е. в теперь ОЗУ записываются и считываются разные массивы информации из PCI интерфейса компьютера.
Выходит, что на HDL уровне не проходило, а в графике идет. Конечно, можно было бы подняться на Quartis II, но там, что-то это PCI-ядро компилится с ошибками. Вынужден пока работать в МАХ+.
Вопросы о двух типах буферов в одном FPGA еще остались. Не ясно как переходить от одного буфера к другому и обратно, не понятно почему запрещено assign db = (dir & !oe_n) ? da : 8'hzz; вроде как общепринятая в Verilog конструкция. Жаль, микросхема старовата, на ней сейчас видно уже мало кто работает.