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

 
 
 
Reply to this topicStart new topic
> Чтение параметров модуля (verilog)
Inanity
сообщение Jul 4 2018, 16:29
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Есть ли возможность считать параметр модуля, который ниже в иерархии?
Тут пишут, что можно, но что-то как-то не работает. Или там имеется ввиду System Verilog?
https://electronics.stackexchange.com/quest...ance-in-verilog
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 4 2018, 17:33
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Inanity @ Jul 4 2018, 19:29) *
Есть ли возможность считать параметр модуля, который ниже в иерархии?
Тут пишут, что можно, но что-то как-то не работает. Или там имеется ввиду System Verilog?
https://electronics.stackexchange.com/quest...ance-in-verilog
Вам для чего это надобно? Для симуляции или неужто для синтеза?
Для синтеза сие действие под запретом находится.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jul 4 2018, 18:12
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(RobFPGA @ Jul 4 2018, 20:33) *
Вам для чего это надобно? Для симуляции или неужто для синтеза?
Для синтеза сие действие под запретом находится.

Приветствую! Для синтеза. Хотелось, чтобы модуль верхнего уровня читал некоторые параметры подчинённого модуля и таким образом изменял принцип работы с ним.
Просто эти параметры сверху вниз передавать как-то странно и бессмысленно. Т.е. я изменяю нижний модуль, а верхний, читая его параметры, подстраивается под его работу. Таким образом не нужно делать изменения в обоих модулях (или иерархии, если их много).
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 4 2018, 18:45
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 3 983
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Inanity @ Jul 4 2018, 21:12) *
Приветствую! Для синтеза. Хотелось, чтобы модуль верхнего уровня читал некоторые параметры подчинённого модуля и таким образом изменял принцип работы с ним.
Просто эти параметры сверху вниз передавать как-то странно и бессмысленно. Т.е. я изменяю нижний модуль, а верхний, читая его параметры, подстраивается под его работу. Таким образом не нужно делать изменения в обоих модулях (или иерархии, если их много).

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 4 2018, 18:47
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Inanity @ Jul 4 2018, 21:12) *
Приветствую! Для синтеза. Хотелось, чтобы модуль верхнего уровня читал некоторые параметры подчинённого модуля и таким образом изменял принцип работы с ним.
Просто эти параметры сверху вниз передавать как-то странно и бессмысленно. Т.е. я изменяю нижний модуль, а верхний, читая его параметры, подстраивается под его работу. Таким образом не нужно делать изменения в обоих модулях (или иерархии, если их много).
О как - а что будете делать если нижний модуль в разных местах верхнего будет используется да и с разными параметрами? Copy-paste нижнего ? wacko.gif А если таких включений сотня-вторая и в каждом несколько разных параметров? cranky.gif Ужас.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 4 2018, 19:05
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 3 983
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(RobFPGA @ Jul 4 2018, 21:47) *
О как - а что буде делать если нижний модуль в разных местах верхнего будет используется да и с разными параметрами? Copy-paste нижнего ? wacko.gif А если таких включений сотня-вторая и в каждом несколько разных параметров? cranky.gif Ужас.

А я еще добавлю.
Если же передавать параметры сверху, то в верхнем модуле известно где, как и сколько нижних модулей установлено. И тогда каждому установленному нижнему модулю нужно только сверху передать в параметрах его уникальное "имя". И тогда нижние бодро отрапортуют на консоли у кого чего и сколько...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jul 4 2018, 19:41
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(iosifk @ Jul 4 2018, 21:45) *
Вы все хотите ровно наоборот.
Параметры должны передаваться только сверху вниз.
...

Да, спасибо, я всё это прекрасно понимаю.

Цитата(RobFPGA @ Jul 4 2018, 21:47) *
О как - а что будете делать если нижний модуль в разных местах верхнего будет используется да и с разными параметрами? Copy-paste нижнего ? wacko.gif А если таких включений сотня-вторая и в каждом несколько разных параметров? cranky.gif Ужас.


Ок, раскрою идею чуть шире, чтобы развеять недопонимание. На самом деле единственный параметр, который я хотел бы прочитать от нижнего модуля это его латентность в тактах.
И, согласитесь, это параметр, который невозможно (если не невозможно, то странно) генерировать сверху вниз. Я понимаю, что эту проблему можно решить стробами вроде ready/valid между модулями, но в данном случае мне это показалось избыточным, т.к. задержка фиксированная. И у меня возникла мысль, зачем тратить логику на организацию handshake, если задержка фиксирована и её нужно просто указать в виде числа. А, поскольку я имею иерархию модулей, нужно всю иерархию настроить относительно латентности модулей, которые ниже уровнем.

Сообщение отредактировал Inanity - Jul 4 2018, 19:56
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 4 2018, 19:49
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 3 983
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Inanity @ Jul 4 2018, 22:41) *
На самом деле единственный параметр, который я хотел бы прочитать от нижнего модуля это его латентность в тактах.

Но ведь латентность - это чисто физическая вещь а не какое-то число. Поэтому можно же сделать в модуле просто обычные выходы, в которые и передавать значение латентности. Почему Вам нужны именно параметры?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 4 2018, 19:57
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



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

Цитата(Inanity @ Jul 4 2018, 22:41) *
...
Ок, раскрою идею чуть шире, чтобы развеять недопонимание. На самом деле единственный параметр, который я хотел бы прочитать от нижнего модуля это его латентность в тактах.
Я понимаю, что эту проблему можно решить стробами вроде ready/valid между модулями в иерархии, но в данном случае мне это показалось избыточным. И латентность это, кажется, единственный параметр, который невозможно генерировать сверху вниз. Но, видимо это невозможно и лучше решить проблему привычным handshake-ом.
О... знакомая проблема - кроме handshake еще решается выносом функции расчета latency во внешний .vh файл или package. Ну и соответствующим использованием этой функции в нужных местах по иерархии с заданными параметрами.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jul 4 2018, 20:08
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(iosifk @ Jul 4 2018, 22:49) *
Но ведь латентность - это чисто физическая вещь а не какое-то число. Поэтому можно же сделать в модуле просто обычные выходы, в которые и передавать значение латентности. Почему Вам нужны именно параметры?

Если это будет провод, то железо будет фиксировано, а если параметр, то я смогу с помощью generate играться настройками железа, убавляя/добавляя и тд...

Цитата(RobFPGA @ Jul 4 2018, 22:57) *
О... знакомая проблема - кроме handshake еще решается выносом функции расчета latency во внешний .vh файл или package. Ну и соответствующим использованием этой функции в нужных местах по иерархии с заданными параметрами.


Рад, что вы меня поняли. А можно немного подробнее?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 4 2018, 20:17
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 3 983
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Inanity @ Jul 4 2018, 23:08) *
Если это будет провод, то железо будет фиксировано, а если параметр, то я смогу с помощью generate играться настройками железа, убавляя/добавляя и тд...

Если Вы сказали "латентность", значит появится таймер, который будет задавать задержку. Причем таймер - аппаратный. Ну и какая разница, как в этот таймер задавать число битов в счетчик. Через параметр или "проводами" напрямую?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 4 2018, 21:08
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



Приветсвую!
Цитата(Inanity @ Jul 4 2018, 23:08) *
Рад, что вы меня поняли. А можно немного подробнее?
Пишем функцию с матерным выражением которое считает latency для заданного модуля
и используем ее как в целевом модуле так и в выше стоящих по иерархии.
CODE
// function.vh
function integer blokA_latency(input int varA, ... varXY=1);
moduleA_latency = varA*varXY ...;
endfunction

module blokA #(parameter VAR_A=1, ... VAR_XY) ( input clk, rst, ...);
`include "function.vh"
loclparam LATENCY = blokA_latency(VAR_A, ... VAR_XY);

reg [LATENCY -1:0] reg_delay;
...
endmodule

module blok_top (input clk, rst, ...);
`include "function.vh"

localparam VAR_A=2;
...
localparam VAR_XYZ=2;
localparam LATENCY_A = blokA_latency(VAR_A, ... VAR_XY);
...
blokA #(.VAR_A(VAR_A), ... .VAR_XY(VAR_XY)) i_blokA(...);
...
endmodule

Удачи! Rob.

Приветствую!
Цитата(iosifk @ Jul 4 2018, 23:17) *
Если Вы сказали "латентность", значит появится таймер, который будет задавать задержку. Причем таймер - аппаратный. Ну и какая разница, как в этот таймер задавать число битов в счетчик. Через параметр или "проводами" напрямую?
И как в таком случае "проводами" выбрать тип памяти (структуру умножителя, ...) в top модуле в зависимости от общей latency обработки в нижних?

Удачи! Rob
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jul 4 2018, 21:19
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(iosifk @ Jul 4 2018, 23:17) *
Если Вы сказали "латентность", значит появится таймер, который будет задавать задержку. Причем таймер - аппаратный. Ну и какая разница, как в этот таймер задавать число битов в счетчик. Через параметр или "проводами" напрямую?

Да, можно, но если модулей пара, один конфигурирует таймер другому, а если иерархия, то нужно считать суммы задержек, а сумматор ставить - не дело, лучше уж handshake.

Цитата(RobFPGA @ Jul 5 2018, 00:08) *
Приветсвую!
Пишем функцию с матерным выражением которое считает latency для заданного модуля
и используем ее как в целевом модуле так и в выше стоящих по иерархии.

Спасибо, в общем, примерно так и представлял себе. Но вроде как функцию объявлять вне модуля в Verilog (не SystemVerilog) нельзя, разве нет?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jul 4 2018, 21:24
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 182
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(Inanity @ Jul 5 2018, 00:19) *
Спасибо, в общем, примерно так и представлял себе. Но вроде как функцию объявлять вне модуля в Verilog (не SystemVerilog) нельзя, разве нет?
А я разве вне модуля объявил? В verilog функция живет в include *.vh файле. Куда его впихнете там и объявится.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jul 4 2018, 21:43
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(RobFPGA @ Jul 5 2018, 00:24) *
А я разве вне модуля объявил? В verilog функция живет в include *.vh файле. Куда его впихнете там и объявится.

Хм...проверил, действительно ворнинга нет. Не знал, что `include *.vh можно сделать внутрь модуля. Спасибо, коллега!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd August 2018 - 01:50
Рейтинг@Mail.ru


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