ISA-8 SD-контроллер (SPI) на CPLD
Moderator: Shaos
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Хотя нет, BUSY - это же регистр, а значит он все-таки по следующему клоку должен
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
Ну не похоже это на ISA... Для начала, как уже говорил, фаза CLK перевернута. Далее, почему адрес порта задается только 10 битами, тогда как у 8088 - 16-ью ?DimkaM wrote:ISAnewold86 wrote:
Это вообще для какого процессора картинка ? По крайней мере, такты 808x начинаются с низкого уровня:
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: ISA-8 SD-контроллер (SPI) на CPLD
Бази это регистр, и выход у него изменится только к следующему клоку
Так что всё ок, пробуй мой вариант
Так что всё ок, пробуй мой вариант
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
Согласен - если помещается, то вроде МОЖЕТ решить проблему. Просто все равно будет зависеть от тактовой частоты SPI. А притормаживание до высокого уровня CLK процессора от этого не зависит...DimkaM wrote:Бази это регистр, и выход у него изменится только к следующему клоку
Так что всё ок, пробуй мой вариант
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Лезет все. И вариант DimkaM и, дополнительно, вариант newold86. Вечером попробую.
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: ISA-8 SD-контроллер (SPI) на CPLD
DimkaM молодец, осваиваешь ХДЛ!
Last edited by angry_troll on 07 Dec 2017 11:09, edited 1 time in total.
привет засранцу лавру :)
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Результаты неоднозначные. Сперва попробовал код DimkaM - SPI сходит с ума, шлет в MISO пургу даже когда в порт нет записи. Потом запаял на пин SysClk. Попробовал свой старый код с третьей страницы с добавлением в условие где BUSY SysClk - if (~nCS & ~nWR & ~Adr & SysClk), как советовал newold86 - стало лучше, гораздо, но все равно из дести байт штуки 3 битые. Потом начал комбинировать.... То места нет, то не может путь проложить. Ужас.
Пришлось выпилить один разряд из делителя, вернутся к делению на 16. В принципе, для DS1347 RTC должно быть нормально, он даже на 4 MHz может. Ввел регистр DWR, чтоб пропустить один клок перед защелкиванием адреса. Сейчас такой код:
Результаты - пока не понял сам. Вроде бы почти работает. Но иногда вроде 1 байт из ста битый. Или....
Пришлось выпилить один разряд из делителя, вернутся к делению на 16. В принципе, для DS1347 RTC должно быть нормально, он даже на 4 MHz может. Ввел регистр DWR, чтоб пропустить один клок перед защелкиванием адреса. Сейчас такой код:
Code: Select all
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
-
- Doomed
- Posts: 449
- Joined: 08 Apr 2013 04:04
- Location: 213.247.249.139
Re: ISA-8 SD-контроллер (SPI) на CPLD
Вот этот вот SPI из http://nedopc.com/zxevo/zxevo.php работает без глюков в тысячах плат.
http://svn.zxevo.ru/filedetails.php?rep ... on%2Fspi.v
Но это так, на всякий случай. Скорее всего не подойдёт вам.
http://svn.zxevo.ru/filedetails.php?rep ... on%2Fspi.v
Но это так, на всякий случай. Скорее всего не подойдёт вам.
привет засранцу лавру :)
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Так завтра и поступлю.newold86 wrote:Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?
А пока теряет все равно некоторые байты. Как на записи, так и на чтении. Но немножко пообщался с карточкой, почитал сектора... Но это конечно не работа.
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: ISA-8 SD-контроллер (SPI) на CPLD
Я насчитал 6 уровней вложенности условий. одно условие это как минимум через один элемент должен пройти сигнал. Представляете какая это задержка сигналов?
Надо избавляться от этого, разбить на несколько блоков.
Надо избавляться от этого, разбить на несколько блоков.
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: ISA-8 SD-контроллер (SPI) на CPLD
Есть возможность снять лог сигналов nCS Addr nWR CLK и dat[0] ?
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Не знаю, если не заработает, распаяю нафиг эту платуnewold86 wrote:Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?

-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Попробовал, клок завел с SysClk. Теперь вроде пишет правильно, но читает с ошибками.
Я не уверен, правильно ли я тестирую, но я закоротил MISO и MOSI и сверяю то что записал с тем что прочитал.
Я не уверен, правильно ли я тестирую, но я закоротил MISO и MOSI и сверяю то что записал с тем что прочитал.
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
Закономерность в ошибках видна ? В первую очередь, не портится ли первый или последний принятый бит ?Tronix wrote:читает с ошибками