Jump to content
    

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

Всем привет,

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

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

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

 

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

ISP-architecture.thumb.jpg.a681f31ce2779b3965fdf7d9af97a584.jpg

 

 

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

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

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

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

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

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


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

Share this post


Link to post
Share on other sites

если считать, что 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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

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.

 

 

Share this post


Link to post
Share on other sites

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

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

 

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

 

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...