nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 10:02



Reply to topic  [ 198 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8, 9, 10 ... 14  Next
ISA-8 SD-контроллер (SPI) на CPLD 
Author Message
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Хотя нет, BUSY - это же регистр, а значит он все-таки по следующему клоку должен

_________________
https://t.me/tronix_blog


07 Dec 2017 02:18
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
DimkaM wrote:
newold86 wrote:

Это вообще для какого процессора картинка ? По крайней мере, такты 808x начинаются с низкого уровня:

ISA

Ну не похоже это на ISA... Для начала, как уже говорил, фаза CLK перевернута. Далее, почему адрес порта задается только 10 битами, тогда как у 8088 - 16-ью ?


07 Dec 2017 02:37
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Бази это регистр, и выход у него изменится только к следующему клоку
Так что всё ок, пробуй мой вариант


07 Dec 2017 02:50
Profile ICQ
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
DimkaM wrote:
Бази это регистр, и выход у него изменится только к следующему клоку
Так что всё ок, пробуй мой вариант

Согласен - если помещается, то вроде МОЖЕТ решить проблему. Просто все равно будет зависеть от тактовой частоты SPI. А притормаживание до высокого уровня CLK процессора от этого не зависит...


07 Dec 2017 06:15
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Лезет все. И вариант DimkaM и, дополнительно, вариант newold86. Вечером попробую.

_________________
https://t.me/tronix_blog


07 Dec 2017 06:20
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
DimkaM молодец, осваиваешь ХДЛ!

_________________
привет засранцу лавру :)


Last edited by angry_troll on 07 Dec 2017 11:09, edited 1 time in total.



07 Dec 2017 07:54
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Результаты неоднозначные. Сперва попробовал код 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 байт из ста битый. Или....

_________________
https://t.me/tronix_blog


07 Dec 2017 09:53
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
Вот этот вот SPI из http://nedopc.com/zxevo/zxevo.php работает без глюков в тысячах плат.
http://svn.zxevo.ru/filedetails.php?rep ... on%2Fspi.v

Но это так, на всякий случай. Скорее всего не подойдёт вам.

_________________
привет засранцу лавру :)


07 Dec 2017 09:59
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?


07 Dec 2017 09:59
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
newold86 wrote:
Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?

Так завтра и поступлю.
А пока теряет все равно некоторые байты. Как на записи, так и на чтении. Но немножко пообщался с карточкой, почитал сектора... Но это конечно не работа.

_________________
https://t.me/tronix_blog


07 Dec 2017 12:23
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Я насчитал 6 уровней вложенности условий. одно условие это как минимум через один элемент должен пройти сигнал. Представляете какая это задержка сигналов?
Надо избавляться от этого, разбить на несколько блоков.


07 Dec 2017 22:09
Profile ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Есть возможность снять лог сигналов nCS Addr nWR CLK и dat[0] ?


08 Dec 2017 03:18
Profile ICQ
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
newold86 wrote:
Как насчет использовать взять исходный код, но использовать SysClk в качестве тактового ?


Не знаю, если не заработает, распаяю нафиг эту плату :evil:

_________________
https://t.me/tronix_blog


08 Dec 2017 07:09
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Попробовал, клок завел с SysClk. Теперь вроде пишет правильно, но читает с ошибками.
Я не уверен, правильно ли я тестирую, но я закоротил MISO и MOSI и сверяю то что записал с тем что прочитал.

_________________
https://t.me/tronix_blog


08 Dec 2017 10:09
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Tronix wrote:
читает с ошибками

Закономерность в ошибках видна ? В первую очередь, не портится ли первый или последний принятый бит ?


08 Dec 2017 10:41
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 198 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8, 9, 10 ... 14  Next

Who is online

Users browsing this forum: No registered users and 17 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.