geraldli wrote
In this chapter. It says we can use DFF to construct a 1-bit register.
The final circuit has input(in, load) and output(out). It’s easy to be implemented
My question is, why do we need DFF to construct the 1-bit register?
As far As I know, the dff works depending on clock pulse.
However, it’s possible to construct a 1-bit register without the clock input(I actually simulate this and it works. But I don’t know how to upload an screenshot here). It works under the same rules:
if load==1 then out=in
if load==0 then out is unchanged
It seems the clock pulse is unnecessary if all we want is a simple register. The DFF with clock is much more complex.
Can any one help to explain the reason of using clock-based circuit here?
The problem you are going to have in using such a register is getting the load signal to assert and deassert at just the right time relative to inputs to ensure that you always capture the right value. This will be aggravated by the fact that the output of your register will change at a time dependent on when the inputs change and the outputs will be the inputs for other registers, thus affecting when they change. The end result will quickly be a highly unstable and unreliable circuit.
You can certainly design asynchronous state machines, but there are demons in those waters.
Where I worked we had several people that routinely designed asynchronous logic because it was "easy" to design. But they didn't take the kind of care that was required to do it right and killed a few chips as a result. After finding one of these failure points in a design I finally convinced them to adopt a "fully synchronous unless there's a damn good and well-documented reason to do otherwise" policy. That served use well for a number of years until we had to do a design in which we had to suppress the clock during certain noise-sensitive portions of the processing but still needed sequential logic to work.
So since I had been the person that pushed so hard for the "that shalt not use asynchronous logic" rule, I got tasked with designing the asynchronous logic for the chip since now we had a damn good reason. The result was a latch circuit that had forward and backward handshaking built in and that worked quite well, but it was NOT easy to design or verify the basic building block.
It was rather ironic that I, the champion of fully-synchronous logic design, became the only person in the company that was allowed to do asynchronous designs for several years.