Чтение из IEEE 1800-2012, раздел 11.5.1:
Бит может быть адресован с использованием выражения, которое должно оцениваться в самоопределяемом контексте. Если адрес выбора бита недействителен (он за пределами или имеет один или несколько битов x или z), тогда значение, возвращаемое ссылкой, должно быть x для значений с 4 состояниями и 0 для значений с 2 состояниями. Выбор бита или частичный выбор скаляра, действительной переменной или реального параметра недопустим.
Как указано в LRM, результатом выбора за пределами границ должно быть значение по умолчанию. В вашем случае переменная с двумя состояниями (бит) значение должно быть обнулено.
В руководстве по переходу на VCS 2017 также есть исправления ошибок для выбор бита для параметров. Я попробовал следующий код и нашел удовлетворительные результаты с последним симулятором:
module top;
reg [1:0] r2;
bit [1:0] b;
assign r2= b[2:1] + b[3:2];
initial begin
b = 1;
#1;
$display("r2 = %b b[3:2] = %b", r2,b[3:2]);
end
endmodule
Обратите внимание, что пример выполняется на разных версиях симулятора. Другие симуляторы могут вести себя иначе.
Вывод VCS 2017:
бит [1:0] r2; бит [1:0] б; // --> r2 = 00 b[3:2] = 00
рег [1:0] п2; бит [1:0] б; // --> r2 = 00 b[3:2] = 00. В VCS 2014 есть ошибка, связанная с решением этого уравнения с 4 значениями состояния.
бит [1:0] r2; рег [1:0] б; // --> r2 = 00 b[3:2] = хх. Здесь x оптимизируется до значения бита по умолчанию.
рег [1:0] п2; рег [1:0] б; //--> r2 = хх b[3:2] = хх
Обратите внимание, что результат всегда ожидается как «x», когда мы используем сам выбор части как «x».
Частичный выбор, который обращается к диапазону битов, которые полностью выходят за адресные границы вектора, упакованного массива, упакованной структуры, параметра или конкатенации, или частичный выбор, то есть x или z, должен дать значение x при чтении и не влияет на данные, сохраняемые при записи.
Вышеприведенный снова из того же раздела из LRM.
person
sharvil111
schedule
13.07.2018
logic
, но не типаbit
, насколько я вижу. - person Matthew Taylor   schedule 13.07.2018