|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Last visit was: 15 Jun 2024 19:41
|
It is currently 15 Jun 2024 19:41
|
ISA-8 SD-контроллер (SPI) на CPLD
Author |
Message |
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
А это как? Еще бы место было ((
|
06 Dec 2017 11:49 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Еще бы - два разных процесса пытаются писать в одно место, так нельзя. В любом случае, я уверен, что проблема ясна, и полярность clk вообще ничего не изменит в общем случае. В частном, если фазы clk и тактирования процессора жестко связаны, может и изменить. Проблема в том, что очень ограничено место в CPLD - варианты исправления, которые я могу предложить, вряд ли поместятся...
|
06 Dec 2017 11:51 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Писать нужно не по clk, а по подъему nWR, но это в рамках процесса не сделать. В своей реализации SPI я кошмарно намутил с флагами, чтобы подобные места работали. Потом перевел на FSM - стало читабельно, но слегка больше по объему.
|
06 Dec 2017 11:55 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
В схемах с ВМ80 это работает, потому что там к моменту спада nWR на шине данных уже все есть. Кстати, и с 8088 тоже работало бы, если бы на ISA приходил nIOWC, а не nAIOWC...
|
06 Dec 2017 11:59 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Спасибо, понятно... Нет пути.
|
06 Dec 2017 12:10 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Фиг знает как выкручиватся, места нету совсем. Попробуй так чтоли | | | | Code: module MX2_CPLD( // Системные input Clk, // Входная частота 14.31818 МГц input Res, // Входной сигнал сброса, активный уровень лог.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 [4: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[4:0] <= Pre[4:0] + 5'h1; // Запись в управление может происходить асинхронно if (~nCS & ~nWR & Adr) Ctrl[2:0] <= Dat[2:0]; // Сигнал сброса имеет приоритет вне зависимости от выбранной скорости if (Res) 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 (Bits[2] & Bits[1] & Bits[0]) begin Bits[2:0] <= 3'h0; Data[7:0] <= Dat[7:0]; end else if (((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 // Обнуляем счетчик бит // Запись в регистр данных возможна только если SPI не занят if (~nCS & ~nWR & ~Adr) begin BUSY <= 1'b1; end end end end // Конец endmodule | | | | |
|
06 Dec 2017 12:13 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Для начала, можно попробовать вместо OSC взять с ISA сигнал CLK - скорее всего, заработает
|
06 Dec 2017 12:17 |
|
|
PVV
Doomed
Joined: 12 Feb 2016 13:39 Posts: 463
|
можно же IOW задержать на пол такта CLOK, а одну LE взять из входного делителя, если они уже все израсходованы, по крайней мере для проверки точно можно одну найти...
|
06 Dec 2017 12:27 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
да там делитель вообще не нужен. каждый такт инвертировать состояние sck и всё Пониженная частота не нужна, любая сд-карта заводится на 7мгц, проверено сотней(активных) пользователей Пентевы и з-контроллера в частности.
|
06 Dec 2017 12:38 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Вообще слишком большая глубина вложенности условий. Соответственно большие задержки. Надо раскидывать на меньшие блоки.
Только чуть что тронешь, сразу ругается "макроцелов не хватает сроутить не могу"
|
06 Dec 2017 12:54 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Если заработает, то следующим шагом можно вернуть OSC в качестве тактовой, а CLK использовать для отодвигания момента записи путем замены строчки на Может, поместится в CPLD... Это вообще для какого процессора картинка ? По крайней мере, такты 808x начинаются с низкого уровня:
You do not have the required permissions to view the files attached to this post.
|
06 Dec 2017 22:50 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Спасибо всем, вечером попробую. Мне нравится вариант DimkaM, с помощью него отодвинем защелкивание на один Clk, и если влезет еще добавим и высокий Clk, как советует newold86. Делитель не хотелось бы убирать, так как есть теоретическая задумка использовать второй SPI для чего-то вроде RTC, которые явно офигеют от 7+ MHz.
|
06 Dec 2017 23:42 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
|
07 Dec 2017 00:02 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 709 Location: WWW
|
Если честно, то я не понял, как это отодвигание должно работать... И предлагаемый мною вариант вроде самодостаточен, больше ничего не нужно
|
07 Dec 2017 00:36 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Да, ведь это не последовательное выполнение... Если там внизу BUSY установится, то код выше сразу наверное отработает, а не "в следующем цикле". Буду SYSCLK заводить и пробовать по методу newold86. Если влезет
|
07 Dec 2017 01:44 |
|
Who is online |
Users browsing this forum: Claude AI [Bot] and 6 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|