Я пытаюсь создать описатель переменного формата для использования в $ display / $ write. Я перепробовал множество вещей, но вот то, что у меня есть на данный момент.
В итоге я хочу получить: $ display (format_var, data_1, data_2), где строка формата предварительно вычисляется с использованием $ sformatf или другого.
Код:
module test;
function void pprint(input int data_1,input int field_1,input int data_2,input int field_2);
string format;
begin
format = $sformatf("%0d'h%%%0dx,%0d'h%%%0dx",field_1,field_1/4,field_2,field_2/4);
$display("format = %s",format);
$display(format,data_1,data_2);
end
endfunction
initial
begin
pprint(5,8,73737229,128);
$stop;
end
endmodule
Ожидаемый результат:
format = 8'h%2x,128'h%32x
8'h05,128'h000000000000000000000000465240D
Я получаю следующий результат:
format = 8'h%2x,128'h%32x
8'h%2x,128'h%32x 5 73737229
Что мне нужно сделать? Симулятор Vivado 2020.3
Позже:
Попробую еще раз, следующая функция делает то, что я хочу. Я пришел к выводу, что $ display / $ write не может принимать переменную в качестве строки формата, а $ sformatf может.
function void pprint(input int data_1,input int field_1,input int data_2,input int field_2);
string format;
string outstr;
begin
format = $sformatf("%0d'h%%%0dx,%0d'h%%%0dx",field_1,field_1/4,field_2,field_2/4);
$display("format = %s",format);
$display("%s",$sformatf(format,data_1,data_2));
end
endfunction