This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Cortex-M3 vs ARM7TDMI

Note: This was originally posted on 21st April 2011 at http://forums.arm.com

Trying to turn what was a simple hobby project based on Cortex-M3 with some serious enhancements/additions, into a semi-commercial product (might sell it at cost, or even opensource design/software), however I am at a crossroad of sorts, and need to decide whether I could stick to Cortex-M3 or move to ARM7TDMI, since those seem to be comparably priced, although from max DMIPS standpoint, are much lower than those on latest Cortex-M3s. My query is, how much of a factor is DMIPS in my circumstance.

Given some very rough (& not very scientific) estimates, I'd require around 120DMIPS of performance which I might be able to squeeze into say 80DMIPS if I go with commercial libraries & invest significantly (time/effort) in optimizing, which given the nature of the project (desire to sell at-cost or opensource) will be difficult, if not impossible. The point where I do hit the limits of Cortex-M3 is the onboard SRAM. This is where I am in some confusion, as to whether I should try a switch to ARM7TDMI ? Will the Cortex-M3's with External-Memory support, help address my issue ?

~Jay
Parents
  • Note: This was originally posted on 22nd April 2011 at http://forums.arm.com

    Hi Jay,

    Many Cortex-M3 microcontrollers have external SRAM interface.
    If you need 120DMIPS I think staying with Cortex-M3 is better as some of them can run at fairly high speed.
    Some ARM7TDMI microcontrollers can run at 80MHz, but don't forget that at this speed you might have wait states in flash which can reduce the DMIPS/MHz value.
    The same issue can affects Cortex-M3 microcontrollers too, but recently many vendors have put a lot of effort in minimizing the flash wait state impact by adding caches in flash interface unit on the Cortex-M3 microcontrollers.

    Regarding external SRAM interface, do you need it for data or program execution?
    Each vendor have thier own external memory interface design, sometimes they are good for data accesses but not optimized for program execution.

    There are other factors to consider:
    Code size - if you port the application to ARM7TDMI, you might find the code size increase.  Since your application require quite high performance, you might need to run your application mostly in ARM state which use 32-bit instructions.

    Interrupt latency - In ARM7TDMI the interrupt latency depends on the current executing instruction.  You also need software code to determine which interrupt source require service, and you might need a assembly wrapper for interrupt handling if you need nested interrupt support.

    Hope this helps.

    regards,
    Joseph
Reply
  • Note: This was originally posted on 22nd April 2011 at http://forums.arm.com

    Hi Jay,

    Many Cortex-M3 microcontrollers have external SRAM interface.
    If you need 120DMIPS I think staying with Cortex-M3 is better as some of them can run at fairly high speed.
    Some ARM7TDMI microcontrollers can run at 80MHz, but don't forget that at this speed you might have wait states in flash which can reduce the DMIPS/MHz value.
    The same issue can affects Cortex-M3 microcontrollers too, but recently many vendors have put a lot of effort in minimizing the flash wait state impact by adding caches in flash interface unit on the Cortex-M3 microcontrollers.

    Regarding external SRAM interface, do you need it for data or program execution?
    Each vendor have thier own external memory interface design, sometimes they are good for data accesses but not optimized for program execution.

    There are other factors to consider:
    Code size - if you port the application to ARM7TDMI, you might find the code size increase.  Since your application require quite high performance, you might need to run your application mostly in ARM state which use 32-bit instructions.

    Interrupt latency - In ARM7TDMI the interrupt latency depends on the current executing instruction.  You also need software code to determine which interrupt source require service, and you might need a assembly wrapper for interrupt handling if you need nested interrupt support.

    Hope this helps.

    regards,
    Joseph
Children
No data