Verilog назначить проверку результата оператора - PullRequest
1 голос
/ 20 января 2020

плохо знакомы с Verilog (ну, на самом деле, SystemVerilog, но я обнаружил, что для самых базовых ключевых слов c, таких как assign и initialize, я также могу учиться на ресурсах Verilog). Я следую примеру 2 по этой ссылке chipverify example 2 . Это просто, поэтому я запишу это. Я чувствую, как будто они совершили ошибку, но так как я новичок ie, трудно понять, правильно ли мое чувство или нет.

module xyz (input [3:0] x, //let x='hC or x='b1100 for this example's purposes
            input       y, //y is a 1bit scalar y='h1 = 'b1
            output [4:0] z);
//case 8
assign z = {3{y}};

endmodule    

В случае 8 они говорят, что z приведет к z = 'b00111. Я не думаю, что это правильно! Следуя их случаю 3, где z назначены только биты [4: 1], он заявил, что бит расширения не будет извлечен и, следовательно, приведет к высокому импедансу Z. Если бы результат случая 8 не был тогда z = ' bZZ111 , а не z = 'b00111 ?

Дайте мне знать, спасибо! =)

1 Ответ

4 голосов
/ 20 января 2020

Из раздела 10.7 (Расширение назначения и усечение) в IEEE Std 1800-2017 (стандарт SystemVerilog),

  • Когда правая часть оценивает меньшее количество битов, чем левая с правой стороны, значение с правой стороны дополняется до размера с левой стороны.

В вашем случае {3 {y}} является значением без знака, поэтому 0 дополняется до 5 битов, то есть 5'b00111, а затем присваивается z.

...