Перейти к содержанию
    

'1 и '0 перестали работать правильно

Граждане, будьте бдительны !

Quartus 9.1

После внесения некоторых изменений в проект '1 '0 (заполнение вектора единицами и нулями соответственно) стало работать неправильно: вместо 1-1-1-...-1-1-1 становится NC-NC-...-NC-1 (все равно, что приравнять вектору 1'b1), что далее трактуется, как 0-0-0-...-0-0-0-1. Это видно в RTL Viewer.

'0 - в RTL Viewer видно, что чтаршие биты считаются неподключенными, хотя результат в итоге получается тот же, что и должен быть (весь вектор в 0).

Самое удивительное, что раньше именно в этом проекте работало правильно. После какого действия сломалось - сказать трудно, т.к. эту часть функционала я несколько ревизий не проверял.

Сам проект я выкладывать не буду, т. к. там только исходников на 5 МБ.

 

В принципе, легко переписывается в виде N'b111...111.

Кто нибудь с таким сталкивался ?

Судя по всему, этим "синтаксическим сахаром" из SV пользоваться в 9.1 пока еще рано. А что в Q10 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам проект я выкладывать не буду, т. к. там только исходников на 5 МБ.

а весь и не надо, достаточно только часть, в которой используете назначение.

Например:

module test
(
    input               clk,
    input        [15:0] d,
    output logic [31:0] q
);

wire [31:0] buf_d = '1;

always @( posedge clk)begin
    q <= (buf_d | d);
end


endmodule

работает правильно и в10sp1 и 10.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще попробуйте записывать такие вектора как {N{1'b0}} или {N{1'b1}} - это работает. Вообще есть ощущение, что Quartus несколько вольно обращается с некоторыми конструкциями SV.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было замечено что конструкция типа '1, '0 не работает в объявление инстенсев(Q10.0). Вместо всех 1, выставляется только одна.

Пример:

module sum (
  input clk,
  input [31:0] data_a,
  input [31:0] data_b,
  output [31:0] sum
);

always @(posedge clk)
sum <= data_a + data_b;

endmodule

module test(  
  input clk,
  input [31:0] data_a,
  input [31:0] data_b,
  output [31:0] sum
  );

sum sum1(
.clk(clk),
.data_a(data_a),
.data_b('1),
.sum(sum)
);

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было замечено что конструкция типа '1, '0 не работает в объявление инстенсев(Q10.0). Вместо всех 1, выставляется только одна.

Может так и должно быть по стандарту?

Изменено пользователем Head_Hunter

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может так и должно быть по стандарту?

Нет, не должно. '1 должна превратиться во все 11111111... на всю длину слова.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...