Data

Vol. 9 No. 8 – August 2011

Data

Articles

Abstraction in Hardware System Design

Applying lessons from software languages to hardware languages using Bluespec SystemVerilog

Abstraction in Hardware System Design

Applying lessons from software languages to hardware languages using Bluespec SystemVerilog


Rishiyur S. Nikhil, Bluespec Inc., USA


The history of software engineering is one of continuing development of abstraction mechanisms designed to tackle ever-increasing complexity. Hardware design, however, is not as current. For example, the two most commonly used HDLs (hardware description languages)—Verilog and VHDL12,9—date back to the 1980s. Updates to the standards lag behind modern programming languages in structural abstractions such as types, encapsulation, and parameterization. Their behavioral semantics lag even further. They are specified in terms of event-driven simulators running on uniprocessor von Neumann machines (and this is true even for their recent descendents, SystemVerilog and SystemC 10,11).

These HDLs all have "synthesizable subsets" that constrain them in an effort to narrow this behavioral gap, but the mismatch is never completely eliminated. The strain is beginning to show as hardware chip capacity has grown exponentially according to Moore's law and we are called upon to design entire SoCs (systems-on-a-chip) of astonishing diversity and complexity.

by Rishiyur S. Nikhil

How to Improve Security?

It takes more than flossing once a year.

How to Improve Security?

It takes more than flossing once a year.


Dear KV,

We recently had a security compromise at work, and now the whole IT department is scrambling to improve security. One problem this whole episode has brought to light is that so much security advice is generic. It's like being told to lock your door when you go out at night, without saying what kind of lock you ought to own or how many are enough to protect your house. I think by now most people know they need to lock their doors, so why aren't there more specific guidelines for securing systems?

by George Neville-Neil

Articles

Verification of Safety-critical Software

Avionics software safety certification is achieved through objective-based standards.

Verification of Safety-critical Software

Avionics software safety certification is achieved through objective-based standards


B. Scott Andersen and George Romanski, Verocel, Inc.


Avionics software has become a keystone in today's aircraft design. Advances in avionics systems have reduced aircraft weight thereby reducing fuel consumption, enabled precision navigation, improved engine performance, and provided a host of other benefits. These advances have turned modern aircraft into flying data centers with computers controlling or monitoring many of the critical systems onboard. The software that runs these aircraft systems must be as safe as we can make it.

The FAA (Federal Aviation Administration) and its European counterparts, along with the major airframe, engine, and avionics manufacturers worked together to produce guidance for avionics software developers culminating in the document Software Considerations in Airborne Systems and Equipment Certification6 published in the United States by the nonprofit organization RTCA as DO-178B and in Europe by EUROCAE as ED-12B. The guidance in DO-178B is in the form of objectives and activities that must be met or performed to earn certification for the software product.

by B. Scott Andersen, George Romanski

The World According to LINQ

Big data is about more than size, and LINQ is more than up to the task.

Verification of Safety-critical Software

Big data is about more than size, and LINQ is more than up to the task.


Erik Meijer


editor's note: This article uses many mathematical symbols that may not render propery in your browser. If the symbols do not display, you may wish to read the article in PDF format

Programmers building Web- and cloud-based applications wire together data from many different sources such as sensors, social networks, user interfaces, spreadsheets, and stock tickers. Most of this data does not fit in the closed and clean world of traditional relational databases. It is too big, unstructured, denormalized, and streaming in realtime. Presenting a unified programming model across all these disparate data models and query languages seems impossible at first. By focusing on the commonalities instead of the differences, however, most data sources will accept some form of computation to filter and transform collections of data.

Mathematicians long ago observed similarities between seemingly different mathematical structures and formalized this insight via category theory, specifically the notion of monads9 as a generalization of collections. Languages such as Haskell, Scala13, Python11, and even future versions of JavaScript6 have incorporated list and monad comprehensions to deal with side effects and computations over collections. The .NET languages of Visual Basic and C# adopted monads in the form of LINQ (Language-Integrated Query)7 as a way to bridge the gap between the worlds of objects and data. This article describes monads and LINQ as a generalization of the relational algebra and SQL used with arbitrary collections of arbitrary types, and explains why this makes LINQ a compelling basis for big data.

by Erik Meijer