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

 
 
 
Reply to this topicStart new topic
> Убрать сообщение компилятора
ivan219
сообщение Oct 25 2013, 19:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 345
Регистрация: 16-11-08
Пользователь №: 41 680



Как убрать это сообщение?
Warning (10230): Verilog HDL assignment warning at div_1.v(56): truncated value with size 32 to match size of target (7)

Ругается на это.

Код
parameter LEN_NUM = 66;

reg [LEN_CT - 1:0] ct;

ct <= LEN_NUM;
Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Oct 26 2013, 07:22
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 304
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



сделав сигналы одинаковой разрядности. У Вас ct - 32 бита, а LEN_NUM - 7

С другой стороны parameter LEN_NUM = 66 - но это локальный параметр, может быть с верхнего уровня изменен
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 27 2013, 14:17
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 222
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(ivan219 @ Oct 25 2013, 13:22) *
Как убрать это сообщение?


ct <= LEN_NUM[LEN_CT - 1:0];


--------------------
Go to the top of the page
 
+Quote Post
ivan219
сообщение Oct 27 2013, 15:16
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 345
Регистрация: 16-11-08
Пользователь №: 41 680



Sergey_Bekrenyov
Забыл указать что
Код
LEN_CT = Log2(LEN_NUM) + 1;


Цитата(des00 @ Oct 27 2013, 18:17) *
ct <= LEN_NUM[LEN_CT - 1:0];

От лично. Работает.

Ну и в продолжение темы.

Warning (10230): Verilog HDL assignment warning at cor.v(26): truncated value with size 29 to match size of target (28)

Код
    input                [width - 1: 0]    DATA_INPUT,
    output    reg    [width - 1: 0]    DATA_OUTPUT
);

    parameter width = 28;

reg    [width - 1: 0] buff;

wire    a = (buff > DATA_INPUT);

buff <= DATA_INPUT;
DATA_OUTPUT <= {a, DATA_INPUT} - buff;


В принципе ругается правильно.
Вот только я знаю что DATA_OUTPUT не будет больше 28 бит.
Как в этом случае указать компилятору что все хорошо?

В принципе вот так можно обмануть.
Но как то это не элегантно sm.gif
Код
wire [width: 0] b = {a, DATA_INPUT} - buff;

DATA_OUTPUT <= b[width - 1: 0];
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Oct 27 2013, 17:20
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



можно так

Код
DATA_OUTPUT <= {{a, DATA_INPUT} - buff}[28:0];


синтезатор доволен, но симулятор временами сводит, не знаю почему. часть таких строк пропускает, часть ни в какую...


Go to the top of the page
 
+Quote Post
Sergey_Bekrenyov
сообщение Oct 27 2013, 18:44
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 304
Регистрация: 14-12-10
Из: Королёв
Пользователь №: 61 599



Цитата(ivan219 @ Oct 27 2013, 19:16) *
Sergey_Bekrenyov
Забыл указать что
Код
LEN_CT = Log2(LEN_NUM) + 1;



От лично. Работает.

Ну и в продолжение темы.

Warning (10230): Verilog HDL assignment warning at cor.v(26): truncated value with size 29 to match size of target (28)

Код
    input                [width - 1: 0]    DATA_INPUT,
    output    reg    [width - 1: 0]    DATA_OUTPUT
);

    parameter width = 28;

reg    [width - 1: 0] buff;

wire    a = (buff > DATA_INPUT);

buff <= DATA_INPUT;
DATA_OUTPUT <= {a, DATA_INPUT} - buff;


В принципе ругается правильно.
Вот только я знаю что DATA_OUTPUT не будет больше 28 бит.
Как в этом случае указать компилятору что все хорошо?

В принципе вот так можно обмануть.
Но как то это не элегантно sm.gif
Код
wire [width: 0] b = {a, DATA_INPUT} - buff;

DATA_OUTPUT <= b[width - 1: 0];



Сделайте проверку на переполнение

Код
wire [width: 0] b = {a, DATA_INPUT} - buff;

DATA_OUTPUT <= (b[width]) ? {(width-1){1'b1}} : b[width - 1: 0];
Go to the top of the page
 
+Quote Post
sidy
сообщение Mar 14 2017, 08:46
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 241
Регистрация: 2-11-08
Пользователь №: 41 333



В продолжении темы:
есть такая же конструкция:
reg [8:0] COUNT;
always @ (posedge CLK or posedge RST)
begin
COUNT = COUNT + 1;
end

Quartus выдает такое же предупреждение на сайте Alterы предлагается следующее решение:
You get this warning because 1 is an unsized integer literal which defaults to 32 bits.
Workaround/Fix
To avoid this warning, use 1\'b1 rather than 1.
COUNT = COUNT + 1\'b1;
Но теперь у меня quartus ругается на
Error (10170): Verilog HDL syntax error at project.v(178) near text "\'b1;"; expecting ";"
Что может быть не так?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 14 2017, 09:46
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 189
Регистрация: 17-02-06
Пользователь №: 14 454



там нет \
просто 1'b1
COUNT = COUNT + 1'b1;
и это не ` тот что с буквой ё, а ' тот что с буквой э
Go to the top of the page
 
+Quote Post
sidy
сообщение Mar 14 2017, 10:17
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 241
Регистрация: 2-11-08
Пользователь №: 41 333



Цитата(Golikov A. @ Mar 14 2017, 12:46) *
там нет \
просто 1'b1
COUNT = COUNT + 1'b1;
и это не ` тот что с буквой ё, а ' тот что с буквой э

Да, действительно. Спасибо
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th August 2017 - 12:50
Рейтинг@Mail.ru


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