Перейти к содержанию
    

Доступ нескольких модулей к общим оперативным настройкам, буфер данных

Всем привет,

У меня задача: запрограммировать на GW2A18 определённый алгоритм управления устройством с обратной связью.

У кого есть опыт проектирования чего-то подобного, посмотрите пожалуйста.

block-scheme.thumb.png.10c71e86ad2b17e5c847a36f4f56ff68.png

 

Термины и названия блоков навеяны одной презентацией GoWin. См. скрин:

ISP-architecture.thumb.jpg.a681f31ce2779b3965fdf7d9af97a584.jpg

 

 

Надо сказать, что первая версия "дизайна" толком не работала, и блок-схема, нарисованная уже постфактум, (я её здесь не привожу) похожа на кашу из модулей.

По новой блок-схеме есть сомнения и вопросы:

"Буфер" - это модуль который накапливает актуальную телеметрию на случай если она понадобится для отправки по SPI. Как он реализуется я пока не знаю.

"Регистр настроек работы" - это вот главный вопрос. Вообще-то это массив. Где-нибудь 16x64. Не пойму: это должно быть реализовано как память, или можно реализовать и доступ по адресу, и непосредственный доступ к отдельным регистрам для параллельного чтения/записи.

Вот сценарий их использования:

  • каждому регистру соответствует один писатель и много читателей
  • всем модулям кроме SPI регистры нужны индивидуально
  • SPI-модулю регистры нужны как массив


Может кто подскажет какие-нибудь образцы хорошего стиля на эту тему )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если считать, что MC управляет работой устройства через SPI controller и видит регистры настроек как память, то SPI controller может сформировать сигналы чтения/записи, сигналы адреса и данных

для МС помимо возможности записать настройки необходима возможность считать информацию о работе устройства, и самое главное - считать информацию о количестве данных в buffer, а значит в памяти помимо настроек для записи/чтения MC ещё должны быть регистры только для чтения

пример для меньшего количества регистров

module OSReg
(
    input       clk, rst,
    input       wr_en,
    input       rd_en,
    input       [2:0] addr,
    input       [15:0] wr_data,
    output reg  [15:0] rd_data,
    //
    output      [15:0] settings0,
    output      [15:0] settings1,
    output      [15:0] settings2,
    output      [15:0] settings3,
    input       [15:0] status0,
    input       [15:0] status1,
    input       [15:0] status2,
    input       [15:0] status3
);

reg  [15:0] settings_ram [0:3];

always @(posedge clk)
begin
    if (rst)
    begin
        settings_ram[0] <= 0;
        settings_ram[1] <= 0;
        settings_ram[2] <= 0;
        settings_ram[3] <= 0;
    end
    else
    begin
        if (wr_en) settings_ram[addr] <= wr_data;
    end
end

assign settings0 = settings_ram[0];
assign settings1 = settings_ram[1];
assign settings2 = settings_ram[2];
assign settings3 = settings_ram[3];

wire [15:0] settings_ram_rd [0:7];
assign settings_ram_rd[0] = settings0;
assign settings_ram_rd[1] = settings1;
assign settings_ram_rd[2] = settings2;
assign settings_ram_rd[3] = settings3;
assign settings_ram_rd[4] = status0;
assign settings_ram_rd[5] = status1;
assign settings_ram_rd[6] = status2;
assign settings_ram_rd[7] = status3;

always @(posedge clk)
begin
    if (rst)
    begin
        rd_data <= 0;
    end
    else
    begin
        if (rd_en) rd_data <= settings_ram_rd[addr];
    end
end

endmodule

 

в примере, если МС записывает данные, то SPI controller формирет wr_en, addr, wr_data
если МС считывает данные, то SPI controller формирет rd_en, addr и отправляет в MC  rd_data 

в примере  регистры с 0 по 3  - регистры на запись и чтение, с которых остальные блоки могут брать переданные с MC настройки работы , регистры с 4 по 7 - регистры только для чтения, куда остальные блоки могут сообщать для MC состояние своей работы и где будет храниться взятая с buffer информация о количестве данных, которые может считать MC через  SPI controller

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У процессора есть возможность подключения SRAM памяти?

если есть то лучше сделать - fpga имитирует работу SRAM памяти - процессор видит fpga как внешнюю SRAM память

тогда берете двухклоковую память один порт заводите на на логику имитирующую SRAM память второй порт на Вашу логику

+ 1-2 сигнала от процессора (GPIO) для квітірования операций (готовность данних, какие-то команди)

В случае с SPI тоже самое процессор мастер. FPGA слейв. Есть протокол общения. Логика FPGA декодирует протокол.

В зависимости например данние или команди пишет в блочную память (двухклоковую и двухпортовую) по определенним адресам команди/данние

И дает сигнал квитирования дальнейшей логике для дальнейшей обработки...

по 1-2 сигнала от процессора (GPIO) для квітірования операций - логика понимает по каким адресам надо считать 

Для процессора наоборот - логика пишет в память и квитирует по gpio (возможно на преривание для процессора)

Таким образом можно передавать информацию размером в несколько сотен байт/слов  

Можно организовать даблбуффер в FPGA  для обмена...

пришла команда с процессора дай мне такие то данние - мастер видает N байт/слов(главное клок SPI) - логика слейва видает нужную информацию

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/6/2024 at 2:25 PM, stealthisname said:

а значит в памяти помимо настроек для записи/чтения MC ещё должны быть регистры только для чтения

- ну да, так всё и планируется. в ближайшее время сделаю примерчик в подтверждение концепции и закину сюда. надеюсь ))

 

On 7/6/2024 at 5:08 PM, Maverick_ said:

тогда берете двухклоковую память один порт заводите на на логику имитирующую SRAM память второй порт на Вашу логику

+ 1-2 сигнала от процессора

Про Dual Port SRAM - красиво, но у нас пока точно будет SPI.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/8/2024 at 1:52 PM, Вадим Н. said:

- ну да, так всё и планируется. в ближайшее время сделаю примерчик в подтверждение концепции и закину сюда. надеюсь ))

 

Про Dual Port SRAM - красиво, но у нас пока точно будет SPI.

 

 

Память внутри fpga с помощью нее можно правильно организовать обмен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...