UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 16813

3.2 EDK LibGen - "ERROR:MDT - system.mss:18 - Cannot find MDD for the driver"

Description

Keywords: MDD, LibGen, custom driver, MSS, XPS, EDK

Urgency: Standard

General Description:
When running 3.1 EDK designs containing custom drivers for a user IP, LibGen reports the following errors:

"Checking platform configuration ...
ERROR:MDT - system.mss:18 - Can not find MDD for the driver pwm 1.00.a
INFO:MDT - Check the following for possible causes of not finding MDD:
- If DRIVER_VER is specified in MSS, it must follow literal form X.YY.Z
- There is no driver with given name
- Driver exists but not that version
- Driver and version (directory) exist but no MDD is available"

Solution

1

The MDD syntax changed from EDK 3.1 to EDK 3.2.

The following is a line-by-line comparison of an MDD file between EDK 3.1 and EDK 3.2. The information included in the "< >" must be completed by you to match your driver requirements.
3.1:
BEGIN driver <drivername>
constant VERSION = 2.0.0 # uses SIF 2.0.0
parameter LEVEL = 0 # default level
END

3.2:
OPTION psf_version = 2.1.0

BEGIN driver <drivername>
PARAM name = level, desc = "Driver Level", type = int, default = 0, range = (0, 1); # Specify all levels
..
END driver
=================================================================

3.1:
BEGIN level <n>
...
END

3.2:
BEGIN BLOCK , dep = (level = <n>)
...
END BLOCK
=================================================================

3.1:
constant DEPENDS = (<x> <y> ...)

3.2:
OPTION depends = (<x> <y> ...) =================================================================

3.1:
constant COPYFILES = (<x> <y> ...)

3.2:
OPTION copyfiles = = (<x> <y> ...) =================================================================

3.1:
constant INBYTE = <x>, DEFINED_IN = <y>

3.2:
BEGIN INTERFACE stdin
PROPERTY header = <y.h>;
FUNCTION name = inbyte, value = <x>;
END INTERFACE
=================================================================

3.1:
constant OUTBYTE = <x>, DEFINED_IN = <y>

3.2:
BEGIN INTERFACE stdin
PROPERTY header = <y.h>;
FUNCTION name = outbyte, value = <x>;
END INTERFACE


If both INBYTE and OUTBYTE are present,

3.2:
BEGIN INTERFACE stdio
PROPERTY header = xuartlite_l.h;
FUNCTION name = inbyte, value =<x>;
FUNCTION name = outbyte, value = <y>;
END INTERFACE =================================================================

3.1:
parameter INT_HANDLER = <x>, INT_PORT = &lti>

3.2:
BEGIN ARRAY int_handler
PROPERTY desc = "Interrupt Handler Information";
PROPERTY size = 1, permit = none;
PARAM name = int_handler, default = <x>, desc = "Name of Interrupt Handler", type = string;
PARAM name = int_port, default = &lti>, desc = "Interrupt pin associated with the interrupt handler", permit = none;
END ARRAY


If more than one interrupt handler exists, the following changes are present within the array:
PROPERTY size = <n>, permit = none;
PROPERTY default = ((<x1>, <i1>), (<x2>,< i2>), ...)
PARAM name = int_handler, desc = "Name of Interrupt Handler", type = string;
PARAM name = int_port, desc = "Interrupt pin associated with the interrupt handler", permit = none; =================================================================
All of the above changes are created in the MDD file (_v2_1_0.mdd).

2

To solve this issue, you must write a small Tcl file (_v2_1_0.tcl) to support the MDD file (_v2_1_0.mdd).

1. Check to see if the following statements occur within the EDK 3.1 level 1 MDD file:

constant CONFIG_INCLUDE = <x>, VALUES = ( NUM_INSTANCES C_BASEADDR DEVICE_ID )
constant CONFIG_FILE = <y>, VALUES = ( DEVICE_ID C_BASEADDR )

2. If so, then the following information must be written to the Tcl file; change the <x> and <y> to the appropriate file names associated with your driver.

proc generate {drv_handle} {
set level [xget_value $drv_handle "PARAMETER" "level"]

if {$level == 1} {
xdefine_include_file $drv_handle "<x>.h" "<drivername>" "NUM_INSTANCES" "C_BASEADDR" "C_HIGHADDR" "DEVICE_ID"
xdefine_config_file $drv_handle "<y>.c" "<drivername>" "DEVICE_ID" "C_BASEADDR"
}
}
AR# 16813
Date Created 03/06/2003
Last Updated 04/28/2006
Status Archive
Type General Article