Продажа - это крайний выход...
Основная цель - применение по прямому назначению, т.е. идеальным вариантом был бы некий проект, который способен работать... например, звуковая карта или что-то аналогичное вплоть до гирлянд, часов и прочих таймеров!
Вид для печати
Народ,
подскажите, а есть ли способ , там прошивка какая тестовая или прямо из среды альтеры, возможность протестировать плисину на исправность ножек и всех ее вентилей, генераторов ?
Точно нету❗ Придётся ЛА3 на все ножки съимитировать
Не знаю для этой-ли темы вопрос.
Опыт в Верилоге и Квартусе очень маленький, корябаю в нём для хобби...
Моделирую простой модуль, для эмуляции микросхемы 74_245 (АП6).
Не могу понять, почему Шина дробится на буферы a[7], а[6:0], b[7], b[6:0], хотя ожидаются a[7:0] и b[7:0] ?
И что вообще обозначают эти "~0" и "~1" в названиях элементов?
Код модуля:
Скрытый текст
Код:module m74_245(
input wire oe,
input wire dir,
inout wire [7:0] a,
inout wire [7:0] b
);
assign a = oe ? 8'bzzzzzzzz : dir ? 8'bzzzzzzzz : b ;
assign b = oe ? 8'bzzzzzzzz : dir ? a : 8'bzzzzzzzz ;
endmodule
[свернуть]
Полученная схема во вложении.
Возможно "~0" это из серии "для примера как выглядит один из 8 сигналов".
ИМХО: квартус не первой свежести - может иметь свои причуды.
Вложение 77277
пдф - это SystemVerilog vivado
https://i.ibb.co/TKf81D1/245.png
ISE разукрасил вполне вменяемо :)
KTSerg, попробуйте так:
Есть ещё такой вариант:Код:assign a = (oe & ~dir) ? 8'bzzzzzzzz : b;
assign b = (oe & dir) ? 8'bzzzzzzzz : a;
Что любопытно, схема каждый раз разная, но количество занимаемых ячеек абсолютно одинаково.Код:wire [7:0] a1, b1;
assign a1 = dir ? 8'bzzzzzzzz : b ;
assign b1 = dir ? a : 8'bzzzzzzzz ;
assign a = oe ? 8'bzzzzzzzz : a1 ;
assign b = oe ? 8'bzzzzzzzz : b1 ;
ещё когда-то попадалось что OE (исходный вариант примера) рекомендовалось иметь той-же разрядности что выбираемые сигналы. Бредово звучит - но попадалось...
{8{oe}} (это работает гарантировано в sv)
Всем доброго времени суток!
Подскажите пожалуйста... имеются ли у кого интересные и полезные для ретро-хобби (или в быту, кроме АОН'ов) проекты использующие микроконтроллеры семейства 8031/8051 ?!
С уважением, Максим aka nimdasys_inbox_ru
Вот частотомер http://www.cqham.ru/fpic01.htm
Но 8031 это же не Плис, а микроконтроллер
Собирал такой в 90-х. Потом распаял за ненадобностью.
Приспичило мне подключить к борде Альтеры девайс с протоколом i2c.
Соответственно начал искать готовые примеры "мастера" на верилоге.
Изучение примеров шедших с бордой и найденных на просторах нета, привело к мысли, что найденные примеры "куцие"...
В закоулках памяти мелькает, что в протоколе i2c предусмотрено торможение мастера, если ведомый не успевает за тактовой частотой. Ведомый для этого зажимает в "0" линию SCL. И мастер ждёт пока эту линию не освободят.
А во всех примерах линия SCL чисто "output", а не "inout". Значит мастер (ПЛИС) не может следить за состоянием SCL, и если ведомый "тормозной", то сбоев не избежать...
Так его же несложно самому написать. Да, мастер обязан уметь понимать торможение. Это неотъемлемая часть протокола.
В продолжение темы про реализацию i2c.
Не могу понять, зачем нужно переводить выход в состояние "z" при чтении входных данных.
В даташите на Альтеру нашкрябано, что все выводы оснащены "ОК".
По идее, должно быть достаточно записать в выходной регистр "1", и если выход с "ОК", то можно спокойно читать вход (данные от внешнего источника).
Но в примерах реализации i2c, выходной регистр постоянно подключают/отключают от шины.
Без отключения от шины выходного регистра (при условии перевода его в "1"), реально не будет читаться внешний сигнал?
1) На какую именно Альтеру?
2) Физически, если говорить про Циклоны/Стратиксы, там нет ОК. Он именно, что эмулируется таким вот образом.
3) Если перевести выход в 1, то при подаче на него снаружи 0 будет конфликт. Поэтому его надо переводить в z и использовать подтяжку.
Мужики, кто может проконсультировать по Lattice ISP Lever v 1.8. В схематике, набросал схемку на "расыпухе", не могу понять - как пины назначить / привязать? Ужасный схемный редактор, в отличие от Альтеровского...
Serg6845, спасибо, вечером попробую.
Правильно ли я понял таблицы из даташита на ЦиклонIV:
1. Входная тактовая обязательно должна быть меандром, допустимое отклонение 45-55%.
Это значит, что нельзя использовать в качестве задающего, внешний сигнал, в котором соотношение импульс/пауза = 1/4, подать его на PLL и получить 400МГц для внутренних нужд ?
2. Какая вообще максимальная частота, на которой может работать ЦиклонIV ?
Нашел табличку в которой "PLL output" для С8 402,5МГц, и ещё одну "Clock Tree ..." для EP4CE6 402МГц.
402МГц - это и есть предел для логики EP4CE6 С8 ?
3. Для М9К есть таблица, для С8 указана частота 238МГц.
Это максимум для wrclock/rdclock M9K?
По цифрам похоже на другую строку таблицы (Table 1–25. PLL Specifications for Cyclone IV Devices) в даташите - tOUTDUTY Duty cycle for external clock output (when set to 50%)
А для fINDUTY Input clock duty cycle указано от 40 до 60 %
Но я бы еще обратил внимание на другую строку fIN Input clock frequency и минимальная там 5 MHz. Про возможную необходимость 12 МГц я уже писал.
Какие конкретно номера таблиц, и в каких документах?
Не проходит верификация записи прощивки ПЛИСины в epcs4.
Не могу понять, что делаю не так.
Так конвертировал:
https://disk.yandex.ru/i/XANmWmRm4oReoA
При верификации, получаю "Failed" :
https://disk.yandex.ru/i/aPGUPdQDsSm_Pw
Маркировки ПЛИС и epcs соответствуют.
Обычный sof в ПЛИС - заливается, а jic в epcs - нет.
А попробуй вместо ep4ce6 указать ep3ce6, у меня на ep4ce55 тоже jic файл щьётся с глюками, указываю ep3ce55, и все шьётся отлично.
Для начала, мне кажется, стоит проверить все сигналы м-у ПЛИС и РОМ на предмет наличия и залипушек, может обрыв где. А по предыдущему совету, проверить распиновку, если совпадает, то почему нет, алгоритмы прошивки РОМ через ПЛИС, думаю, не будут особо отличаться.
Вполне серьёзно, именно так и прошивал ром на ep4ce6 и ep4ce55. Крайний раз это делал вчера.
По размеру какого файла судить о размере прошивки? Хочу поставить EPCS1 вместо EPCS4 (ПЛИС EP4CE6E22), если влезет. Заливается POF, но у него заголовки и еще что-то. Тогда, SOF?
ну как бы "судить" надо по документации на саму плису. у xilinx есть "четкие" таблички в документации, где говорится реальный размер битового потока для программирования плисы. сам файл прошивки может быть в разы "толще" чем реальный размер - зависит от формата файла.
В ISE можно голый бинарь получить, правда, я не помню как, но точно можно.
Возможно, даже без лишних телодвижений, оно его куда то среди своих говен откладывает. :)
Мужики, подскажите, как Lattice ispLever, проектик на Verilig'е (от Altera EPM30/70), назначить номера пинов для GAL22V10 сигналам из этого файла?
Или там ещё чего "лопатить" придется?Код:module ProfROM(
oe_n, // /OE strobe
a, // address bus (a2..a15)
a16,a17 // output to ROM
);
input oe_n;
input [15:2] a;
output a16,a17; wire a16,a17;
reg [1:0] plane;
reg [1:0] newplane;
reg enable_switch;
assign a17 = plane[1];
assign a16 = plane[0];
always @*
begin
if( a[15:4] == 12'b100000010000 )
enable_switch <= 1;
else
enable_switch <= 0;
end
always @*
begin
case( {a[3:2],plane[1:0]} )
4'b0000:
newplane <= 0;
4'b0001:
newplane <= 1;
4'b0010:
newplane <= 2;
4'b0011:
newplane <= 3;
4'b0100:
newplane <= 3;
4'b0101:
newplane <= 3;
4'b0110:
newplane <= 3;
4'b0111:
newplane <= 2;
4'b1000:
newplane <= 2;
4'b1001:
newplane <= 2;
4'b1010:
newplane <= 0;
4'b1011:
newplane <= 1;
4'b1100:
newplane <= 1;
4'b1101:
newplane <= 0;
4'b1110:
newplane <= 1;
4'b1111:
newplane <= 0;
endcase
end
always @(posedge oe_n)
begin
if( enable_switch==1 )
begin
plane <= newplane;
end
end
endmodule
И ещё вопрос - триггер ТМ2 (7474) каким символом можно заменить? У Lattice очень "бедный" набор символов стандартной TTL-логики...
Камрады, не знаю, куда отнести этот вопрос, может в тему для начинающих, но все же...
Есть цель: освоиться с FPGA, ибо до этого с ними дел почти не имел. Пока для начала хочется рассматривать FPGA как очень жирную CPLD (то есть без всех ее специфических возможностей) - возможно ли это ? Ну то есть при одинаковых питаниях всех ее "частей" считать все ноги условно равнозначными и работать так, как это делалось бы для CPLD cерий max3000 или maxII ? Или будет обязательно тонна граблей, которые необходимо знать заранее ?
Сейчас прицел на что-то доступное, дешевое, античное и 5в-толерантное, например Altera ACEX ep1k30, полагаю, что его проще всего сопрягать с привычными нам железяками из ретро-мира.
Как я успел понять, только у FPGA современнее циклонов возможно просто навесить конфигурационное ПЗУ (spi flash ?) и просто заливать их через JTAG, чувствуя себя примерно так, как при работе с flash-based CPLD. У ACEX какой-то свой интерфейс конфигурационной памяти ASMI, да и память не вся одинаковая (напр. epc1* одноразовые). И шьется она совсем не так - вот на эту тему просветите пожалуйста в двух словах (или двух ссылках). А лучше, если есть какой-то пример схемы девборды на ACEX с конфигурационной памятью и процедурой заливки оной
Спасибо.
valerium
Упрощенно можно считать FPGA как большую CPLD.
Грабли с выводами начинаются, например, когда используете дифф. сигналы (типа HDMI), также часть выводов могут работать только на вход или иметь специфические функции - поэтому необходимо тщательно и полностью читать справочный лист на чип.
5-вольтовые Альтеры сильно устарели, отсюда могут быть проблемы с доступностью, в т.ч. плат разработчика. Циклоны успешно сопрягаются с 5-в чипами через преобразователи уровней.
Прошивка у циклонов может зашиваться в конфпзу EPCS1(4,16) - через jtag записывается прошивка, которая заливает в конфпзу вашу прошивку. Тут все описано и есть схема https://kit-e.ru/memory/programmirovanie-pzu-po-jtag/. Такой вариант позволяет избежать переключателей.
Я бы начал с дешевых плат на 2 или 4 циклоне - их на Али навалом.
У ACEX прошивка грузится через интерфейс Passive Serial (конфпзу EPC1, например и они не одноразовые вроде) - тактовая идет от конфпзу. На циклонах есть режим Active Serial (EPCS1) - тактовая идет от Циклона.
Вот как раз старыми сериями хотелось уйти от преобразователей. Ну или пока просто казалось, что так будет проще )
Получается, что конфПЗУ EPC в режиме passive serial - по сути самостоятельный контроллер, который в процессе загрузки конфигурации является мастер-устройством ? Усмотрел тут, что у пентэвы он сэмулирован атмегой, которая читает файл конфигурации с карты, да и вообще это, оказывается, распространенное решение. Осталось найти какое-нибудь открытое решение )Цитата:
У ACEX прошивка грузится через интерфейс Passive Serial (конфпзу EPC1, например и они не одноразовые вроде) - тактовая идет от конфпзу. На циклонах есть режим Active Serial (EPCS1) - тактовая идет от Циклона.
А EPCS в active serial - получается просто SPI flash ? Памятью 25й серии, поди, можно заменить ?
Кстати, а если тактовая от FPGA поступает, то в боевом режиме (без программатора) загрузка конфигурации в такую FPGA без правильно подключенного к ней генератора невозможна ? Или для загрузки конфигураций в них есть какой-то внутренний генератор ?
Прочитал про SFL, который квартус скрытно реализует в процессе загрузки перед заливкой собственно памяти - так вон почему с циклонами все так просто, оказывается ! То есть он не "само по себе работает", а просто квартус программер имеет конфигурации-загрузчики для всех поддерживаемых устройств и сам их нужные подсовывает. Красиво !