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: 707 Location: WWW
|
Еще бы - два разных процесса пытаются писать в одно место, так нельзя. В любом случае, я уверен, что проблема ясна, и полярность clk вообще ничего не изменит в общем случае. В частном, если фазы clk и тактирования процессора жестко связаны, может и изменить. Проблема в том, что очень ограничено место в CPLD - варианты исправления, которые я могу предложить, вряд ли поместятся...
|
06 Dec 2017 11:51 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Писать нужно не по clk, а по подъему nWR, но это в рамках процесса не сделать. В своей реализации SPI я кошмарно намутил с флагами, чтобы подобные места работали. Потом перевел на FSM - стало читабельно, но слегка больше по объему.
|
06 Dec 2017 11:55 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 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: 707 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: 707 Location: WWW
|
Если заработает, то следующим шагом можно вернуть OSC в качестве тактовой, а CLK использовать для отодвигания момента записи путем замены строчки на Может, поместится в CPLD... Это вообще для какого процессора картинка ? По крайней мере, такты 808x начинаются с низкого уровня:
|
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: 707 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 |
|
|