Author |
Message |
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Хотя нет, BUSY - это же регистр, а значит он все-таки по следующему клоку должен
|
07 Dec 2017 02:18 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Ну не похоже это на ISA... Для начала, как уже говорил, фаза CLK перевернута. Далее, почему адрес порта задается только 10 битами, тогда как у 8088 - 16-ью ?
|
07 Dec 2017 02:37 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Бази это регистр, и выход у него изменится только к следующему клоку Так что всё ок, пробуй мой вариант
|
07 Dec 2017 02:50 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Согласен - если помещается, то вроде МОЖЕТ решить проблему. Просто все равно будет зависеть от тактовой частоты SPI. А притормаживание до высокого уровня CLK процессора от этого не зависит...
|
07 Dec 2017 06:15 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Лезет все. И вариант DimkaM и, дополнительно, вариант newold86. Вечером попробую.
|
07 Dec 2017 06:20 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
DimkaM молодец, осваиваешь ХДЛ!
_________________ привет засранцу лавру :)
Last edited by angry_troll on 07 Dec 2017 11:09, edited 1 time in total.
|
07 Dec 2017 07:54 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Результаты неоднозначные. Сперва попробовал код DimkaM - SPI сходит с ума, шлет в MISO пургу даже когда в порт нет записи. Потом запаял на пин SysClk. Попробовал свой старый код с третьей страницы с добавлением в условие где BUSY SysClk - if (~nCS & ~nWR & ~Adr & SysClk), как советовал newold86 - стало лучше, гораздо, но все равно из дести байт штуки 3 битые. Потом начал комбинировать.... То места нет, то не может путь проложить. Ужас. Пришлось выпилить один разряд из делителя, вернутся к делению на 16. В принципе, для DS1347 RTC должно быть нормально, он даже на 4 MHz может. Ввел регистр DWR, чтоб пропустить один клок перед защелкиванием адреса. Сейчас такой код: | | | | Code: module MX2_CPLD( // Системные input Clk, // Входная частота 14.31818 МГц input Res, // Входной сигнал сброса, активный уровень лог.0 input nRD, // Вход строба чтения input nWR, // Вход строба записи input nCS, // Вход выбора контроллера input Adr, // Вход адреса данные/управление inout [7:0]Dat, // Шина данных input SysClk, // System clock CPU // SPI output nSEL, // Выходной сигнал выбора карты output reg SCK, // Выход тактовой частоты SPI input MISO, // Вход данных SPI output MOSI, // Выход данных SPI output nRED, // Выход управления красным светодиодом input nINS // Вход датчика вставления карты ); // Внутренние регистры reg [3:0]Pre; // Делитель частоты reg [2:0]Ctrl; // Регистр управления reg [7:0]Data; // Регистр данных reg [2:0]Bits; // Счетчик сдвигаемых бит reg RMISO; // Защелка сигнала MISO reg BUSY; // SPI занят передачей reg DWR; // Комбинаторика 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[3:0] <= Pre[3:0] + 4'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; DWR <= 1'b0; end else begin // Состояние SPI if (BUSY) begin // Делитель частоты if (((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; //DWR <= 1'b1; // Запись в регистр данных возможна только если SPI не занят if (~nCS & ~nWR & ~Adr & SysClk) begin DWR <= 1'b1; end else if (DWR) begin Data[7:0] <= Dat[7:0]; DWR <= 1'b0; BUSY <= 1'b1; end end end end // Конец endmodule | | | | |
Результаты - пока не понял сам. Вроде бы почти работает. Но иногда вроде 1 байт из ста битый. Или....
|
07 Dec 2017 09:53 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
Вот этот вот SPI из http://nedopc.com/zxevo/zxevo.php работает без глюков в тысячах плат. http://svn.zxevo.ru/filedetails.php?rep ... on%2Fspi.v Но это так, на всякий случай. Скорее всего не подойдёт вам.
_________________ привет засранцу лавру :)
|
07 Dec 2017 09:59 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?
|
07 Dec 2017 09:59 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Так завтра и поступлю. А пока теряет все равно некоторые байты. Как на записи, так и на чтении. Но немножко пообщался с карточкой, почитал сектора... Но это конечно не работа.
|
07 Dec 2017 12:23 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Я насчитал 6 уровней вложенности условий. одно условие это как минимум через один элемент должен пройти сигнал. Представляете какая это задержка сигналов? Надо избавляться от этого, разбить на несколько блоков.
|
07 Dec 2017 22:09 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Есть возможность снять лог сигналов nCS Addr nWR CLK и dat[0] ?
|
08 Dec 2017 03:18 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Не знаю, если не заработает, распаяю нафиг эту плату
|
08 Dec 2017 07:09 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Попробовал, клок завел с SysClk. Теперь вроде пишет правильно, но читает с ошибками. Я не уверен, правильно ли я тестирую, но я закоротил MISO и MOSI и сверяю то что записал с тем что прочитал.
|
08 Dec 2017 10:09 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Закономерность в ошибках видна ? В первую очередь, не портится ли первый или последний принятый бит ?
|
08 Dec 2017 10:41 |
|
|