PC Hardware Codexery

Hardware/software co-design

Hardware and software are developed together, not in isolation.

Hardware/software co-design

Hardware/software co-design, or HW/SW co-design, is a system-level approach where hardware and software are created together instead of separately. The aim is to improve overall system qualities like speed, energy use, cost, and adaptability by experimenting with different ways to divide tasks between hardware and software early in the design process. This method is common in embedded systems, cyber-physical systems, and heterogeneous computing platforms, where software processing and hardware acceleration must operate closely together.

The core idea is that hardware and software constraints are weighed simultaneously, so choices on one side account for the other. A function can be implemented as software running on a processor or as dedicated hardware logic, each option affecting performance, power, chip area, and cost. By keeping both possibilities open early on, co-design can find combinations that a single-sided approach would overlook. The boundary between hardware and software is treated as a design variable: computationally intensive, regular tasks get dedicated hardware, while control logic and changeable parts stay in software. Parameters like bit widths, buffer sizes, and parallelism are shared between both sides rather than set independently.

Co-design emerged in the late 1980s and early 1990s, as embedded systems grew more complex and the old practice of designing hardware and software separately became unworkable. Early products like telecom gear, industrial controllers, and consumer electronics faced tight performance and power limits that software tuning alone couldn't meet. Initial research focused on designing digital hardware and embedded software together, allowing a function to be placed either on a processor or in custom logic. Formal methods for partitioning, system-level specification, and performance estimation were developed, and electronic design automation tools began supporting these combined workflows. During the 1990s, co-design became closely linked to embedded systems and system-on-chip design, as integrating processors, memory, peripherals, and custom logic onto a single chip made joint design necessary for hitting cost, performance, and power targets.

Emergence period
late 1980s and early 1990s
Early applications
telecommunications equipment, industrial controllers, consumer electronics
Key enabling technology 2000s
field-programmable gate arrays (FPGAs)
Related tool
high-level synthesis (HLS) tools

Lore & Background

Hardware/software co-design took shape in the late 1980s and early 1990s, when embedded systems were growing more complex and the usual practice of designing hardware and software separately began to break down. Many early embedded products, such as telecommunications equipment, industrial controllers, and consumer electronics, had tight performance and power budgets that could not be met by tuning the software alone. Early research looked at how to design digital hardware and embedded software at the same time, so that a given function could be placed either on a processor or in dedicated logic. Researchers developed formal methods for hardware/software partitioning, system-level specification, and performance estimation, and electronic design automation (EDA) tools started to support these combined workflows.

During the 1990s, co-design became closely tied to embedded systems and system on chip design. As processors, memories, peripherals, and custom logic were integrated onto a single chip, designing the hardware and software together became necessary to meet cost, performance, and power targets. The increasing adoption of field-programmable gate arrays (FPGAs) in the 2000s widened the range of problems co-design could address. Unlike application-specific integrated circuits (ASICs), FPGAs can be reprogrammed after manufacturing, so the hardware can be modified alongside the software. High-level synthesis (HLS) tools lowered the barrier further by letting parts of a program written in high level languages such as C and C++ be turned into digital hardware. More recently, hardware/software co-design is being adopted for artificial intelligence (AI), cloud computing, and heterogeneous computing.

Reader's Guide

Hardware/software co-design is notable because it treats the boundary between hardware and software as a design variable, allowing exploration of combinations that one-sided approaches would miss. In co-design, computationally heavy, regular work is given a dedicated hardware implementation, while control logic and anything likely to change remains in software. Parameters such as bit widths, buffer sizes, and the degree of parallelism are shared between the two sides rather than fixed independently. This methodology differs from independent hardware/software design, where the separation restricts cross-layer optimization; from optimizing software for fixed hardware, which limits the ideal implementation; and from optimizing hardware for a specific software workload, which is common in embedded and real-time systems. Co-design instead treats both sides as an iterative, collaborative effort refined together against shared goals. Its legacy is seen in its widespread use across embedded systems, automotive and aerospace, telecommunications, computer vision, AI accelerators, data centers, and scientific computing, where combining general-purpose processors with application-specific hardware is essential for meeting performance, power, area, and cost targets.

Did You Know?

More in PC Hardware 1-24

Spotted an error? Know more?

Reader corrections go straight into our review queue. Suggest an edit · How this site is sourced

Comments

Loading…
Open in the interactive codex →