<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Programmable Devices: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Programmable Devices: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic</link><pubDate>Sun, 27 Feb 2022 19:47:44 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>pchan</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Current Revision posted to Documents by pchan on 2/27/2022 7:47:44 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/w/documents/4501/programmable-devices-iii-fpga-programmable-soc-programming-languages"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;a href="/w/documents/27322/a-guide-to-debugging"&gt;
                    &lt;button class="e14-nav-button-next"&gt;Next&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="vertical-align:top;" title="Xilinx"  height="25" src="/e14/assets/main/mfg-group-assets/xilinxLogo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/7</link><pubDate>Fri, 18 Feb 2022 20:33:52 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>pchan</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 7 posted to Documents by pchan on 2/18/2022 8:33:52 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/w/documents/4501/programmable-devices-iii-fpga-programmable-soc-programming-languages"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;a href="/w/documents/27322/a-guide-to-debugging"&gt;
                    &lt;button class="e14-nav-button-next"&gt;Next&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="vertical-align:top;" title="Xilinx"  height="25" src="/e14/assets/main/mfg-group-assets/xilinxLogo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/6</link><pubDate>Fri, 18 Feb 2022 20:33:27 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>pchan</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 6 posted to Documents by pchan on 2/18/2022 8:33:27 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/w/documents/4501/programmable-devices-iii-fpga-programmable-soc-programming-languages"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;a href="/w/documents/27322/a-guide-to-debugging"&gt;
                    &lt;button class="e14-nav-button-next"&gt;Next&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="height:25px;vertical-align:top;" title="Xilinx"  height="25" src="/e14/assets/main/mfg-group-assets/xilinxLogo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/5</link><pubDate>Fri, 18 Feb 2022 20:33:02 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>pchan</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 5 posted to Documents by pchan on 2/18/2022 8:33:02 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/w/documents/4501/programmable-devices-iii-fpga-programmable-soc-programming-languages"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;a href="/w/documents/27322/a-guide-to-debugging"&gt;
                    &lt;button class="e14-nav-button-next"&gt;Next&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="height:20px;vertical-align:top;" title="Xilinx"  height="20" src="/e14/assets/main/mfg-group-assets/xilinxLogo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/4</link><pubDate>Sat, 18 Dec 2021 22:29:10 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>dkibbey</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 4 posted to Documents by dkibbey on 12/18/2021 10:29:10 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/w/documents/4501/programmable-devices-iii-fpga-programmable-soc-programming-languages"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;a href="/w/documents/27322/a-guide-to-debugging"&gt;
                    &lt;button class="e14-nav-button-next"&gt;Next&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="height:21.5385px;vertical-align:top;width:105px;" title="Xilinx"  height="22" src="/e14/assets/legacy/2018/xilinxlogoSM.png" width="105" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>element14 Essentials: Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/3</link><pubDate>Wed, 24 Nov 2021 17:29:42 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>pchan</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 3 posted to Documents by pchan on 11/24/2021 5:29:42 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/w/documents/4501/programmable-devices-iii-fpga-programmable-soc-programming-languages"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;a href="/w/documents/27322/a-guide-to-debugging"&gt;
                    &lt;button class="e14-nav-button-next"&gt;Next&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="height:21.5385px;vertical-align:top;width:105px;" title="Xilinx"  height="22" src="/e14/assets/legacy/2018/xilinxlogoSM.png" width="105" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>element14 Essentials: Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/2</link><pubDate>Mon, 08 Nov 2021 14:33:11 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>dychen</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 2 posted to Documents by dychen on 11/8/2021 2:33:11 PM&lt;br /&gt;
&lt;p&gt;&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/community/learning-center/online-learning/essentials?ICID=essentials-prgmdevices4-doc"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style="background-color:#f9f9f9;border:1px solid #c6c6c6;display:block;float:right;padding:6px 8px;width:212px;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border:1px solid #c6c6c6;clear:both;padding:8px;vertical-align:top;"&gt;
&lt;div style="display:inline-block;padding-right:16px;vertical-align:top;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image"  src="/e14/assets/legacy/2017/learningess.png" width="175px" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="display:inline-block;padding-bottom:4px;vertical-align:top;"&gt;
&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" style="height:21.5385px;vertical-align:top;width:105px;" title="Xilinx"  height="22" src="/e14/assets/legacy/2018/xilinxlogoSM.png" width="105" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/LinkArrow.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin:0;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:18px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;/center&gt;&lt;center&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 15px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="display:inline-block;margin:0px auto;padding:12px 5px 5px 0px;vertical-align:middle;width:400px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;padding-top:15px;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;
&lt;center&gt;
&lt;p style="font-size:11px;font-weight:bold;margin:0;padding-top:12px;"&gt;Click to enlarge image&lt;/p&gt;
&lt;div style="margin:0px auto;padding:4px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;
&lt;center&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;
&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;
&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;
&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;table style="border:1px solid #ffffff;text-align:left;" cellpadding="0" cellspacing="0"&gt;
&lt;thead&gt;
&lt;tr style="font-size:14px;"&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;
&lt;th style="background-color:#4472c4;border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;color:#ffffff;padding:6px;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#e9ebf5;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color:#cfd5ea;"&gt;
&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-left:solid 1px #FFFFFF;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;
&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="margin:0px auto;"&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/center&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;
&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="vertical-align:middle;"  src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener noreferrer" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin:0px auto;padding:12px 5px 5px 0px;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image"  src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png" /&gt;&lt;/a&gt;
&lt;p style="display:block;font-size:11px;line-height:12px;margin:0;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;
&lt;/center&gt;&lt;/div&gt;
&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;color:#007fac;font-size:15px;margin-top:16px;padding:4px 8px;vertical-align:middle;"&gt;
&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;
&lt;div style="display:inline-block;font-size:11px;text-align:right;vertical-align:top;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;
&lt;p style="font-size:11px;margin:0;padding-top:12px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="background-color:#e7f2f5;border:1px solid #a9aaaa;padding:12px 12px 0px;"&gt;
&lt;div style="float:left;padding-right:8px;vertical-align:top;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" style="float:left;padding-right:10px;vertical-align:middle;"  height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="color:#007fac;font-size:15px;margin:0;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;
&amp;nbsp;
&lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" title="Shop Now" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="clear:both;margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="color:#007fac;font-size:18px;margin:0;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="float:right;font-size:11px;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" style="float:left;padding:0px 10px 5px 0px;vertical-align:top;"  height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;
&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;
&lt;p style="margin:0;padding:0px;"&gt;&lt;div class="voltquiz" data-formid="5895eaa9-ed07-4b6e-855a-244139acfa83" data-formtype="quiz" data-success-message="" data-fail-message="" data-pass-mark="OTk=" &gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt;&lt;/div&gt;
&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;div class="migration-injected-attachments"&gt;
&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;table style="border:0;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160"&gt;&lt;span id="attid_https://www.element14.com/community/api/core/v3/attachments/295192" class="_se_attachment"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item><item><title>element14 Essentials: Programmable Devices IV: Hard and Soft Processors in Programmable Logic</title><link>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic/revision/1</link><pubDate>Wed, 06 Oct 2021 22:14:19 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b25476f3-82a4-4e5c-b481-1b71f2d2043d</guid><dc:creator>pchan</dc:creator><comments>https://community.element14.com/learn/learning-center/essentials/w/documents/4659/programmable-devices-hard-and-soft-processors-in-programmable-logic#comments</comments><description>Revision 1 posted to Documents by pchan on 10/6/2021 10:14:19 PM&lt;br /&gt;
&lt;span&gt;&lt;div class="e14-navigation-buttons"&gt;&lt;a href="/community/learning-center/online-learning/essentials?ICID=essentials-prgmdevices4-doc"&gt;
                    &lt;button class="e14-nav-button-prev"&gt;Previous&lt;/button&gt;
                &lt;/a&gt;&lt;/div&gt;&lt;script&gt;e14.func.queueScripts.add(function(){ e14.func.repositionNavButtons(); })&lt;/script&gt;&lt;/span&gt;&lt;div style="padding:6px 8px;border:1px solid #c6c6c6;background-color:#f9f9f9;display:block;width:212px;float:right;"&gt;&lt;a class="jivecontainerTT-hover-container jive-link-community-small" href="/learn/learning-center/"&gt;element14 Learning Center&lt;/a&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="padding:8px;clear:both;border:1px solid #c6c6c6;vertical-align:top;"&gt;&lt;div style="display:inline-block;vertical-align:top;padding-right:16px;"&gt;&lt;a href="/learn/learning-center/online-learning/essentials/"&gt;&lt;img alt="image" src="/e14/assets/legacy/2017/learningess.png" width="175px"  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;padding-bottom:4px;"&gt;&lt;div class="essTitle" style="font-size:18px;font-weight:bold;" title="Hard and Soft Processors in Programmable Logic"&gt;Programmable Devices IV:&lt;br /&gt; &lt;span style="color:#007fac;"&gt;Hard and Soft Processors in Programmable Logic&lt;/span&gt;&lt;/div&gt;&lt;div style="padding-top:8px;"&gt;&lt;span style="font-size:11px;padding-right:10px;"&gt;&lt;em&gt;Sponsored by&lt;/em&gt;&lt;/span&gt;&lt;a href="https://www.xilinx.com/" rel="nofollow ugc noopener" target="_blank"&gt;&lt;img loading="lazy" alt="image" class="essSponsor" height="22" src="/e14/assets/legacy/2018/xilinxlogoSM.png" style="vertical-align:top;width:105px;height:21.5385px;" title="Xilinx" width="105"  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr /&gt;&lt;div style="clear:both;line-height:1.5;"&gt;&lt;span style="padding-right:6px;"&gt;&lt;a class="jive-link-anchor-small" href="#intro"&gt;1. Introduction&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#object"&gt;2. Objectives&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec3"&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec4"&gt;4. History of Processing in Programmable Logic&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-anchor-small" href="#sec5"&gt;5. Conclusion&lt;/a&gt;&lt;/span&gt; | &lt;span style="padding:0px 6px;"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv"&gt;Related Components&lt;/a&gt;&lt;/span&gt; | &lt;span style="font-weight:bold;padding:0px 6px;"&gt;&lt;a href="#test"&gt;Test Your Knowledge &lt;img loading="lazy" alt="image" src="/e14/assets/legacy/gen/LinkArrow.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;color:#007fac;font-size:15px;padding:0px 0px;"&gt;&lt;a name="intro"&gt;&lt;/a&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Programmable Logic provides the user the ability to accelerate functions by leveraging its highly parallel nature, freeing us from the sequential world which constrains software. However, not every algorithm or function within our programmable logic design requires a parallel implementation. There are elements which require sequential processing, like communications protocols over RS232 or control and sequencing structures. Digital designers will understand these sequential structures can be implemented using Finite State Machines, Counters, and Shift Registers appropriately.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;However, using state machines for all sequential and control functionality quickly becomes limiting, as making changes is time consuming and it limits the size of the application. In many applications where higher levels of control and communication are required, a better solution is to use a processor for these sequential structures.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Of course, if you use discrete processor and programmable logic devices this further complicates the circuit card design, as additional design time is required, increasing non-recurring engineering cost while also increasing the cost of the Bill of Materials (BoM). The simplest and cheapest solution is therefore to use a processor internal to the programable logic device.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;The choice faced by the engineer then becomes one of using a programmable logic device with a hard silicon processor or implementing a soft IP processor within the programmable logic. Both solutions have their pros and cons, which will depend upon the application requirements and challenges.&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a name="object"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin:0;color:#007fac;font-size:15px;padding:4px 8px;margin-top:16px;background-color:#e7f2f5;vertical-align:middle;"&gt;&lt;strong&gt;2. Objectives&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;In this Essentials course we are going to examine what hard and soft-core processors are, the different and common development flows, along with identifying different types of processors and their use cases. By the end of the module you should be able to understand:&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; The differences between hard and soft processors&lt;/p&gt;&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; The benefits and disadvantages of both hard and soft processors&lt;/p&gt;&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; The history of processors in programmable logic&lt;/p&gt;&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; The different types of hard and soft processors available&lt;/p&gt;&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; A typical development flow for hard and soft processors&lt;/p&gt;&lt;p style="margin:0;padding:4px 0px 12px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Multi-processor environments and how you can work in them&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a name="sec3"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="color:#007fac;font-size:15px;padding:4px 8px;margin-top:16px;background-color:#e7f2f5;vertical-align:middle;"&gt;&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;3. Differences: Hard vs. Soft Processors in Programmable Logic &lt;/strong&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;text-align:right;font-size:11px;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding-top:12px;"&gt;The difference between hard and soft processors in programmable logic devices is very distinct. When the processor is implemented as a hard processor, the processor and often supporting infrastructure are fabricated directly in the silicon of the device during manufacture. As such, the actual design and most of the configuration of the hard processor are determined by the programmable device manufacturers. Implementing the processor directly in the silicon offers significant performance benefits and can accelerate development time, but it also comes with some disadvantages, as we will see as this course progresses.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Alternatively, soft processors are implemented using the logic resources available within the programmable logic device. This means there is more freedom to implement the soft processor, even down to which processor is implemented. However, as we will see there are also drawbacks.&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a name="sec4"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="color:#007fac;font-size:15px;padding:4px 8px;margin-top:16px;background-color:#e7f2f5;vertical-align:middle;"&gt;&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;4. History of Processing in Programmable Logic &lt;/strong&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;text-align:right;font-size:11px;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding-top:12px;"&gt;If you are not familiar with the history of processing within programmable logic, you may think that it is a relatively recently phenomenon. However, both hard and soft processors have been available within programmable logic since the late 1990s and early 2000s. Early hard-core processors implemented in programmable logic included PowerPC 405 and 440 cores, while soft-core processors include both MicroBlaze and NIOS. As such, engineers have been using both hard and soft processing within logic designs for nearly 20 years, although how they integrate, leverage, and work with them has become significantly easier over the generations.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.1 Comparing Processor Performance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Comparing different processors can be difficult, especially when it comes to comparing like-for-like performance. At a high level we can compare the different peripherals available, power modes, and IO capabilities. When it comes to comparing different processor performances, it is common to use industry standard benchmarks. The two most popular benchmarks classify processor performance by integer operations and floating-point operations able to be performed in a second. These two benchmarks are called Dhrystone Millions of Instructions Per Second (DMIPS) and Floating-Point Operations Per Second (FLOPS).&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;These benchmarks enable us to compare the processing capabilities of different processors regardless of manufacturer, implemented either as hard or soft processors. For each of the processor cores in this Essentials course we present the DMIPS to enable a like-for-like comparison of performance capability.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.2 Understanding Hard Processors&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;As outlined above, hard processors are implemented by the programmable logic device manufacturer during the design and manufacture phase of the actual programmable logic device. This creates a new class of device which combines the processor and the programmable logic, called a heterogeneous SoC.&amp;nbsp; Often these heterogeneous SoCs include multiple processor instantiations and can also include multiple different types of hard processor implementations.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Modern programmable logic devices by and large implement high performance Arm processing cores when hard processors are required. The exact Arm processor core implemented varies from device family to family; however, typical processors cores implemented include:&lt;/p&gt;&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A72:&lt;/strong&gt; 64-bit three way Out of Order Superscalar Application Processor which implements the Armv8-A architecture. Performance wise the Cortex-A72 cores can achieve up to 4.72 DMIPS/ MHz with clock rates up to 2.5 GHz per core.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A53:&lt;/strong&gt;&amp;nbsp; 64-bit Superscalar Application Processor which implements the ARMv8-A architecture. Performance wise the Cortex-A53 cores can achieve up to 2.24 DMIPS / MHz with clock rates up to 1.5 GHz per core.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-A9:&lt;/strong&gt; 32-bit Superscalar Application Processor which implements the ARMv7-A architecture. Performance wise Cortex-A9 cores can achieve up to 2.5 DMIPS / MHz with clock rates up to 1 GHz per core.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Cortex-R5:&lt;/strong&gt; 32-bit processor designed for Real Time Safety Critical Applications which implements the ARMv7-R architecture. Performance-wise the Cortex-R5 cores can achieve up to 1.67 DMIPS /MHz with maximum clock rates up to 600 MHz per core.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the maximum clock frequencies and processing capability indicated by the DMIPS/MHz indicate that hard processors can offer very high-performance implementations.&lt;/p&gt;&lt;div style="padding:12px 5px 5px 0px;margin:0px auto;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram1_hardsoftprocessprgmLgc.png"  /&gt;&lt;/a&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 1: Single Core Hard Processor Performance in DMIPS&lt;/em&gt;&lt;/p&gt;&lt;/center&gt;&lt;/div&gt;&lt;p style="margin:0;padding-top:12px;"&gt;This high-performance capability is necessary when we are working with high level operating systems such as Linux, and frameworks used for machine learning, signal, and image processing.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Along with the performance benefits of hard processor implementations, there are also several other benefits. The most significant of these is the creation of a complete processing system around the implemented cores with Caches, Interrupt Controllers, Memory Controllers for DDR and Non-volatile memories, along with providing a range of interfacing options (e.g., Gigabit Ethernet, SPI, I2C, UART, etc.). This creates a true processing solution in one half of the device and does not use precious logic resources for its implementation. Of course, the device manufacturers also include several high-performance interfaces between the processing system and the programmable logic; this is crucial for accelerating applications in the programmable logic.&lt;/p&gt;&lt;center&gt;&lt;p style="margin:0;padding-top:12px;font-size:11px;font-weight:bold;"&gt;Click to enlarge image&lt;/p&gt;&lt;/center&gt;&lt;div style="padding:4px 5px 5px 0px;margin:0px auto;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram2_hardsoftprocessprgmLgc.png" width="600px"  /&gt;&lt;/a&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 2: Xilinx Zynq MPSoC Processing System - note the complexity and range of peripheral support&lt;/em&gt;&lt;/p&gt;&lt;/center&gt;&lt;/div&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Because the processing system looks more like a traditional processing solution to the software development team, the development flow is more aligned with a traditional software development flow.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;In fact, when working with a heterogeneous SoC which contains a hard processing system, the programmable logic is a slave peripheral of the processing system, and the boot sequence is exactly like a normal processor. This means that on day one of the project development, the SW team can get started developing the solution, which the programmable logic development progresses in parallel.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;As the processing system and programmable logic are distinctly separate systems, they can be treated as being decoupled from each other. This has several advantages, including:&lt;/p&gt;&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Partial Reconfiguration:&lt;/strong&gt; The ability to change the entire or partial contents of the programmable logic as the application demands. This enables much easier field updates as standards evolve, or even allows for different programmable logic designs to be loaded at different parts of the application.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Power efficient operation:&lt;/strong&gt; The processors can be powered down into low power operational modes, while the programmable logic can be powered down. This enables the system to be able to offer solutions which scale power demand with use cases.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Security:&lt;/strong&gt; The processing system contains all of the necessary infrastructure to provide the confidentiality, integrity, and authentication of the application thanks to AES, SHA, and RSA algorithms.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Safety:&lt;/strong&gt; The decoupling of the processing system and programmable logic enables safety solutions to be implemented using diverse approaches, which (with careful design) do not contain a single point of failure.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a hard-macro processor is:&lt;/p&gt;&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processing system and programmable logic is determined.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; The software team starts developing, using&amp;nbsp; software development tools such as Eclipse, and development boards to create the boot, configuration, and the majority of the application. This is possible because the hard processor configuration already exists in the device.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; In parallel, the logic design can be conducted; to the software team all elements in the programmable logic which need to be under the software control appear within the device memory map. This memory map can be provided to the software development team by the programmable logic design team once the design is completed. They do not have to wait until the programmable logic design has a bit file which achieves timing closure. This further parallelizes the development process.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Once the programmable logic design meets timing, the programming file can be provided to the software team and integration / debugging of the design can occur.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;When applications span across processing system and the programmable logic design, debugging can be a challenge. As such, many heterogeneous system providers offer tool chains which enable cross-triggering between the programmable logic and the processing system. What cross-triggering enables is the ability to set break points in the software and when they are hit to trigger events in the programmable logic. For example, it is possible to trigger an internal logic analyzer to start capturing data when a breakpoint is hit. This enables a systematic view of what is occurring between the processor and the programmable logic when behaviour is not as expected in the design. Of course, it is also possible to go from a trigger in the programmable logic to stopping the software as a breakpoint would to examine the reverse path.&lt;/p&gt;&lt;center&gt;&lt;p style="margin:0;padding-top:18px;font-size:11px;font-weight:bold;"&gt;Click to enlarge image&lt;/p&gt;&lt;/center&gt;&lt;center&gt;&lt;div style="display:inline-block;width:400px;padding:12px 15px 5px 0px;margin:0px auto;vertical-align:middle;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram3a_hardsoftprocessprgmLgc.png" width="390px"  /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 3A: Enabling Cross Triggering in the Zynq MPSoC&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style="display:inline-block;width:400px;padding:12px 5px 5px 0px;margin:0px auto;vertical-align:middle;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram3b_hardsoftprocessprgmLgc.png" width="390px"  /&gt;&lt;/a&gt;&lt;p style="margin:0;padding-top:15px;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 3B: Simple Implementation of Cross Triggering from PS to PL&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/center&gt;&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.3 Understanding Soft Processors in Programmable Logic&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Soft-core processors, instead of being implemented in the silicon of the programmable logic of the device, are implemented using the look-up tables, Block RAMS, and Flip Flops within the programmable logic device.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;While this means that soft-core processors might not be able to achieve the performance of&amp;nbsp; dedicated hard processors, they do have many advantages, including the ability to select the actual processor.&amp;nbsp; This means the engineer can select a processor core available from the programmable logic device manufacturer, or alternatively from different IP vendors, or even open source. Of course, the size of the processor needed for the application can also scale with the demands, providing for a very flexible solution. With soft-core processors it is often very common, therefore, to see several different implementations available depending upon the application need.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;The maximum clock frequency of soft-core processors is very dependent upon not only the processor design, but also the programmable logic architecture and the utilization of the programmable logic device. Of course, the logic resources required by the soft processor will also be a determining factor in device selection.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;As engineers we have the choice of a range of softcore processors, including:&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;MicroBlaze:&lt;/strong&gt; 32-bit Reduced Instruction Set Computer (RISC) offered by Xilinx. MicroBlaze is offered in three configurations: Microcontroller, Real Time and Application, offering 1.1 DMIPS/MHz, 1.3 DMIPS /MHz and 1.4 DMIPS/MHz respectively.&lt;/p&gt;&lt;center&gt;&lt;div style="padding:12px 5px 5px 0px;margin:0px auto;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram4_hardsoftprocessprgmLgc.png"  /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 4: MicroBlaze Block Diagram&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/center&gt;&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;NIOS II:&lt;/strong&gt; 32-bit RISC processor offered by Intel. NIOS II is offered in three configurations: NIOS II Fast, NIOS II Standard, and NIOS II Economy. The NIOS II Fast offers 0.9 DMIPS / MHz and the NIOS II economy offers 0.1 DMIPS/MHz.&lt;/p&gt;&lt;center&gt;&lt;div style="padding:12px 5px 5px 0px;margin:0px auto;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram5_hardsoftprocessprgmLgc.png"  /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 5: NIOS II Processor Core&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/center&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Arm Cortex-M1 &amp;amp; M3 32-bit processors based on the Arm Arch V6 and Arm Arch V7, respectively. The Cortex-M1 offers 0.8 DMIPS/MHz while the Cortex-M3 offers 1.25 DMIPS/MHz&lt;/p&gt;&lt;center&gt;&lt;p style="margin:0;padding-top:12px;font-size:11px;font-weight:bold;"&gt;Click to enlarge image&lt;/p&gt;&lt;div style="padding:4px 5px 5px 0px;margin:0px auto;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram6_hardsoftprocessprgmLgc.png" width="700px"  /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 6: Arm Cortex-M3 and M1&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/center&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; RISC-V is not actually a processor itself, but instead is an Instruction Set Architecture which enables development of open source processors which are compliant with the RISC-V ISA. As such there are several providers of RISC-V cores for implementation in programmable logic, with each implementation providing a different solution. The SiFive E31 RISC-V implementation offers between 2.58 and 1.61 DMIPS/MHz.&lt;/p&gt;&lt;center&gt;&lt;div style="padding:12px 5px 5px 0px;margin:0px auto;"&gt;&lt;a href="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram7_hardsoftprocessprgmLgc.png" width="670px"  /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 7: RISC-V Architecture - SiFive E31 RISC-V core&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/center&gt;&lt;p style="margin:0;padding-top:12px;"&gt;While the soft-core processor provides the ability to implement the most efficient solution for the application at hand, there are some implications from using a soft processor; along with the obviously lower performance, we also find that a soft-core processor reduces the number of logic resources available for the logic design itself.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;This is due to the need to implement the entire processor support architecture with the programmable logic resources. It is not only the processor core itself which requires logic resources, but on more complex core implementations it is also DDR interfaces, communication peripherals, and interfacing with the programmable logic design which is required. Although for small processor solutions none of this is required, and the program can execute from Block RAM.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Unlike hard processor implementations, soft processors are tightly coupled with the programmable logic, and this brings interesting points:&lt;/p&gt;&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; The programmable logic device is the master; it must be configured first to implement the soft-core processor. Once the programmable logic is configured, the soft core processor can load its boot loader and application SW.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Depending upon the size of the application, the soft-core processors application may be contained entirely within Block RAMS provided by the programmable logic. This removes the need for an external non-volatile memory for the SW application.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; As the processor is located within the programmable logic, it is not possible to change the contents of the programmable logic at run time. However, it is possible to use partial reconfiguration and reconfigure regions of the programmable logic as required.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Power Management does not have the ability to power down the programmable logic; however, techniques exist, such as clock gating and switching to slower clock frequencies for the remaining logic elements.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; While we cannot easily implement a single device implementation which is free from single points of failure, we can implement triple modular redundancy soft processor implementations with voting and synchronization easily.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;A typical development flow for a soft processing system is:&lt;/p&gt;&lt;p style="margin:0;padding:12px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Architecture and sub-system segmentation of functions between the processor and programmable logic design is determined.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Implementation of the processor within the programmable logic. The objective during this stage is to create a soft-core processor connected to the necessary peripherals, and which correctly builds and can be connected to over a debugger. Creation of this processor then enables software development to begin.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Implementation of the software design targeting the processor in the programmable logic.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Implementation of the remaining digital design; this may be done in parallel with the processor creation, depending upon the design.&lt;/p&gt;&lt;p style="margin:0;padding:4px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; Integration of the hardware and software design.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;As you can see, the development of the processor in the programmable logic can impact the design time, especially if the processor is not a standard one for the flow. Of course, this impact to the development timeline may be mitigated using a development board if one is available for the processor in development.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.4 Should I Use a Hard or Soft Processor?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;There is no hard and fast rule when choosing between a hard or soft-core processor; selecting a type of processor depends upon application demands. For example, the need to run a high-level operating system or framework may weight the decision towards one choice or the other.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;The table below shows some of the major comparison points between hard and soft processors, which can be used in conjunction with project requirements to help decision-making.&lt;/p&gt;&lt;center&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;table cellpadding="0" cellspacing="0" style="border:1px solid #ffffff;text-align:left;"&gt;&lt;thead&gt;&lt;tr style="font-size:14px;"&gt;&lt;th style="border:1px solid #ffffff;border-bottom:solid 2px;padding:6px;color:#ffffff;background-color:#4472c4;"&gt;&lt;strong&gt;Parameter&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid #ffffff;border-bottom:solid 2px;border-left:solid 1px;padding:6px;color:#ffffff;background-color:#4472c4;"&gt;&lt;strong&gt;Hard processor&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid #ffffff;border-left:solid 1px;border-bottom:solid 2px;padding:6px;color:#ffffff;background-color:#4472c4;"&gt;&lt;strong&gt;Soft processor&lt;/strong&gt;&lt;/th&gt;&lt;th style="border:1px solid #ffffff;border-left:solid 1px;border-bottom:solid 2px;padding:6px;color:#ffffff;background-color:#4472c4;" width="32%"&gt;&lt;strong&gt;Comment&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr style="background-color:#cfd5ea;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Performance&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to low&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#e9ebf5;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Impact on Logic Resources&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium to High&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Depends on additional supporting components required.&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#cfd5ea;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Customize Processor&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Hard Processors have limited configurability&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#e9ebf5;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Security&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Programmable Logic based soft implementations can still encrypt the bit stream&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#cfd5ea;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Power Efficiency&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#e9ebf5;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Portability&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;High&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;If open source is used can be very portable&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#cfd5ea;"&gt;&lt;td style="border:1px solid #ffffff;padding:6px;"&gt;Ease of Development&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;border-left:solid 1px #FFFFFF;padding:6px;"&gt;Medium&lt;/td&gt;&lt;td style="border:1px solid #ffffff;border-right:solid 1px #FFFFFF;padding:6px;"&gt;Low&lt;/td&gt;&lt;td style="border:1px solid #ffffff;padding:8px;"&gt;Need to create the processor in the programmable logic first&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="margin:0px auto;"&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Table 1: Comparison of Hard and Soft Processors&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/center&gt;&lt;p style="margin:0;padding-top:12px;"&gt;&lt;strong&gt;&lt;em&gt;- 4.5 Multi-Processor Systems&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Of course, I should say at this point that the use of a hard or soft processor is not mutually exclusive when a heterogeneous SoC is used. In this instance, the hard processor can be used along with the implementation of one or more soft cores within the programmable logic. This enables processing to be offloaded from the high-performance application processor to a dedicated processor in the programmable logic. An example of this might be motor control or sensor interfacing using dedicated softcore processors, and the application processor making the high-level analytics and algorithm implementation.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;We can also use different soft processor implementations within the same programmable logic design. For example, a medium performance MicroBlaze could be working with an Arm Cortex-M1 which is dedicated to sensor interfacing.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Such solutions require the correct implementation of multi-processor design technique. These techniques include:&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Mailbox:&lt;/strong&gt; Allows bi-directional communication between multiple processors using a First In First Out(FIFO) based approach to messaging.&lt;/p&gt;&lt;p style="margin:0;padding:8px 0px 0px 45px;"&gt;&lt;a href="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" src="/e14/assets/legacy/gen/small_square_bullet_oj5x5.gif" style="vertical-align:middle;"  /&gt;&lt;/a&gt; &lt;strong&gt;Mutex:&lt;/strong&gt; Implement mutual exclusion locks, which allows processors to lock shared resources, preventing multiple accesses at the same time.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;"&gt;An in-depth look at multi-processor communication is an Essentials course on its own; to help enable multi-processor systems there exist frameworks such as &lt;a class="jive-link-external-small" href="https://www.multicore-association.org/workgroup/oamp.php" rel="nofollow ugc noopener" target="_blank"&gt;OpenAMP&lt;/a&gt;.&lt;/p&gt;&lt;div style="padding:12px 5px 5px 0px;margin:0px auto;"&gt;&lt;center&gt;&lt;a href="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"&gt;&lt;img loading="lazy" alt="image" src="/e14/assets/legacy/2019/diagram9_hardsoftprocessprgmLgc.png"  /&gt;&lt;/a&gt;&lt;p style="margin:0;line-height:12px;font-size:11px;display:block;"&gt;&lt;em&gt;Figure 8: Multiple Processors &lt;/em&gt;&lt;/p&gt;&lt;/center&gt;&lt;/div&gt;&lt;p style="margin:0;"&gt;&lt;a name="sec5"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="color:#007fac;font-size:15px;padding:4px 8px;margin-top:16px;background-color:#e7f2f5;vertical-align:middle;"&gt;&lt;div style="display:inline-block;vertical-align:top;width:75%;"&gt;&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/div&gt;&lt;div style="display:inline-block;vertical-align:top;text-align:right;font-size:11px;width:24%;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p style="margin:0;padding-top:12px;"&gt;Both hard- and soft-core processors have their place in designs. It is up to the engineer to determine the best approach per application. Hopefully, having read through this Essentials course you are now familiar with the pros and cons of each type of processor and will be able to start making informed decisions towards the selection of the best processor per use case. You will also understand a little more about multiprocessor systems and how you can effectively communicate in your designs.&lt;/p&gt;&lt;p style="margin:0;padding-top:12px;font-size:11px;"&gt;*Trademark. &lt;strong&gt;Xilinx is a trademark of Xilinx Inc.&lt;/strong&gt; Other logos, product and/or company names may be trademarks of their respective owners.&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="border:1px solid #a9aaaa;background-color:#e7f2f5;padding:12px 12px 0px;"&gt;&lt;div style="vertical-align:top;float:left;padding-right:8px;"&gt;&lt;a href="/e14/assets/legacy/2019/PrgmDev4_profile.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox essProfile" height="115px" src="/e14/assets/legacy/2019/PrgmDev4_profile.png" style="float:left;padding-right:10px;vertical-align:middle;"  /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style="margin:0;font-size:15px;color:#007fac;padding-bottom:10px;"&gt;&lt;strong&gt; Shop our wide range&lt;/strong&gt; of SoCs, EVMs, application specific kits, embedded development boards, and more.&lt;/p&gt;&amp;nbsp; &lt;p style="margin:0;"&gt;&lt;span class="e14-button-large e14-button-primary"&gt;&lt;a class="jive-link-wiki-small" href="/learn/learning-center/online-learning/essentials/w/documents/4658/related-components-for-element14-essentials-programmable-devices-iv" title="Shop Now"&gt;Shop Now&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;clear:both;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;p style="margin:0;padding-top:20px;"&gt;&lt;a name="test"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin:0;color:#007fac;font-size:18px;padding-bottom:8px;"&gt;&lt;strong&gt;Test Your Knowledge&lt;/strong&gt;&lt;span style="font-size:11px;float:right;"&gt;&lt;a class="jive-link-anchor-small" href="#top"&gt;&lt;strong&gt;Back to Top&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png"&gt;&lt;img loading="lazy" alt="image" class="nolightbox" height="80" src="/e14/assets/legacy/2019/100x100badge_PrgmDevice4.png" style="vertical-align:top;float:left;padding:0px 10px 5px 0px;"  /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style="margin:0;padding-bottom:8px;"&gt;Are you ready to demonstrate your Hard and Soft Processors Essentials knowledge? &lt;strong&gt;Then take this 15-question quiz to see how much you&amp;#39;ve learned.&lt;/strong&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;strong&gt;To earn the Essentials Programmable Devices 4 Badge&lt;/strong&gt;, read through the learning module, attain 100% on the Quiz, leave us some feedback in the comments section, and give the learning module a star rating.&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-document-metadata e14-init-hidden"&gt; &lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="e14-quiz-question"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; [QUIZ QUESTION PLACEHOLDER]&lt;/div&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="migration-injected-attachments"&gt;&lt;div style="font-weight:bold;margin:15px 0 5px 0;"&gt;Attachments:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;table style="border:0;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="160"&gt;&lt;span class="_se_attachment" id="attid_https://www.element14.com/community/api/core/v3/attachments/295192"&gt;&lt;a href="https://community.element14.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-02-50/ProgrammableDevices4.pdf"&gt;community.element14.com/.../ProgrammableDevices4.pdf&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span style="font-size:80%;"&gt;ProgrammableDevices4.pdf&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: programmable_devices, programmable devices, xilinx, essentials, hard processors, programmable devices iv, soft processors, programmable logic, programmable_logic, ess_module&lt;/div&gt;
</description></item></channel></rss>