TamRazZ 0 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба Доюрый день! Столкнулся с необходимостью работы с массивом констант в виде упакованно-неупакованных конструкций. вот пример того, что мне необходимо: localparam int N = 5; localparam int W = 18; const logic [ADDR_W-1 : 0] hard_point [N] = '{16, 17, 18, 19, 20}; на такую запись Квартус вываливает предупреждения: Warning (10030): Net "hard_point.data_a" at mem_reader.sv(61) has no driver or initial value, using a default initial value '0' Warning (10030): Net "hard_point.waddr_a" at mem_reader.sv(61) has no driver or initial value, using a default initial value '0' Warning (10030): Net "hard_point.we_a" at mem_reader.sv(61) has no driver or initial value, using a default initial value '0' Код работает исправно, но эти варнинги мне непонятны и хотелось бы с ними разобраться, но не совсем понятно, что от меня требует Квартус. Я понимаю, что необходимо указывать конкретную размерность данных, но затрудняюсь с синтаксисом. Прошу помощи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 1 minute ago, TamRazZ said: ...Код работает исправно, но эти варнинги мне непонятны и хотелось бы с ними разобраться, но не совсем понятно, что от меня требует Квартус.... Я понимаю, что необходимо указывать конкретную размерность данных, но... Разрядности здесь ни при чем. Quartus развел 2мерный массив констант как модуль памяти. Соответственно, варнинги говорят о том, что некоторые порты железного блока памяти (data_a - данные на запись, waddr_a - адрес на запись, we_a - разрешение на запись) никуда не подключены. Если нет тяги к прекасному - можно смело забить на них) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба а меня больше удивило что квартус квалификатор const прожевал))) локал парам вроде всегда он требовал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 23 minutes ago, TamRazZ said: Доюрый день! Код работает исправно, но эти варнинги мне непонятны и хотелось бы с ними разобраться, но не совсем понятно, что от меня требует Квартус. Видимо, Quartus требует значения параметра ADDR_W. Попробуйте так: localparam int N = 5; localparam int W = 18; const logic [W-1 : 0] hard_point [N] = '{16, 17, 18, 19, 20}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TamRazZ 0 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба 1 hour ago, des00 said: локал парам вроде всегда он требовал Действительно так не ругается... не помню, почему через конст писал % Можно тогда еще вопрос не по теме... Как вы избавляетесь от варнингов такого рода: Warning (10230): Verilog HDL assignment warning at mem_reader.sv(215): truncated value with size 32 to match size of target (12) в коде типа: cnt <= (cnt == size-1) ? 0 : cnt + 1; Настраиваете компилятор или указываете размеры всех слагаемых? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darky777 0 2 октября, 2019 Опубликовано 2 октября, 2019 (изменено) · Жалоба 1 hour ago, TamRazZ said: Можно тогда еще вопрос не по теме... Как вы избавляетесь от варнингов такого рода: Warning (10230): Verilog HDL assignment warning at mem_reader.sv(215): truncated value with size 32 to match size of target (12) в коде типа: cnt <= (cnt == size-1) ? 0 : cnt + 1; Настраиваете компилятор или указываете размеры всех слагаемых? 0 по умолчанию 32-разрядный. поэтому можно '0 либо {WIDTH_CNT{1'b0}} либо 'd0 Изменено 2 октября, 2019 пользователем Darky777 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 2 октября, 2019 Опубликовано 2 октября, 2019 · Жалоба Да не только ноль, но и единица. Счётчик надо писать cnt <= cnt + 1'b1; И не только из-за этой лишней писанины я не люблю Верилог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба 16 hours ago, TamRazZ said: Действительно так не ругается... не помню, почему через конст писал % Буду знать) Quote Можно тогда еще вопрос не по теме... Как вы избавляетесь от варнингов такого рода: Warning (10230): Verilog HDL assignment warning at mem_reader.sv(215): truncated value with size 32 to match size of target (12) в коде типа: cnt <= (cnt == size-1) ? 0 : cnt + 1; Настраиваете компилятор или указываете размеры всех слагаемых? размеры, в арифметике, не пишу уже лет 15, после того как разобрался с приведением разрядностей операндов(всего пару страниц стандарта). А счетчики писать как struct packed { logic done; logic [W-1 : 0] val; } cnt; cnt.val <= cnt.done ? '0 : (cnt.val + 1'b1); cnt.done <= (cnt.val == size-2); уже вошло в привычку, можно даже шаблон редактора сделать) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба 10 часов назад, andrew_b сказал: И не только из-за этой лишней писанины я не люблю Верилог. Это конкретно фича квартуса. Придирчивый синплифай (когда я с ним ещё работал) не вопил на a <= a + 1, да и нынешняя вивада тоже, они молча приводят размеры к типам, как и положено по стандарту. В квартусе я просто этот тип предупреждений отправлял молча в игнор (через механизм suppress, он неплохо в ква сделан, в отличие от вивады, где его можно сказать нет), т.к. вопли не по делу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TamRazZ 0 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба Есть ли рациональное зерно в приведении типов после арифметических операций? logic [W-1:0] a, b; b <= (a + 10)[W-1:0]; Только я не знаю как это в синтаксисе SV описать, подскажите, пожалуйста.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба 9 minutes ago, TamRazZ said: Есть ли рациональное зерно в приведении типов после арифметических операций? logic [W-1:0] a, b; b <= (a + 10)[W-1:0]; Только я не знаю как это в синтаксисе SV описать, подскажите, пожалуйста.. 1. рационального зерна нет 2. только через дополнительную переменную. В новых ревизиях стандарта хотели ввести нечто похожее, но чем дело кончилось не знаю. в редакции 2012 года, ЕМНИП этого нет. 3. Изучите все же главу о привидении типов в верилоге, всего несколько страниц и вопросы все снимет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба Приветствую! 53 minutes ago, des00 said: Только я не знаю как это в синтаксисе SV описать, подскажите, пожалуйста.. logic [A_WH-1 :0] var_a; logic [B_WH-1 :0] var_b; logic [A_WH+2-1:0] var_c; ... var_b <= (B_WH)'(var_a + 1); var_c <= (A_WH+2)'(var_a + 3); Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба 40 минут назад, RobFPGA сказал: Приветствую! logic [A_WH-1 :0] var_a; logic [B_WH-1 :0] var_b; logic [A_WH+2-1:0] var_c; ... var_b <= (B_WH)'(var_a + 1); var_c <= (A_WH+2)'(var_a + 3); Удачи! Rob. Или так. typedef logic [A_WH-1 :0] var_a_t; typedef logic [B_WH-1 :0] var_b_t; typedef logic [A_WH+2-1:0] var_c_t; var_a_t var_a; var_b_t var_b; var_c_t var_c; ... var_b <= var_b_t'(var_a + 1); var_c <= var_c_t'(var_a + 3); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба 1 hour ago, RobFPGA said: Приветствую! logic [A_WH-1 :0] var_a; logic [B_WH-1 :0] var_b; logic [A_WH+2-1:0] var_c; ... var_b <= (B_WH)'(var_a + 1); var_c <= (A_WH+2)'(var_a + 3); Удачи! Rob. это не совсем то))) я про slice selection результата операции/вызова функции, без введения промежуточной переменной, ведь именно про это был вопрос, а не про приведение разрядности всего результата) А так, рационального зерна что в вашем варианте что в @dxp все же нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 3 октября, 2019 Опубликовано 3 октября, 2019 · Жалоба Приветствую! 17 minutes ago, des00 said: А так, рационального зерна что в вашем варианте что в @dxp все же нет. У каждого своя рациональность - кому-то может поможет показать как он убрал миллион варнингов в Qu ; 19 minutes ago, des00 said: это не совсем то))) я про slice selection результата Ну а для slice можно еще добавить сдвиг `define SLICE_MSB_LSB(exp, msb, lsb) (1+MSB-LSB)'((exp)>>LSB) b <= `SLICE_MSB_LSB((a+10), WH-1, 0); Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться