Jump to content

    
Sign in to follow this  
TamRazZ

Генерация единичной матрицы на SV

Recommended Posts

Добрый день!

Подскажите, пожалуйста, простой и доступный способ реализации на SV функции генерации единичной матрицы. 

Вот набросок моего видения этой функции:

function automatic logic[size-1:0][size-1:0] eye (input int size);
    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
            eye[i][j] = (i == j);           
endfunction

Понятно, что компилятор не видит size в шапке объявляемой функции. Не понятно, как описать функцию, у которой размерность выходного аргумента зависит входного аргумента.

Share this post


Link to post
Share on other sites
4 hours ago, TamRazZ said:

Добрый день!

Подскажите, пожалуйста, простой и доступный способ реализации на SV функции генерации единичной матрицы. 

Вот набросок моего видения этой функции:


function automatic logic[size-1:0][size-1:0] eye (input int size);
    for (int i = 0; i < size; i++)
        for (int j = 0; j < size; j++)
            eye[i][j] = (i == j);           
endfunction

Понятно, что компилятор не видит size в шапке объявляемой функции. Не понятно, как описать функцию, у которой размерность выходного аргумента зависит входного аргумента.

Размеры должны быть определены статически, до компиляции. Это HDL.

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

PS. LDPC декодер?

Share this post


Link to post
Share on other sites

Приветствую!

3 hours ago, TamRazZ said:

...

Понятно, что компилятор не видит size в шапке объявляемой функции. Не понятно, как описать функцию, у которой размерность выходного аргумента зависит входного аргумента.

IMHO никак - в SV тип возвращаемый из функции должен быть определен  на этапе компиляции. 

Поэтому либо заранее резервируете длинный вектор "logic [max_x*max_y-1:0]" с последующими плясками с приведением типов, либо извратится (если только для симуляции нужно) как то так:  

module tst;

typedef bit dynarray_of_bit_t[];

function dynarray_of_bit_t gen_one (input int size);
  gen_one=new[size*size];
  
  for (int ii=0;ii<size;++ii) begin
    gen_one[ii*size+ii]=1;
  end
endfunction

bit [2:0][2:0] arr3x3;
bit [4:0][4:0] arr5x5;

initial begin
  arr3x3 = {>> {gen_one(3)}};
  arr5x5 = {>> {gen_one(5)}};
end

endmodule

Удачи! Rob.

Share this post


Link to post
Share on other sites
2 hours ago, des00 said:

Размеры должны быть определены статически, до компиляции. Это HDL.

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

PS. LDPC декодер?

Нужно именно синтезируемое. Пока Хэмминг для тренировки, в будущем, конечно, LDPC=)

сделать шаблон через функцию в параметризуемом интерфейсе

Можно поподробнее не совсем понял, терминология у меня хромает пока...

Share this post


Link to post
Share on other sites
7 hours ago, TamRazZ said:

Нужно именно синтезируемое. Пока Хэмминг для тренировки, в будущем, конечно, LDPC=)

Хмм, непомню зачем в Хэмминге единичные матрицы, ну да ладно) Как вариант, можете в теме про FEC кодек Хэмминга посмотреть)

7 hours ago, TamRazZ said:

сделать шаблон через функцию в параметризуемом интерфейсе

Можно поподробнее не совсем понял, терминология у меня хромает пока...

очень условно

interface pipa_if #(parameter int pIDAT_W = 8);

  localparam int cODAT_W = 10 + pIDAT_W;

  function logic [cODAT_W-1 : 0] do_something (input logic [pIDAT_W-1 : 0] dat);
    do_something = (dat << 8) ^ dat;
  endfunction

endinterface


module test (input logic [15 : 0] idat, output logic [17 : 0] odat8, logic [23 : 0] odat16);

  pipa_if #(8)  popa8 ();
  pipa_if #(16) popa16();

  assign odat8  = popa16.do_something(idat[7 : 0]);
  assign odat16 = popa16.do_something(idat);

endmodule

 

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
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.

Sign in to follow this