Divide and conquer, or…
2 mins read
Divide and conquer is a valid strategy for solving complex problems. In essence, one seemingly insurmountable problem is broken down into smaller, manageable parts. These parts are solved separately and the results combined to produce an overall solution.
One of the greatest exponents of divide and conquer were the ancient Romans. They successfully used a technique they termed 'divide and rule' to amass and manage a vast empire that covered three continents. They got so good at it, that it became an entrenched and unquestioned part of the empire's day to day activity and governance. Indeed, many historians believe that Rome's blind faith in the necessity of dividing and isolating the different groups it ruled played a big part in the empire's stagnation and eventual decline. As one Roman senator put it at the time: "We spend so much of our energy dividing, we sometimes forget to rule!"
At a fundamental level, electronics designers employ divide and conquer to get around the increasing complexity of the devices and products they develop. Today we take a design problem, divide it into hardware, programmable hardware and software portions, and pretty much work independently on each bit. At some point these pieces are brought together to create the final product.
While this approach to design has served us well in the past, I believe we are approaching a somewhat Romanesque crossroads when it comes to the way we develop electronics products. Our comfortable acceptance of a set of siloed design flows is in danger of blinding us to greater possibilities that exist.
Programmable logic devices have now reached a performance/capacity/price tipping point and offer the tantalising prospect of a quantum jump in our design capabilities. We can start to create hardware with the same ease with which we currently create software. We can move functionality between hardware and software at will. And we can update hardware virtually without limits in the field.
If we are to blur the lines between hardware and software, using programmable devices as the filter, then we need to design in a way that allows a natural collaboration between all of the elements that go to make up the final product. We need to be able to push functionality between different domains at will, and keep all the elements in sync as we do.
In short, we have the opportunity to raise the abstraction level at which we do the whole of the design process. And I'm not talking about incrementally improving the individual pieces of the design puzzle. Simply finding efficiencies in software development or hardware design is not enough. We need to raze the walls between our disparate design processes and elevate our entire design stratagem to a new level. It's this that will give us a whole new world of design opportunities.
For this to occur, both designers and design tool companies need to look beyond whatever division they currently sit in, abandon their preconceptions about how electronics design should be done, and start discovering how we can pull our different communities into a coherent whole.