Ctrl[1] это бит скорости. И по сбросу он =0, поэтому не маскирует старшие биты делителя. Это же видно по симуляции. А потом, ты туда 1 записал и понеслась на ускоренном. Не забудь этот бит добавить внутрь скобок к уже имеющимся.
Ctrl[1] это бит скорости. И по сбросу он =0, поэтому не маскирует старшие биты делителя. Это же видно по симуляции. А потом, ты туда 1 записал и понеслась на ускоренном. Не забудь этот бит добавить внутрь скобок к уже имеющимся.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Спаял - не работает
Извиняюсь за офтоп со своим IBM XT, если грубо нарушаю, то может быть отрезать в другой раздел или, не знаю. Простите модераторы.
Просто посылка 10 байт от 1 до 10 выглядит так:
В цикле послал байт в порт данных, жду пока сбросится BUSY в порту управления/статуса, шлю следующий. С другой стороны, если ПО "извне" игнорит BUSY и лупит подряд в порт данных, то передаются только "хорошие байты", но остальные есстественно теряются. Из тех же 10-ти байт передаются три нормальных байта - 0x03,0x05,0x09 (к примеру).
Код сейчас такой:
module MX2_CPLD(
// Системные
input Clk, // Входная частота 14.31818 МГц
input nRes, // Входной сигнал сброса, активный уровень лог.0
input nRD, // Вход строба чтения
input nWR, // Вход строба записи
input nCS, // Вход выбора контроллера
input Adr, // Вход адреса данные/управление
inout [7:0]Dat, // Шина данных
// SPI
output nSEL, // Выходной сигнал выбора карты
output reg SCK, // Выход тактовой частоты SPI
input MISO, // Вход данных SPI
output MOSI, // Выход данных SPI
output nRED, // Выход управления красным светодиодом
input nINS // Вход датчика вставления карты
);
// Внутренние регистры
reg [5:0]Pre; // Делитель частоты
reg [2:0]Ctrl; // Регистр управления
reg [7:0]Data; // Регистр данных
reg [2:0]Bits; // Счетчик сдвигаемых бит
reg RMISO; // Защелка сигнала MISO
reg BUSY; // SPI занят передачей
// Комбинаторика
assign nSEL = ~Ctrl[0]; // Выбор карты
assign nRED = ~Ctrl[2]; // Красная лампочка
assign MOSI = Data[7]; // Выход MOSI SPI
assign Dat[7:0] = (~nCS & ~nRD) ?
(Adr) ? {~nINS,BUSY,3'h0,Ctrl[2:0]} : Data[7:0]
: 8'hZZ;
// Синхронная логика
always @(posedge Clk) begin
// Делитель частоты
Pre[5:0] <= Pre[5:0] + 6'h1;
// Запись в управление может происходить асинхронно
if (~nCS & ~nWR & Adr) Ctrl[2:0] <= Dat[2:0];
// Сигнал сброса имеет приоритет вне зависимости от выбранной скорости
if (~nRes)
begin
// Сброс действует на эти регистры
Ctrl[2:0] <= 3'h0;
Bits[2:0] <= 3'h0;
BUSY <= 1'b0;
SCK <= 1'b0;
end else begin
// Состояние SPI
if (BUSY)
begin
// Делитель частоты
if (((Pre[5] & Pre[4] & Pre[3] & Pre[2] & Pre[1]) | Ctrl[1]) & Pre[0])
begin
// SPI работает
if (SCK)
begin
// Сбрасываем такт
SCK <= 1'b0;
// Спад, поэтому сдвигаем
Data[7:0] <= {Data[6:0],RMISO};
// Считаем биты
Bits[2:0] <= Bits[2:0] + 3'h1;
// Это был 7й бит?
if (Bits[2] & Bits[1] & Bits[0]) BUSY <= 1'b0;
end else begin
// Устанавливаем такт
SCK <= 1'b1;
// Это фронт, поэтому сэмплируем вход
RMISO <= MISO;
end
end
end else begin
// Обнуляем счетчик бит
Bits[2:0] <= 3'h0;
// Запись в регистр данных возможна только если SPI не занят
if (~nCS & ~nWR & ~Adr)
begin
Data[7:0] <= Dat[7:0];
BUSY <= 1'b1;
end
end
end
end
// Конец
endmodule[свернуть]
Из изменений - убран зеленый светодиод, делитель на 32, Res активный по высокому уровню. Вроде все.
Вот еще меня смущает вопрос о назначении пинов (pin assigment). Там у epm3032 вроде нет разных банков IO, и я думал сначала что вообще пофигу, какой пин куда назначать. Но как оказалось - не пофигу. Я хотел сигналы SD вывести на "правую" сторону EPM, назначил их, но квартус при компиляции стал ругаться на тему что-то не может проложить (найти) путь от пина (или сигнала) такого-то до пина такого-то. Ладно, распихал пины более-менее последовательно, начиная с первого и до какого-то, скажем 27. Ругаться перестал и стал компилироваться. Странно, я такого не ожидал.
И еще опять по пинам. У EPM3032 есть "глобальные" пины - Global Clock. Туда приходит OSC 14,3 MHz, это Clk у меня. Дальше есть еще Global Clear - это у меня Res и Global OE - это у меня nCS. И есть еще Ded. input (pin 2). Я туда nRD посадил. В то время как nWR у меня на обычном IO пине. Думаю не может здесь что-то такого быть. Может лучше nRD то же на обычный IO повесить?
Половина шины данных оказалась в B.....
[свернуть]
Tronix, ну а вопрос то в чем?
Tronix, не замарачивайся с распределением пинов. Глобальные лучше по назначению. Если программа ругается предупреждениями это не критично. Главное чтобы не было ошибок. Где какой банк используется я никогда не обращал внимания. Вот с этим проектом при переописании я сталкнулся с глюками. Потом мне подсказали, что не задействованные пины нужно переводить в третье состояние. И всё стало нормально работать.
Там я есть легенда цвета светодиодов:
RED - сигнал обращения к карте ("0" - активация светодиода) - Operate;
GREEN - сигнал вставленной карты ("0" - активация светодиода) - Insert.
Можно, кстати, применить инверсную логику, как в свичах: не горит - нет карты, горит - карта вставлена и не работает, мигает - карта работает. Тогда хватит одной лампочки, высвободится регистр (и одна LE).
Я так не совсем и понял, достаточно ли ПЛИС EPM7032SLC44 или всё же нужна EPM7064SLC44 ?
Если достаточно - то не могли бы выложить прошивку?
И какие нужно сделать изменения на плате МХ2 от perestoronin ?
http://zx-pk.com/forum/viewtopic.php?f=7&t=466
Нужно было внимательнее читать тему. С ходу отвечу: на схемном вводе проект влезает только во вторую, на языке vhdl - в первую, т.е. требуется меньше ячеек. Я вроде пробовал оба варианта - работают.
Всё ж надо проштудировать всю тему, мне лень. Если не найдёшь - попроси ещё раз - сварганю.
Указанная плата - версии 2.2. Я допаивал держатель карты с деталями на монтажное поле платы версии 2.0. Вроде фото платы выкладывал - не сохранилось.
Опишу здесь по схеме: главное сначала разместить держатель карты на монтажном поле. К его выводам по схеме подпаять резисторы. Резисторы со светодиодами разместить где угодно, можно вне платы. Стабилизатор 5В -> 3,3В с обвязкой тоже где-нибудь разместить поблизости.
А можно вообще по современному - купить у китайцев плату, можно даже с держателям microSD карты. В этом случае всё на схеме (кроме светодиодов с их резисторами) уже есть, стабилизатор не нужен, модуль своими контактами припаивается сразу на выводы панельки плисины и плюс два вывода на питание.
Последний раз редактировалось fifan; 18.12.2017 в 21:41.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)