Чтение из IEEE 1800-2012 Раздел 11.5.1 :
Бит может быть адресован с использованием выражения, которое должно оцениваться в самоопределяемом контексте. Если битсовый адрес недействителен (это вне границ или имеет один или несколько битов x или z), тогда значение, возвращаемое ссылкой, должно быть x для 4-состояния и 0 для 2-состояния значения. Битовый выбор или частичный выбор скаляра или реального переменного или реального параметра должны быть незаконными.
blockquote>Как упоминалось в 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] b; // -> r2 = 00 b [3: 2] = 00
reg [1: 0] r2; бит [1: 0] b; // -> r2 = 00 b [3: 2] = 00. VCS 2014 имеет ошибку, в которой он решает это уравнение с 4 значениями состояния.
бит [1: 0] r2; reg [1: 0] b; // -> r2 = 00 b [3: 2] = xx. Здесь x оптимизирован до значения по умолчанию бит.
reg [1: 0] r2; reg [1: 0] b; // -> r2 = xx b [3: 2] = xx
blockquote>Обратите внимание, что результат всегда ожидается как «x», когда мы сами используем part-select как «x», ,
Частичный выбор, который адресует диапазон битов, которые полностью выходят из границ адреса вектора, упакованного массива, упакованной структуры, параметра или конкатенации или частичного выбора, который равен x или z должны давать значение x при чтении и не влиять на данные, сохраненные при записи.
blockquote>Вышеописанный выше из того же раздела из LRM.