Verilog基础:$display系统函数和C语言中的库函数printf的区别-Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.

时间:2024-10-02 07:49:52

        Verilog中的$display系统函数和C语言中的库函数printf都是用于输出信息,但它们的用法存在一定差别,本文将简要描述。

        $display系统函数的BNF范式如下图所示。

        其中的list_of_arguments是逗号分隔的参数列表,参数可以是一个字符串,一个返回值的表达式,或者留空。$display系统函数会按照从左到右的顺序依次输出其参数。

        字符串中可以有如下表所示的转换说明。

转换说明 描述
%h或%H 以十六进制显示
%d或%D 以十进制显示
%o或%O 以八进制显示
%b或%B 以二进制显示
%c或%C 以ASCII字符显示
%l或%L 以库信息显示
%v或%V 以线网强度显示
%m或%M 以层次名字显示
%s或%S 以字符串显示
%t或%T 以仿真时间显示
%u或%U 以无格式二值二进制显示
%z或%Z 以无格式四值二进制显示

        对于每一个出现在字符串中的转换说明,都要有一个对应的表达式作为在其后的参数。当表达式不对应转换说明时,其按照十进制的形式输出。

        下面是$display系统函数使用的实例。

module example_display;
    reg [3:0] data;

    initial begin
      data = 4'b1010; 
      $display("The value of data is: %b", data, " The value of data is %d", data, , data);
    end
endmodule

输出:
The value of data is: 1010 The value of data is 10 10

        对于C语言中的库函数printf,其函数原型如下所示。

int printf(const char *format, ...);

        其中format是一个字符指针,常用一个字符串表示(字符串字面量就代表着第一个字符的指针),它被称作是格式字符串,中间可以包含转换说明 。

        但是,与Verilog不同的是,库函数printf只有第一个参数是格式字符串,后续参数的个数需要和转化说明的个数匹配。

        下面是$display系统函数使用的实例。 

#include <stdio.h>
int main() {
	int a = 12;
    printf("This is a %d and this is %s.\n", a, "example");
    return 0;
}

输出:
This is a 12 and this is example.