When designing a system-on-a-chip (SoC) with an ARM Cortex-M0 processor and programming it into an FPGA, not all signals need to be brought out to the top-level FPGA pins. Certain signals can be omitted or left unconnected depending on your specific design requirements. Here is an overview of some of the signals that may potentially be omitted.
Clock and Reset Signals
The clock and reset signals are essential for the operation of the Cortex-M0 processor. These signals should never be omitted from the top-level design.
- CLK – Main system clock for the Cortex-M0 processor
- HCLK – AHB bus clock derived from CLK
- FCLK – Optional fast clock for system timers
- nRESET – Active low reset input to initialize the processor
Power and Reference Voltages
The following power pins provide supply voltages required for operation of the Cortex-M0 processor and should always be connected:
- VDD – Digital power supply voltage (typically 1.2V)
- VSS – Digital ground
- VDDA – Analog power supply voltage (optional, can tie to VDD)
- VSSA – Analog ground (optional, can tie to VSS)
Debug Signals
The Cortex-M0 processor includes an embedded debug module to enable debugging via JTAG/SWD. The following are some of the key debug signals:
- SWCLK – JTAG/SWD clock
- SWDIO – Bi-directional JTAG/SWD data pin
- nTRST – JTAG reset (optional)
These debug signals can be omitted if you do not require debug capability via JTAG/SWD interface. The processor will still be able to run application code without these signals connected.
AHB-Lite Bus Interface Signals
The Cortex-M0 integrates an AHB-Lite bus interface for connecting to memory and peripherals. Some of the key AHB-Lite signals are:
- HADDR[31:0] – AHB address bus
- HBURST[2:0] – AHB burst type
- HMASTLOCK – AHB lock signal
- HPROT[3:0] – AHB protection control signals
- HSIZE[2:0] – AHB transfer size
- HTRANS[1:0] – AHB transfer type
- HWDATA[31:0] – AHB write data bus
- HRDATA[31:0] – AHB read data bus
- HWRITE – AHB write select
- HREADY – AHB transfer done
The AHB-Lite interface signals can be omitted if you are not connecting any peripherals or external memory to the Cortex-M0 processor in your FPGA design. The processor contains embedded SRAM that can be used for code and data storage without requiring an external bus interface.
External Interrupts
The Cortex-M0 processor supports up to 32 external interrupt inputs to the Nested Vectored Interrupt Controller (NVIC):
- IRQ[31:0] – External interrupt request inputs
These external interrupt signals can be omitted if you are not using any external interrupt sources in your design. The processor will still be able to respond to internal exception events without external IRQ inputs.
Processor Interface Ports
The Cortex-M0 contains several peripheral interface ports for communicating with external devices. Some examples include:
- GPIO ports
- UART ports
- SPI ports
- I2C ports
- ADC interface
The signals for any unused peripheral interfaces can be omitted. For example, if your design doesn’t require any SPI communication, you don’t need to connect the SPI port interface signals (SPI_SCK, SPI_MOSI, SPI_MISO, etc.). This helps optimize the design by only including necessary signals.
Pins with Internal Pull-ups/Pull-downs
Many I/O pins on the Cortex-M0 have internal pull-ups or pull-downs that can be enabled or disabled in software. If these features are not required, the respective pins can be left unconnected rather than tying them to a power or ground rail externally.
Considerations When Omitting Signals
Here are some key considerations to keep in mind when deciding which signals can be omitted in your design:
- Any signals required for minimum/basic operation of the Cortex-M0 should not be omitted (clocks, resets, power, core interface signals).
- Omitting debug signals disables debug capability but can still allow normal code execution.
- Unused peripheral interfaces and external interrupt lines can be safely omitted.
- Leaving out bus interface signals essentially isolates the processor from other system components.
- Carefully review datasheets/reference manuals to check dependencies between signals before omitting anything.
- Pay attention to any constraints/exceptions noted in the device documentation.
Sample Pin-Omitted Implementation
Here is an example of how a minimalist Cortex-M0 FPGA design can look with some signals omitted:
- Include: CLK, Reset, VDD, VSS, core mandatory signals
- Omit: Debug, AHB interface, external IRQs, peripheral interfaces not used
- Use internal SRAM for code and data
- GPIOs only for simple LED blink demo
This implementation would skip external memories, peripherals, interrupts and debug capability in favor of a very simple LED blink test configuration running from internal SRAM.
Conclusion
In summary, clock, reset, power, and other vital core/interface signals should always be retained when programming a Cortex-M0 FPGA design. Any debug, bus, interrupt, peripheral or unused I/O signals can potentially be omitted depending on specific design requirements. However, care must be taken to thoroughly validate dependencies and system behavior after removing any signals. Following ARM reference manuals for recommended design practices can help ensure success.
By starting with a minimal configuration and only adding complexity as needed, an optimized Cortex-M0 FPGA implementation can be achieved. The ability to omit unnecessary signals is a key benefit when designing highly integrated SoCs targeting FPGAs.