реклама на сайте
подробности

 
 
> DMA: Verilog->Nios
Veg@
сообщение Mar 31 2010, 16:42
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 90
Регистрация: 16-09-09
Пользователь №: 52 416



Начинаю изучать работу с DMA для дальнейшего его применения в качестве способа передачи больших объемов данных из Verilog-модуля в Nios. Подскажите с чего начать, какие посоветуете источники информации по этой теме (сам я ничего подходящего не нашел) и/или, желательно, примеры реализации на Verilog+C? Спасибо.

Сообщение отредактировал Veg@ - Mar 31 2010, 16:43
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arexol
сообщение Apr 1 2010, 16:39
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 317
Регистрация: 25-09-06
Пользователь №: 20 651



Ваш верилог модуль из которого можно прочитать процессором что либо должен иметь слейв интерфейс (читайте спецификацию).
Грубо говоря это набор сигналов и правил для этих сигналов.
простой слейв будет выгляеть примерно вот так

Код
module MyModule (
input  clk;
input  reset;
input  chipselect;
input  read;
input  [3:0]  adress;
output  reg [31:0] readdata;
input  write;
input  [31:0] writedata;
);

reg [31:0] buffer;

always @(posedge clk or posedge reset )
begin
   if (reset)
    begin
      readdata<=0;
      buffer<=5;
    end
   else
     begin
        if (chipselect & write)
          begin
             buffer<=writedata; // writing
          end
        
       if (chipselect & read)
        begin
          if (adress==2)  
            readdata<=buffer;
          else
            readdata<=0;
        end
        
     end
end

endmodule

обратите внимание на адрес - 5 бит
в соотв разрядности будет выделено адресное пространство

когда Вы сделаете указатель на это адресное пространство в Си коде
то при чтении или записи по этому указателю будет инициироваться транзакция чтения или записи мастером данных процессора

ну и вот если вы запишете в это адресное пространство число то оно попадёт в регистр буффер

чтобы считать записанное значение надо будет потом обратиться к адресу базовый + 2


ps.
если есть ошибки то прошу прощения - не компилировал


вот нашёл ещё мелкий слейв для учебных целей
Код
module MyModule(
    clk,
    chipselect,
    reset,
    address,
    read,
    readdata,
    write,
    writedata,
    irq

);

input clk;
input chipselect;
input reset;
input [3:0]address;
input read;
output [31:0]readdata;
reg [31:0]readdata;
input write;
input [31:0]writedata;
output irq;
reg irq;
// internal regs
reg [31:0]reg0;
reg [31:0]reg1;
reg [31:0]reg2;
reg [31:0]reg3;


always @(posedge clk or posedge reset)
begin
if(reset)
  begin
    irq<=1'b0;
    readdata<=32'b0;
    reg0=32'd0;
    reg1=32'd1;
    reg2=32'd2;
    reg3=32'd3;
  end
else
begin


  if (chipselect & read) // ANALON READING TO CPU
   case (address)
    4'd0: readdata<=reg0;
    4'd1: readdata<=reg1;
    4'd2: readdata<=reg2;
    4'd3: readdata<=reg3;
   endcase


  if (chipselect & write) //AVALON WRITING FROM CPU
   case(address)
    4'd0: reg0<=writedata;
    4'd1: reg1<=writedata+reg0;
    4'd2: reg2<=writedata-reg1;
    4'd3: reg3<=writedata*reg2;
   endcase


  if (reg0==32'd12)  // IRQ PROCESSING
   irq<=1;
  else
   irq<=0;


end
end



endmodule
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 19:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016