Постоянное дополнение в Verilog - PullRequest
1 голос
/ 20 апреля 2020

Вот пример поведенческого кода Verilog, о котором идет речь

module constant;
    reg [7:0] foo;
    initial begin
        foo = 1'bz;
        $display("%H", foo);
    end
endmodule

Icarus Verilog дал мне

$ iverilog -o constant constant.v
$ ./constant
0Z

Однако, согласно этот сайт (и лектор курса ПЛИС, который я беру),

Если число меньше константы размера, то оно будет дополнено нулями слева. Если старший значащий бит указанного числа имеет неизвестное (x) или высокоимпедансное (z) значение, то это значение будет использоваться для заполнения влево.

В этом случае вывод должен быть ZZ вместо 0Z. Я почти уверен, что это связано с изменением спецификации (возможно, это ZZ в Verilog 1995 и 0Z в Verilog 2001 или что-то еще), но какие стандарты приводят к каждому поведению? Я попытался найти спецификацию в Интернете, но, похоже, она не доступна бесплатно, например , эта , для которой требуется покупка или подписка.

В качестве бонуса, где я могу найти Сводка изменений в различных спецификациях Verilog?

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

SystemVerilog IEEE 1800-2017 гласит:

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

Однако число здесь не меньше константы размера - размер здесь "1" в 1'bz.

С точки зрения преобразования результатов выражений стандарт гласит:

Автоматические c преобразования типов из меньшего числа бит в большее количество бит включают нулевое расширение, если оно не подписано или подписать расширения, если подписано. Автоматические преобразования типа c из большего числа бит в меньшее количество бит включают усечение старших значащих бит (MSB).

Поскольку это выражение без знака и результат, 1'bz Затем буквенное выражение расширяется до нуля, чтобы соответствовать 8-битному размеру foo.

IEEE 1800-2017 можно бесплатно загрузить для всех с веб-сайта IEEE.

1 голос
/ 20 апреля 2020

Полагаю, вы путаете то, что происходит с литералами числительных c (например, 8'bz) и значениями в выражении. Числовые значения c будут заполнять указанные z или z до указанной ширины. Но как только ваш лектор сказал, что в выражении без знака значения будут дополнены 0, а значения со знаком дополнены.

Только последняя версия стандарта IEEE находится в свободном доступе - необходимо приобрести более старую версию. Этот веб-сайт показывает последние изменения в стандарте SystemVerilog.

...