group-telegram.com/enginegger/104
Create:
Last Update:
Last Update:
Нашел забавную ошибку в Вериляторе. При иерархической передаче строки в параметре модуля через два и более модуля строка может не дойти до конечного потребителя. Зависит это от того, указан ли, и где конкретно, тип параметра. Если во всей цепочке тип параметра отсутствует (выводится из дефолтного значения), то строка проходит. Если тип везде указан, то тоже проходит. А если во втором модуле тип не указать, то туда приходит строка той же длины, только заполненная пробелами. Причём, если её передать дальше, то она совсем обнулится.
Вот пример кода с багом:
module string_param_0 #(parameter S = "");
initial $display("S = '%s'", S);
endmodule
module string_param_1 #(parameter string S = "");
string_param_0 #(.S(S)) u_sp0();
endmodule
module test;
string_param_1 #(.S("Greetings from the old shoes")) u_sp1();
initial #1 $finish;
endmodule
Вывод такой:
S = ' '
Если добавить тип параметра в первый модуль или убрать тип из второго, то вывод будет корректным:
S = 'Greetings from the old shoes'
BY Arnold Enginegger
Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260
Share with your friend now:
group-telegram.com/enginegger/104