本节通过一个 MDD 文件示例及其对应的 Tcl 文件来详解 MDD 格式。
MDD 文件示例
以下是 uartlite 驱动程序的 MDD 文件示例。
option psf_version = 2.1;
option
是该工具识别的关键字。option
关键字后的选项名称是发送给工具的一条指令,以指示工具执行特定操作。此处 MDD 文件的 psf_version
定义为 2.1。这是唯一可在 BEGIN DRIVER
构造之前发生的选项。
BEGIN DRIVER uartlite
BEGIN DRIVER
构造用于定义名为 uartlite 的驱动程序的起始位置。
option supported_peripherals = (mdm axi_uartlite);
option driver_state = ACTIVE;
option copyfiles = all;
option VERSION = 3.0;
option NAME = uartlite;
NAME
选项用于指示驱动程序的名称。VERSION
选项用于指示驱动程序的版本。COPYFILES
选项用于指示要为“level”为 0 的 uartlite 驱动程序复制的文件。
BEGIN INTERFACE stdin
BEGIN INTERFACE
用于定义此驱动程序支持的接口。此接口名为 stdin
。
PROPERTY header = xuartlite_l.h;
FUNCTION name = inbyte, value = XUartLite_RecvByte;
END INTERFACE
每个接口都包含一份标准函数列表。定义接口的驱动程序应包含标准函数列表的对应值。它还必须指定头文件以供在其中定义所有函数原型。
PROPERTY
用于定义与 BEGIN
构造中定义的构造相关联的属性。头文件是值为 xuartlite_l.h
的属性,由 stdin
接口来定义。FUNCTION
用于定义接口所支持的函数。stdin 接口的 inbyte 函数值为 XUartLite_RecvByte
。此函数在头文件 xuartlite_l.h
中进行定义。
BEGIN INTERFACE stdout
PROPERTY header = xuartlite_l.h;
FUNCTION name = outbyte, value = XUartLite_SendByte;
END INTERFACE
BEGIN INTERFACE stdio
PROPERTY header = xuartlite_l.h;
FUNCTION name = inbyte, value = XUartLite_RecvByte;
FUNCTION name = outbyte, value = XUartLite_SendByte;
END INTERFACE
END
搭配 BEGIN
语句中所使用的构造名称一起使用。此处 END
搭配 BLOCK
和 DRIVER
构造一起用于指示每个 BLOCK
和 DRIVER
构造的结束位置。
示例:Tcl 文件
以下 uartlite.tcl
文件对应于上一节中所描述的 uartlite.mdd
文件。为 uartlite 驱动程序运行 DRC 时,应为该驱动程序调用“uartlite_drc”过程。generate 例程会根据 MSS 文件中的驱动程序定义段,在头文件或 c 语言文件中为 uartlite 驱动程序生成常量。
proc generate {drv_handle} {
::hsi::utils::define_include_file $drv_handle "xparameters.h"
"XUartLite" "NUM_INSTANCES" "C_BASEADDR"
"C_HIGHADDR" "DEVICE_ID" "C_BAUDRATE" "C_USE_PARITY" "C_ODD_PARITY"
"C_DATA_BITS"
::hsi::utils::define_config_file $drv_handle "xuartlite_g.c"
"XUartLite" "DEVICE_ID" "C_BASEADDR"
"C_BAUDRATE" "C_USE_PARITY" "C_ODD_PARITY" "C_DATA_BITS"
::hsi::utils::define_canonical_xpars $drv_handle "xparameters.h"
"UartLite" "DEVICE_ID" "C_BASEADDR"
"C_HIGHADDR" "C_BAUDRATE" "C_USE_PARITY" "C_ODD_PARITY" "C_DATA_BITS"
}