amaranth-lang / amaranth

A modern hardware definition language and toolchain based on Python
https://amaranth-lang.org/docs/amaranth/
BSD 2-Clause "Simplified" License
1.56k stars 174 forks source link

Question: Combinational vs Combinatorial #1301

Closed X-Illuminati closed 6 months ago

X-Illuminati commented 6 months ago

The language guide makes heavy reference to "combinatorial" logic.

In his reference text, Digital Design: Principles and Practice, Wakerly writes:

A step backward in MMI's introduction of PAL devices was their popularization of the word "combinatorial" to describe combinational circuits. Combinational circuits have no memory -- their output at any time depends on the current input combination. For well-rounded computer engineers, the word "combinatorial" should conjure up vivid images of binomial coefficients, problem-solving complexity, and computer-science-great Donald Knuth.

[1, p. 343]

On the other hand, the Wikipedia article, Combinational Logic, indicates that it is sometimes referred to as "combinatorial logic" and cites Maxfield's FPGAs: World Class Designs:

Some folks prefer to say "combinational logic," while others favor "combinatorial logic." 1822: England. Charles Babbage starts to build a mechanical calculating machine called the Difference Engine.

[2, p. 16]

So, perhaps the convention is not so clear cut. Is Wakerly just being a curmudgeon? Is Maxfield actually citing something that Charles Babbage said? It isn't clear.

In any case, if you were in favor of changing the documentation to say "combinational" rather than "combinatorial", I would be happy to submit a pull-request for same.


[1] John F. Wakerly, Digital Design: Principles and Practice (3rd Edition). Upper Saddle River, New Jersey, USA: Prentice hall, 2001.

[2] Clive Maxfield, FPGAs: World Class Designs. Newnes, 2009.

cr1901 commented 6 months ago

I personally learned "combinational", but lots of people/resources (including a Xilinx app note I read literally 10 minutes ago) use "combinatorial". It's probably not worth the effort to be prescriptive about this.

whitequark commented 6 months ago

I legitimately don't know. It seems that the more senior ASIC engineers prefer "combinational" but there also doesn't seem to be a clear winner and people understand each other fine.

Ask a question on English.SE?

whitequark commented 6 months ago

From an informal poll it looks like nearly everyone is in either "I've never heard combinational" or "I've never heard combinatorial" camp, which is fascinating.

It looks like both VHDL and SystemVerilog standards use "combinational", but I'm not sure what lesson to take from that.

tilk commented 6 months ago

All the textbooks I use in teaching use "combinational". Also, Wikipedia has an article on combinational logic, where they say it should not be confused with combinatory logic, which is a completely different thing.

EDIT: it looks like the remark on the use of "combinatorial", which was cited in the issue, was removed in a fresh change of the Wikipedia article. So another point: in Google results, the uses of "combinational logic" outnumber the uses of "combinatorial logic" by a factor of 20.

jfng commented 6 months ago

I use "combinatorial", as it sounds closer to the word we use in french ("combinatoire"). I am happy with either one, as long as we use it consistently.

whitequark commented 6 months ago

It seems like:

Clearly, going with "combinational" is preferred. @X-Illuminati Happy for you to do a PR and to add a note about this to our documentation style in docs/contrib!

X-Illuminati commented 6 months ago

Sure thing, I'm going to start working on the change and PR this afternoon. The recent edits to the wikipedia page do seem to support "combinational" from an editorial perspective and I see the talk page actually has some discussion on this as they previously renamed the article from Combinatorial Logic to Combinational Logic.

I enjoyed reading that mastodon thread, some funny reactions in there. I have to profess a certain amount of Mandela Effect about this topic - even though I learned from the Wakerly text and specifically remembering his aside about the terminology, after 10 years or so I had convinced myself that "combinatorial" was the correct term. I heard a youtuber mention "combinational" a few years ago and was about to write a strongly worded comment, as one does, but then I looked it up again and found that I had simply misremembered it.