nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 13 Dec 2017 05:08



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

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


07 Dec 2017 05:18
Profile
Doomed

Joined: 30 Nov 2013 14:08
Posts: 580
Location: WWW
Reply with quote
DimkaM wrote:
newold86 wrote:

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

ISA

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


07 Dec 2017 05:37
Profile
Maniac

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


07 Dec 2017 05:50
Profile ICQ
Doomed

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

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


07 Dec 2017 09:15
Profile
Doomed

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


07 Dec 2017 09:20
Profile
Doomed

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


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



07 Dec 2017 10:54
Profile
Doomed

Joined: 18 Nov 2013 05:38
Posts: 475
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 байт из ста битый. Или....


07 Dec 2017 12:53
Profile
Doomed

Joined: 08 Apr 2013 07:04
Posts: 374
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 12:59
Profile
Doomed

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


07 Dec 2017 12:59
Profile
Doomed

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

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


07 Dec 2017 15:23
Profile
Maniac

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


08 Dec 2017 01:09
Profile ICQ
Maniac

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


08 Dec 2017 06:18
Profile ICQ
Doomed

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


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


08 Dec 2017 10:09
Profile
Doomed

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


08 Dec 2017 13:09
Profile
Doomed

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

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


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

Who is online

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