1 | $Id$ |
---|
2 | |
---|
3 | nios2gen: |
---|
4 | Tool to generate BSP data for boards utilizing NIOS2 soft core processor. |
---|
5 | |
---|
6 | ================================= |
---|
7 | What it does |
---|
8 | |
---|
9 | It creates a sopc.h and linkcmds file for RTEMS nios2 BSPs from one or more inputs: |
---|
10 | |
---|
11 | 1. SOPC System Description PTF |
---|
12 | |
---|
13 | As an output from SOPC Builder you get a file with extension ".ptf" that fully |
---|
14 | describes the SOPC, including all CPUs, memory and integrated peripherals. |
---|
15 | (PTF simply means "plain-text file"). |
---|
16 | |
---|
17 | 2. BSP Configuration PTF |
---|
18 | |
---|
19 | This file, using the same format as the SOPC System Description PTF, describes |
---|
20 | which components of the SOPC shall be used by the BSP. For example, there may |
---|
21 | be several timers, but a BSP wants at least one named "CLOCK" and optionally |
---|
22 | another named "TIMER". This mapping can be specified in the BSP. |
---|
23 | |
---|
24 | ================================= |
---|
25 | Contents of the configuration PTF |
---|
26 | |
---|
27 | There can be definitions of ... |
---|
28 | |
---|
29 | HEADER: This is written to sopc.h before anything else. Example: |
---|
30 | |
---|
31 | HEADER = " |
---|
32 | #ifndef __SOPC_H |
---|
33 | #define __SOPC_H 1 |
---|
34 | "; |
---|
35 | |
---|
36 | EPILOG: This is written to sopc.h after anything else. Example: |
---|
37 | |
---|
38 | EPILOG = " |
---|
39 | #endif |
---|
40 | "; |
---|
41 | |
---|
42 | CLOCKS section: Used to specify names for clocks to be used in definitions in |
---|
43 | the sopc.h. The default name (if none is specified here) is the uppercased name |
---|
44 | as in the system description PTF. Specify the name you want on the left, the |
---|
45 | name in the sopc PTF on the right! Example: |
---|
46 | |
---|
47 | CLOCKS |
---|
48 | { |
---|
49 | GLOBAL_CLOCK = "sys_clk"; |
---|
50 | } |
---|
51 | |
---|
52 | MODULES section: Same as clocks but for modules / peripherals. As a special definition, |
---|
53 | if the PTF contains more than one nios2 CPU, it /must/ define a CPU to use. Example to |
---|
54 | select cpu_0 and rename timer_0 to CLOCK and timer_1 to TIMER: |
---|
55 | |
---|
56 | MODULES |
---|
57 | { |
---|
58 | CPU = "cpu_0"; |
---|
59 | CLOCK = "timer_0"; |
---|
60 | TIMER = "timer_1"; |
---|
61 | } |
---|
62 | |
---|
63 | CLASS xyz sections: These specify what you want in the sopc.h, and how the definitions |
---|
64 | shall be named. Actually, the CLASS xyz should look exactly like the corresponding MODULE |
---|
65 | specification in the system description PTF of modules belonging to that class; e.g. a |
---|
66 | a JTAG UART is originally described like this: |
---|
67 | |
---|
68 | MODULE jtag_uart_0 |
---|
69 | { |
---|
70 | class = "altera_avalon_jtag_uart"; |
---|
71 | class_version = "1.0"; |
---|
72 | iss_model_name = "altera_avalon_jtag_uart"; |
---|
73 | SLAVE avalon_jtag_slave |
---|
74 | { |
---|
75 | SYSTEM_BUILDER_INFO |
---|
76 | { |
---|
77 | Bus_Type = "avalon"; |
---|
78 | Is_Printable_Device = "1"; |
---|
79 | Address_Alignment = "native"; |
---|
80 | Address_Width = "1"; |
---|
81 | Data_Width = "32"; |
---|
82 | Has_IRQ = "1"; |
---|
83 | Read_Wait_States = "peripheral_controlled"; |
---|
84 | Write_Wait_States = "peripheral_controlled"; |
---|
85 | JTAG_Hub_Base_Id = "0x04006E"; |
---|
86 | JTAG_Hub_Instance_Id = "0"; |
---|
87 | MASTERED_BY cpu_0/data_master |
---|
88 | { |
---|
89 | priority = "1"; |
---|
90 | } |
---|
91 | IRQ_MASTER cpu_0/data_master |
---|
92 | { |
---|
93 | IRQ_Number = "2"; |
---|
94 | } |
---|
95 | Base_Address = "0x08000000"; |
---|
96 | } |
---|
97 | } |
---|
98 | ... |
---|
99 | } |
---|
100 | |
---|
101 | If you want to have definitions about its base address and irq number in your sopc.h, |
---|
102 | define a CLASS for altera_avalon_jtag_uart that matches the MODULE description above, |
---|
103 | but instead of values for the items you specify names to be used in your sopc.h (You |
---|
104 | can omit items from the MODULE as you like, but the section nesting must match; and |
---|
105 | section names (such as avalon_jtag_slave for the SLAVE section) also have to match) |
---|
106 | |
---|
107 | CLASS altera_avalon_jtag_uart |
---|
108 | { |
---|
109 | SLAVE avalon_jtag_slave |
---|
110 | { |
---|
111 | SYSTEM_BUILDER_INFO |
---|
112 | { |
---|
113 | Base_Address = "BASE_ADDR"; |
---|
114 | IRQ_MASTER { IRQ_Number = "IRQ"; } |
---|
115 | } |
---|
116 | } |
---|
117 | } |
---|
118 | |
---|
119 | The output for jtag_uart_0 will be: |
---|
120 | |
---|
121 | #define JTAG_UART_BASE_ADDR 0x021208D0 |
---|
122 | #define JTAG_UART_IRQ 1 |
---|
123 | |
---|
124 | There are some values with special meaning to nios2gen, |
---|
125 | |
---|
126 | N2G_CLOCKREF_CLOCK: This should be used whereever the value in the SOPC PTF |
---|
127 | specifies the name of a clock. nios2gen will use whatever you configured for |
---|
128 | the selected clock in your CLOCKS section. |
---|
129 | |
---|
130 | N2G_CLOCKREF_DEVICE: This should be used whereever the value in the SOPC PTF |
---|
131 | specifies the name of a module. nios2gen will use whatever you configured for |
---|
132 | the selected module in your MODULES section. |
---|
133 | |
---|
134 | Additionally, you can specify items in your CLASSes so that nios2gen will include |
---|
135 | constant definitions in the sopc.h whenever such CLASS is present. The format is |
---|
136 | |
---|
137 | N2G_DEFINE_xyz = "123" |
---|
138 | |
---|
139 | and will result in |
---|
140 | |
---|
141 | #define MODULENAME_xyz 123 |
---|
142 | |
---|
143 | |
---|
144 | |
---|
145 | |
---|
146 | |
---|
147 | |
---|
148 | |
---|