Line 68... |
Line 68... |
<a name="2.1 Design structure"></a>
|
<a name="2.1 Design structure"></a>
|
<h2>2.1 Design structure</h2>
|
<h2>2.1 Design structure</h2>
|
|
|
The following diagram shows the openMSP430 design structure:
|
The following diagram shows the openMSP430 design structure:
|
<br><br>
|
<br><br>
|
<img src="http://opencores.org/usercontent,img,1354053264" alt="CPU Structure" title="CPU Structure" width="80%">
|
<img src="http://opencores.org/usercontent,img,1430426442" alt="CPU Structure" title="CPU Structure" width="80%">
|
<br>
|
<br>
|
<ul>
|
<ul>
|
<li><b>Frontend</b>: This module performs the instruction Fetch and Decode tasks. It also contains the execution state machine.</li>
|
<li><b>Frontend</b>: This module performs the instruction Fetch and Decode tasks. It also contains the execution state machine.</li>
|
<li><b>Execution unit</b>:
|
<li><b>Execution unit</b>:
|
Containing the ALU and the register file, this module executes the
|
Containing the ALU and the register file, this module executes the
|
Line 80... |
Line 80... |
<li><b>Serial Debug Interface</b>:
|
<li><b>Serial Debug Interface</b>:
|
Contains all the required logic for a Nexus class 3 debugging unit
|
Contains all the required logic for a Nexus class 3 debugging unit
|
(without trace). Communication with the host is performed with a standard
|
(without trace). Communication with the host is performed with a standard
|
two-wire interface following either the UART 8N1 or I<sup>2</sup>C serial protocol.</li>
|
two-wire interface following either the UART 8N1 or I<sup>2</sup>C serial protocol.</li>
|
<li><b>Memory backbone</b>: This block
|
<li><b>Memory backbone</b>: This block
|
performs a simple arbitration between the frontend and execution-unit
|
performs a simple arbitration between frontend, execution-unit, DMA and Serial-Debug interfaces
|
for program, data and peripheral memory access.</li>
|
for program, data and peripheral memory accesses.</li>
|
<li><b>Basic Clock Module</b>: Generates MCLK, ACLK, SMCLK and manage the low power modes.</li>
|
<li><b>Basic Clock Module</b>: Generates MCLK, ACLK, SMCLK and manage the low power modes.</li>
|
<li><b>SFRs</b>: The <b>S</b>pecial <b>F</b>unction <b>R</b>egister<b>s</b> block contain diverse configuration registers (NMI, Watchdog, ...).</li>
|
<li><b>SFRs</b>: The <b>S</b>pecial <b>F</b>unction <b>R</b>egister<b>s</b> block contain diverse configuration registers (NMI, Watchdog, ...).</li>
|
<li><b>Watchdog</b>:
|
<li><b>Watchdog</b>:
|
Although it is a peripheral, the watchdog is directly included in
|
Although it is a peripheral, the watchdog is directly included in
|
the core because of its tight links with the NMI interrupts and PUC
|
the core because of its tight links with the NMI interrupts and PUC
|
Line 237... |
Line 237... |
// - Possibility to generate a software PUC reset<br>
|
// - Possibility to generate a software PUC reset<br>
|
//-------------------------------------------------------<br>
|
//-------------------------------------------------------<br>
|
`define WATCHDOG<br>
|
`define WATCHDOG<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
///-------------------------------------------------------<br>
|
//-------------------------------------------------------<br>
|
|
// Include/Exclude DMA interface support<br>
|
|
//-------------------------------------------------------<br>
|
|
//`define DMA_IF_EN<br>
|
|
<br>
|
|
<br>
|
|
//-------------------------------------------------------<br>
|
// Include/Exclude Non-Maskable-Interrupt support<br>
|
// Include/Exclude Non-Maskable-Interrupt support<br>
|
//--------------------------------------------------------<br>
|
//--------------------------------------------------------<br>
|
`define NMI<br>
|
`define NMI<br>
|
<br>
|
<br>
|
<br>
|
<br>
|
Line 474... |
Line 480... |
</td>
|
</td>
|
</tr>
|
</tr>
|
</tbody>
|
</tbody>
|
</table>
|
</table>
|
<br>
|
<br>
|
The values of these parameters are then directly accessible through the CPU_NR register of the SFR peripheral.<br>
|
The values of these parameters are then directly accessible by software through the CPU_NR register of the SFR peripheral.<br>
|
For example, if both cores share the same program memory, the software can take advantage of this information as following:
|
For example, if both cores share the same program memory, the software can take advantage of this information as following:
|
<br><br>
|
<br><br>
|
<table border="0" cellpadding="0" cellspacing="4">
|
<table border="0" cellpadding="0" cellspacing="4">
|
<tbody><tr>
|
<tbody><tr>
|
<td width="35"><br></td>
|
<td width="35"><br></td>
|
Line 518... |
Line 524... |
between 512B and 32kB. As a consequence, the data memory space will be
|
between 512B and 32kB. As a consequence, the data memory space will be
|
shifted up, which means that the linker script of your favorite
|
shifted up, which means that the linker script of your favorite
|
toolchain will have to be modified accordingly.<br>
|
toolchain will have to be modified accordingly.<br>
|
The following schematic should hopefully illustrate this:<br>
|
The following schematic should hopefully illustrate this:<br>
|
<br><br>
|
<br><br>
|
<img src="usercontent,img,1306066277" alt="Memory mapping" title="Memory mapping" width="80%">
|
<img src="http://opencores.org/usercontent,img,1306066277" alt="Memory mapping" title="Memory mapping" width="80%">
|
<br>
|
<br>
|
<br><br>
|
<br><br>
|
|
|
<a name="2.5 Interrupt mapping"></a>
|
<a name="2.5 Interrupt mapping"></a>
|
<h2>2.5 Interrupt mapping</h2>
|
<h2>2.5 Interrupt mapping</h2>
|
Line 708... |
Line 714... |
<td style="vertical-align: top; text-align: center;"><async><br>
|
<td style="vertical-align: top; text-align: center;"><async><br>
|
</td>
|
</td>
|
<td> Reset Pin (active low, asynchronous and non-glitchy) </td>
|
<td> Reset Pin (active low, asynchronous and non-glitchy) </td>
|
</tr>
|
</tr>
|
|
|
|
<tr> <td colspan="5" align="center"> <b><i>Interrupts</i></b> </td></tr>
|
|
<tr>
|
|
<td> irq </td>
|
|
<td> Input </td>
|
|
<td> `IRQ_NR-2<b><sup><font color="#ff0000">1</font></sup></b> </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Maskable interrupts (one-hot signal) </td>
|
|
</tr>
|
|
<tr>
|
|
<td> nmi </td>
|
|
<td> Input </td>
|
|
<td> 1 </td>
|
|
<td style="vertical-align: top; text-align: center;"><async><br>
|
|
or mclk<b><sup><font color="#ff0000">4</font></sup></b></td>
|
|
<td> Non-maskable interrupt (asynchronous and non-glitchy)<br>
|
|
Set to 0 if unused.<br>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td> irq_acc </td>
|
|
<td> Output </td>
|
|
<td> `IRQ_NR-2<b><sup><font color="#ff0000">1</font></sup></b> </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Interrupt request accepted (one-hot signal) </td>
|
|
</tr>
|
|
|
<tr> <td colspan="5" align="center"> <b><i>Program Memory interface</i></b> </td></tr>
|
<tr> <td colspan="5" align="center"> <b><i>Program Memory interface</i></b> </td></tr>
|
<tr>
|
<tr>
|
<td> pmem_addr </td>
|
<td> pmem_addr </td>
|
<td> Output </td>
|
<td> Output </td>
|
Line 834... |
Line 867... |
<td> 2 </td>
|
<td> 2 </td>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
</td>
|
</td>
|
<td> Peripheral write enable (high active) </td>
|
<td> Peripheral write enable (high active) </td>
|
</tr>
|
</tr>
|
|
<tr> <td colspan="5" align="center"> <b><i>Direct Memory Access interface</i></b> </td></tr>
|
<tr> <td colspan="5" align="center"> <b><i>Interrupts</i></b> </td></tr>
|
|
<tr>
|
<tr>
|
<td> irq </td>
|
<td> dma_addr </td>
|
<td> Input </td>
|
<td> Input </td>
|
<td> `IRQ_NR-2<b><sup><font color="#ff0000">1</font></sup></b> </td>
|
<td> 15 </td>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
</td>
|
</td>
|
<td> Maskable interrupts (one-hot signal) </td>
|
<td> Direct Memory Access address </td>
|
</tr>
|
</tr>
|
<tr>
|
<tr>
|
<td> nmi </td>
|
<td> dma_din </td>
|
|
<td> Input </td>
|
|
<td> 16 </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Direct Memory Access data input </td>
|
|
</tr>
|
|
<tr>
|
|
<td> dma_dout </td>
|
|
<td> Output </td>
|
|
<td> 16 </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Direct Memory Access data output </td>
|
|
</tr>
|
|
<tr>
|
|
<td> dma_en </td>
|
<td> Input </td>
|
<td> Input </td>
|
<td> 1 </td>
|
<td> 1 </td>
|
<td style="vertical-align: top; text-align: center;"><async><br>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
or mclk<b><sup><font color="#ff0000">4</font></sup></b></td>
|
|
<td> Non-maskable interrupt (asynchronous and non-glitchy)<br>
|
|
Set to 0 if unused.<br>
|
|
</td>
|
</td>
|
|
<td> Direct Memory Access enable (high active) </td>
|
</tr>
|
</tr>
|
<tr>
|
<tr>
|
<td> irq_acc </td>
|
<td> dma_priority </td>
|
|
<td> Input </td>
|
|
<td> 1 </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Direct Memory Access priority (0:low / 1:high) </td>
|
|
</tr>
|
|
<tr>
|
|
<td> dma_ready </td>
|
<td> Output </td>
|
<td> Output </td>
|
<td> `IRQ_NR-2<b><sup><font color="#ff0000">1</font></sup></b> </td>
|
<td> 1 </td>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
</td>
|
</td>
|
<td> Interrupt request accepted (one-hot signal) </td>
|
<td> Direct Memory Access is complete </td>
|
|
</tr>
|
|
<tr>
|
|
<td> dma_resp </td>
|
|
<td> Output </td>
|
|
<td> 1 </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Direct Memory Access response (0:Okay / 1:Error) </td>
|
|
</tr>
|
|
<tr>
|
|
<td> dma_we </td>
|
|
<td> Input </td>
|
|
<td> 2 </td>
|
|
<td style="vertical-align: top; text-align: center;">mclk<br>
|
|
</td>
|
|
<td> Direct Memory Access write byte enable (high active) </td>
|
|
</tr>
|
|
<tr>
|
|
<td> dma_wkup </td>
|
|
<td> Input </td>
|
|
<td> 1 </td>
|
|
<td style="vertical-align: top; text-align: center;"><async><br>
|
|
</td>
|
|
<td> ASIC ONLY: DMA Wake-up (asynchronous and non-glitchy) </td>
|
</tr>
|
</tr>
|
|
|
<tr> <td colspan="5" align="center"> <b><i>Serial Debug interface</i></b> </td></tr>
|
<tr> <td colspan="5" align="center"> <b><i>Serial Debug interface</i></b> </td></tr>
|
<tr>
|
<tr>
|
<td> dbg_en </td>
|
<td> dbg_en </td>
|