У меня серьезная проблема совместимости с моим системным кодом verilog.
У меня есть эта строка: c = $sscanf(line, "0x%x %s %s %d", hex_value, type, name, size);
Использование компилятора vcs дает результат: c = 4, hex_value = 0x001, type = "empty", name = "mem_block", size = 8
При использовании Questasim vlog -sv
и vsim -c
дает результат: c = 0, hex_value = 0x000, type = "", name = "", size = 0
Кто-нибудь знает решение для этой или другой функции сканирования строк?
Редактировать:
Я нашел причину, по которой я не распечатал правильный вывод. Я использовал:
display($sformatf("c=%d, hex_value = %x, type=%s, size=%s", c, hex_value, type, name, size));
Изменил это значение на $display($sformatf(line, "c=%d, hex_value = %x, type=%s, size=%s", c, hex_value, type, name, size));
, и оно отлично заработало в Questasim, но не в VCS. У меня все еще есть проблема с тем, что c
возвращается как 0
из $sscanf
, а также не устанавливает значения hex_value
и т. д.
Редактировать 2:
Нашел проблему, но не решение
Причиной ошибки/проблемы является 0x%x
, где VCS нужно, чтобы это не помещало что-то вроде 0x0f1
, в то время как в Questasim это приводит к тому, что все значения по умолчанию равны 0, так что c=0, hex_value=0x00, type=""
и т. д. Кто-нибудь знает хороший способ решить эту проблему? Я пробовал разные комбинации 0x
и x0
до %x
, но ничего не работает. hex_value
определяется так typedef bit unsigned [63:0] hex_addr_t;
type
является ключевым словом SystemVerilog и должно вызвать проблемы, переименуйте его (например,_type
илиtype_
). Почему вы кладете$sformatf
внутрь$display
? Попробуйте:$display("c=%d, hex_value = %x, type=%s, name=%s, size=%d", c, hex_value, _type, name, size);
илиoutput_msg = $sformatf("c=%d, hex_value = %x, type=%s, name=%s, size=%d", c, hex_value, _type, name, size); $display("%s", output_msg);
- person Greg   schedule 07.08.2014