TamRazZ 0 10 июня, 2019 Опубликовано 10 июня, 2019 · Жалоба Добрый день! Подскажите, пожалуйста, простой и доступный способ реализации на 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 в шапке объявляемой функции. Не понятно, как описать функцию, у которой размерность выходного аргумента зависит входного аргумента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 июня, 2019 Опубликовано 10 июня, 2019 · Жалоба 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 декодер? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 10 июня, 2019 Опубликовано 10 июня, 2019 · Жалоба Приветствую! 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TamRazZ 0 10 июня, 2019 Опубликовано 10 июня, 2019 · Жалоба 2 hours ago, des00 said: Размеры должны быть определены статически, до компиляции. Это HDL. А по вашему вопросу, если нужно синтезированное, то сделать шаблон через функцию в параметризуемом интерфейсе. Если для моделирования - параметризуемый класс. PS. LDPC декодер? Нужно именно синтезируемое. Пока Хэмминг для тренировки, в будущем, конечно, LDPC=) сделать шаблон через функцию в параметризуемом интерфейсе Можно поподробнее не совсем понял, терминология у меня хромает пока... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 июня, 2019 Опубликовано 11 июня, 2019 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться