new123 0 6 февраля, 2019 Опубликовано 6 февраля, 2019 (изменено) · Жалоба Форумчане привет. Расспиcывать долго не буду. Толи не могу правильно подобрать поисковые слова, то ли реально нет ответа. `define DMA_MESSAGE_SIZE_SIZE 2 `define DMA_MESSAGE_DESCRIPTOR_COUNT_SIZE 1 ... input wire [`DMA_MESSAGE_SIZE_SIZE * 8 - 1:0] input_data_size, ... assign current_descriptor_count = (input_data_size <= 120)? 1: Хотелось бы константы 120 и 1 приземлить и указать им конкретную ширину. К примеру, assign current_descriptor_count = (input_data_size <= 16'd120)? 8d'1: Но ширина зависит от define константы. Возможно как нибудь через define прописать ширину? Заранее спасибо Изменено 6 февраля, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 6 февраля, 2019 Опубликовано 6 февраля, 2019 · Жалоба Приветствую! 54 minutes ago, new123 said: ... assign current_descriptor_count = (input_data_size <= 16'd120)? 8d'1: Но ширина зависит от define константы. Возможно как нибудь через define прописать ширину? Заранее спасибо Я так понял вы хотите в коде получить актуальную ширину вектора ? Ну так - assign current_descriptor_count = ($bits(input_data_size) <= 16'd120) ? 8d'1: ... А еще лучше такие константы оформлять в localparam - localparam CURRENT_DESCRIPTOR_COUNT = ($bits(input_data_size)+119)/120; Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 6 февраля, 2019 Опубликовано 6 февраля, 2019 (изменено) · Жалоба 1 hour ago, RobFPGA said: Я так понял вы хотите в коде получить актуальную ширину вектора ? не совсем так. У меня есть бзик. Я люблю некий порядок и борюсь с варнингами. Компилятор у меня на этом выдает warning. assign current_descriptor_count = (input_data_size <= 120)? 1: descriptor_count у меня переменной длины и зависит от `define DMA_MESSAGE_DESCRIPTOR_COUNT_SIZE 1 // 1 байт = 8 * 1 = 8 бит Соответственно я 8-ми битному вектору присваиваю константу из 32 бит - единицу. Варнинг уйдет, если я сделаю assign current_descriptor_count = (input_data_size <= 120)? 8'b01: Но эта 8, у меня зависит от `define DMA_MESSAGE_DESCRIPTOR_COUNT_SIZE Я пробовал нечто подобное assign current_descriptor_count = (input_data_size <= 120)? (`DMA_MESSAGE_DESCRIPTOR_COUNT_SIZE * 8)'b01: Но так не компилирует Изменено 6 февраля, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
FatRobot 0 6 февраля, 2019 Опубликовано 6 февраля, 2019 · Жалоба извлекайте и присваивайте только нужное количество бит my1 = 1 descriptor=my1[$bits(descriptor)-1:0] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 6 февраля, 2019 Опубликовано 6 февраля, 2019 · Жалоба Приветствую! Можно привести разрядность и так (width)'(value) и так чтобы один раз ... = (`DMA_MESSAGE_DESCRIPTOR_COUNT_SIZE * 8)'( (input_data_size <= 120) ? 1 : ... ); Но лучше дизайнить так чтобы определять требуемую разрядность непосредственно в модуле через макс величину и функции $сlog2(), $bits(). Ну и у меня правило что если константа вычисляется в модуле то обязательно сделать localparam с ней чтобы по имени был хотя бы намек что это и читать легче. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 7 февраля, 2019 Опубликовано 7 февраля, 2019 (изменено) · Жалоба On 2/6/2019 at 6:01 PM, RobFPGA said: (width)'(value) вот я с первого раза и до форума так попробовал, не прокатывает. вот недавно додумал попробовать без формулы (без знака умножения). Прошло. Странно как то. А вообще спасибо всем. Куда мучать понял, буду добивать. Изменено 7 февраля, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 8 февраля, 2019 Опубликовано 8 февраля, 2019 · Жалоба On 2/6/2019 at 9:27 PM, new123 said: У меня есть бзик. Я люблю некий порядок и борюсь с варнингами. тогда вы явно выбрали не тот язык. Вам в VHDL. в V/SV довольно широкие возможности по автоматическому приведению разрядностей и типов. Достаточно изучить 10 страниц стандарта, чтобы снять все вопросы по приведению типов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться