August 02, 2007

Popular tool breakouts!

MataiTech is planning to break out the most popular tools contained within its NAUET suite and make them available as individual tools.  This is to occur very soon after the release of NAUET 2.0.

The product breakouts will include (but will not be limited to)

SW-XACT (tm): generates C/C++, System C and test code headers for input SPIRIT IP-XACT files. 

HW-XACT (tm): Automatically writes RTL to link IP blocks and creates headers for VHDL and Verilog for input IP-XACT files.

XACT-XACT (tm):  Lints and sematic checks IP-XACT files (this may also be called XACT-LINT (tm)).

XACT-DOCS (tm): creates user customizable data sheets and documentation from input IP-XACT files.

XACT-EDIT (tm): Component editor allows creation of IP-XACT components without the need to write XML.

XACT-BOOK (tm): contains pre-entered OpenCores IP in IP-XACT format.  Discussions are now in process to expand the XACT-BOOK (tm) to include much more IP form various IP houses.

XACT-PACK (tm): Contains all the forementioned tools and databooks.

Furthermore, MataiTech is now marketing its contracting services under the trademark XACT-XPERTS (tm).  MataiTech engineers can package your IP in IP-XACT format.  If you wish, MataiTech can include your IP within the XACT-BOOK (tm).  XACT-XPERTS (tm) can also provide training, support and engineering to create IP-XACT generators for your design flow and can convert your design flow to IP-XACT.

###

SW-XACT (tm), HW-XACT (tm), XACT-XACT (tm), XACT-DOCS (tm), XACT-EDIT (tm), XACT-PACK (tm) are all trademaks of MataiTech.  IP-XACT is a registered trademark of the SPIRTI Consortium.  OpenCores is a trademark of OpenCores.org.

Using IP Import on NAUET 1.8

It has come to my attention that the User's Guide for 1.8 does not document the IP-Import feature. 

I have attempted to document the steps here (with the help of our engineering staff, of course).  There aren't many steps, so it is pretty easy.

1. Select File->Open Template->Slave. Along with importing signals, this creates a slave bus interface, an empty memory map for registers, and links the slave interface to the memory map. Alternatively one may choose master creates a master bus interface, and empty address space, and links the master interface to the address space.

2. The user is prompted to select the top-level VHDL or Verilog file with a standard file select dialog. 
3. The user is then prompted to select the rest of the files with a standard multiple-pick file select dialog (i.e, shift-click and ctrl-click and other multi-choose options work with this dialog).
Apart from the things created in step 1, this creates a signal for each signal in the top-level file, a fileset containing all of the files from steps 2 and 3 (if the file in 2 is selected again in 3, it is not added a second time), a reasonable guess at the type of each file, and a view linked to the fileset.
In the upcoming 2.0 release we are planning to eliminate step 2 - we should be able to figure out which file from step 3 is a top-level file.  Also we are improving step 3 such that it will repeat until the user clicks cancel.

May 23, 2007

group drop down - NAUET 1.8

We recently became aware the "group" drop down is not explained in the User's Guide.  Here is a quick post to explain a little bit about how it works.

In order for the “group” drop-down list in a component bus interface to provide choices for group both of the following must be true:

  1. The bus definition referenced in the busType field must have at least one signal with an “onSystem” child with the group field filled in.
  2. The actual direction of the bus interface (master, slave, system, etc.) must be sytem or mirroredSystem. Simply selecting system on the drop-down is not enough. In order to make the change permanent, use the “apply edits” menu item in the edit menu, use the keyboard shortcut control-enter, or select another item.

If a bus definition has no signals with onSystem children, it means the bus definition is probably not intended for system bus interfaces interfaces. Before applying the edit, it is possible to cancel out of the edit, and the program cannot make the connection. A more elegant solution is in the works.

March 08, 2007

SPIRIT IP-XACT made easier with NAUET

  Nauet_box

An Introduction to NAUET

The NAUET package includes the NAUET Design Assembler, the NAUET Component Editor, and a library of IP-XACT documents describing OpenCore open source IP. We use the NAUET Component Editor to create all the components and bus definitions in that library. It is so helpful, we cannot imagine going back to using ordinary XML editors for IP-XACT documents. To illustrate how it can help, we are going to use the Component Editor to review some documents created with a typical XML editor.

The SPIRIT Consortium is the organization responsible for the IP-XACT standard. They include a few examples with every release of the standard. The comments in these example documents indicate the files were created with XML Spy, an excellent XML editor for typical XML documents. On Feb 16, 2007 we downloaded the IP-XACT V1.2 public release from the SPIRIT Consortium website and loaded 12 files from the Leon2 example into the Component Editor.

Note: the documents will all be identified by name only. All the documents have vendor “spiritconsortium.org”. The lone bus definition, Int, has library “leon” and version “v1.0”.All other documents have library “leon2” and version “1.2”. APBSubSystem is a design, and all the other documents are components.

Please take advantage of our free 30-day demonstration of NAUET and follow along the steps described yourself. After opening the files, the following report would automatically generate in the background in a minute or two; alternatively, a menu item can generate the report in the foreground in less than 5 seconds.

spiritconsortium.org Leon Int v1.0

1. IRQ ( Signal )

spiritconsortium.org Leon Int v1.0:

busDefinition\signals\signal\defaultValue\strength is not a valid path.

busDefinition\signals\signal\defaultValue\strength is not a valid path.

2. IRL ( Signal )

spiritconsortium.org Leon Int v1.0:

busDefinition\signals\signal\defaultValue\strength is not a valid path.

busDefinition\signals\signal\defaultValue\strength is not a valid path.

spiritconsortium.org Leon2 ahbbus 1.2

3. AHBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_CLK does not match any group found in "AMBA AMBA2 AHB r0p0".

4. AHBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_RESET does not match any group found in "AMBA AMBA2 AHB r0p0".

5. MirroredMaster0 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

6. MirroredMaster1 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

7. MirroredSlave0 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

Rule 37 violation: element range has a dependency attribute but resolve attribute is not dependent

8. ( Remap Address )

Rule 37 violation: element remapAddress has a dependency attribute but resolve attribute is not dependent

9. MirroredSlave1 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

Rule 37 violation: element range has a dependency attribute but resolve attribute is not dependent

10. ( Remap Address )

Rule 37 violation: element remapAddress has a dependency attribute but resolve attribute is not dependent

spiritconsortium.org Leon2 ahbstat 1.2

11. AHBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_CLK does not match any group found in "AMBA AMBA2 AHB r0p0".

12. AHBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_RESET does not match any group found in "AMBA AMBA2 AHB r0p0".

13. ambaAHBSlave ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

14. ambaAHBMaster ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

15. ambaAPB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

16. hsize ( Field )

Rule 51 violation: this field (LSB=0, MSB=2) overlaps with field newError (LSB=1, MSB=8)

17. newError ( Field )

Rule 51 violation: this field (LSB=1, MSB=8) overlaps with field hsize (LSB=0, MSB=2)

spiritconsortium.org Leon2 apbbus 1.2

18. MirroredMaster ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

19. MirroredSlave0 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

20. MirroredSlave1 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

21. MirroredSlave2 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

22. MirroredSlave3 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

spiritconsortium.org Leon2 apbmst 1.2

23. AHBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_CLK does not match any group found in "AMBA AMBA2 AHB r0p0".

24. AHBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_RESET does not match any group found in "AMBA AMBA2 AHB r0p0".

25. ambaAHB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

26. ambaAPB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

27. haddr ( Signal in )

Signal Match Warning: signal haddr definition does not match values found in file:

left (file value is hamax-1 )

spiritconsortium.org Leon2 dma 1.2

28. AHBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_CLK does not match any group found in "AMBA AMBA2 AHB r0p0".

29. AHBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_RESET does not match any group found in "AMBA AMBA2 AHB r0p0".

30. ambaAHB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

31. ambaAPB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

32. destinationAddress 0x4 ( Register )

Rule 50 violation: This register overlaps register control.

33. control 0x4 ( Register )

Rule 50 violation: This register overlaps register destinationAddress.

34. length ( Field )

Rule 51 violation: this field (LSB=0, MSB=7) overlaps with field sourceIncrement (LSB=0, MSB=1)

35. sourceIncrement ( Field )

Rule 51 violation: this field (LSB=0, MSB=1) overlaps with field length (LSB=0, MSB=7)

36. enable ( Field )

Rule 51 violation: this field (LSB=0, MSB=0) overlaps with field length (LSB=0, MSB=7)

spiritconsortium.org Leon2 irqctrl 1.2

37. APBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

38. APBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

39. ambaAPB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

spiritconsortium.org Leon2 leon2Proc 1.2

40. leon2Proc 1.2 ( Component )

Unused Signal Warning: the following signals were found in leon2Proc but not in this component: diagrdy.

41. AHBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_CLK does not match any group found in "AMBA AMBA2 AHB r0p0".

42. AHBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_RESET does not match any group found in "AMBA AMBA2 AHB r0p0".

43. AHBmaster ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

44. APBslave ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

45. AHBslave ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

46. clk ( Signal in )

Signal Match Warning: clk does not match any signal found in any file.

47. clkn ( Signal in )

Signal Match Warning: clkn does not match any signal found in any file.

48. diagrdv ( Signal out )

Signal Match Warning: diagrdv does not match any signal found in any file.

spiritconsortium.org Leon2 timers 1.2

49. APBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

50. APBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

51. ambaAPB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

spiritconsortium.org Leon2 uart 1.2

52. APBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

53. APBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

54. ambaAPB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

55. reserved ( Field )

Rule 53 violation: field reserved has MSB of 33 with parent register size of 32.

56. OutputFileName ( Parameter )

Rule 42 violation: In an id attribute is required in any element with a resolve attribute value of user

spiritconsortium.org Leon2 APBSubSystem 1.2

57. i_apbbus ( Component Instance )

Rule 2 violation: "spiritconsortium.org Leon2 leon2_apbbus 1.2" does not match any identifier in the IP Library

Rule 11 violation: "spiritconsortium.org Leon2 leon2_apbbus 1.2" is not a component.

58. i_apbmst ( Component Instance )

Rule 2 violation: "spiritconsortium.org Leon2 leon2_apbmst 1.2" does not match any identifier in the IP Library

Rule 11 violation: "spiritconsortium.org Leon2 leon2_apbmst 1.2" is not a component.

59. i_irqctrl ( Component Instance )

Rule 2 violation: "spiritconsortium.org Leon2 leon2_Irqctrl 1.2" does not match any identifier in the IP Library

Rule 11 violation: "spiritconsortium.org Leon2 leon2_Irqctrl 1.2" is not a component.

60. i_timers ( Component Instance )

Rule 2 violation: "spiritconsortium.org Leon2 leon2_Timers 1.2" does not match any identifier in the IP Library

Rule 11 violation: "spiritconsortium.org Leon2 leon2_Timers 1.2" is not a component.

61. i_uart1 ( Component Instance )

Rule 2 violation: "spiritconsortium.org Leon2 leon2_Uart 1.2" does not match any identifier in the IP Library

Rule 11 violation: "spiritconsortium.org Leon2 leon2_Uart 1.2" is not a component.

62. i_uart2 ( Component Instance )

Rule 2 violation: "spiritconsortium.org Leon2 leon2_Uart 1.2" does not match any identifier in the IP Library

Rule 11 violation: "spiritconsortium.org Leon2 leon2_Uart 1.2" is not a component.

spiritconsortium.org Leon2 hierAHBSystem 1.2

63. AHBClk ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_CLK does not match any group found in "AMBA AMBA2 AHB r0p0".

64. AHBReset ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

AHB_RESET does not match any group found in "AMBA AMBA2 AHB r0p0".

65. ambaAHB ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 AHB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 AHB r0p0" is not a bus definition.

66. APBClk0 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

67. APBReset0 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

68. APBClk1 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

69. APBReset1 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

70. APBClk2 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

71. APBReset2 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

72. APBClk3 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_CLK does not match any group found in "AMBA AMBA2 APB r0p0".

73. APBReset3 ( Bus Interface )

Rule 2 violation: "AMBA AMBA2 APB r0p0" does not match any identifier in the IP Library

Rule 4 violation: "AMBA AMBA2 APB r0p0" is not a bus definition.

APB_RESET does not match any group found in "AMBA AMBA2 APB r0p0".

74. 0x00 ( Address Block )

Address Block Overlap Warning: Address block with base address 0x10 overlaps the range of this address block.

75. 0x10 ( Address Block )

Address Block Overlap Warning: Address block with base address 0x40 overlaps the range of this address block.

76. reserved ( Field )

Rule 53 violation: field reserved has MSB of 33 with parent register size of 32.

77. reserved ( Field )

Rule 53 violation: field reserved has MSB of 33 with parent register size of 32.

End of list. Note that the Component Editor lint report does not number the items or include document identifiers as shown - those were added for convenience of referencing. In the Component Editor, selecting a lint item also selects the problem element for editing, and other features would make clear which open document is selected.

The initial lint report lists 77 elements with potential problems. At this point, most of the problems NAUET identified are violations of IP-XACT v1.2 semantic rule 2, which states, “Any VLNV in an IP-XACT document used to reference another IP-XACT document shall precisely match the identifying VLNV of an existing IP-XACTdocument.“ Cross-reference problems like these are the most urgent since other semantic rules depend on the contents of the referenced document.

Almost all of the rule 2 violations (49 by my count) occur because the SPIRIT Consortium does not supply bus definitions for AMBA AHB or APB, which are used in all of the components. These definitions are available by registering with ARM. The examples, however, do not use the identifier used by AMBA (for ahb, SPIRIT uses “AMBA AMBA2 AHB r0p0”, while AMBA uses “amba.com busdef.amba.amba2 ahb r1p0”) so 49 bus interfaces need fixing. Using the NAUET Component Editor, it only takes a few mouse clicks to fix each one - 1 to select a problem bus interface, another to activate the busType choicebox showing all the valid bus definitions available and one more to choose the new bus definition. Finding other problem elements is easy - their labels are bold and red, and they are also listed prominently. Fixing all 49 bus interfaces took me less than 10 minutes.

February 07, 2007

Welcome

Welcome to MataiTech's NAUET blog.