The purpose of this assignment is to introduce you to the Verilog hardware description language, which you will be using all term in carrying out your major design project. It is our intent to introduce these tools with an example that is small enough and familiar enough that you can focus on mastering the tools, rather than having to concentrate on the parts you are designing.
First extend the ALU which you designed in Homework 1a, as
follows: Connect the output of the ALU to a 16-bit register (we will
call it ALUout
) made of edge-triggered D flip flops. Connect 16-bit,
2-1 multiplexors to each input of the ALU. We will call them muxa
and
muxb
. Connect the Q
output of ALUout
to inputs of both muxa
and muxb
.
Translate this logic circuit into Verilog. The ALU should be
constructed structurally. It can then be instantiated in a higher
module, say TOP
. You can use the library part dff$
to instantiate the
edge-triggered D flip flops. You are expected to design your own
multiplexors, again using NAND gates only. Your ALU module may use the
following port declaration:
module ALU (a, b, s, out);
input [15:0] a, b;
input [1:0] s;
output [15:0] out;
Create a behavioral clock in the TOP
module. Set the cycle time to
100 ns. The D flip flop is clocked with this signal. Apply the
appropriate input patterns specified in the TOP
module using the
initial statement. You may assume that input changes (including the
select inputs) are synchronized with the positive edge of the clock.
Using VCS, verify the correctness of both your ALU design and your
timing calculations by applying test vectors and verifying the
results. Use the “typical” delays given for the library parts to
calculate the worst case delay. Use VirSim to generate the timing
diagrams, and print out a hardcopy. The timing diagrams should include
at least the following: the clock, the ALU control signals, the output
of the ALUout
register, the output of the muxes, and the output of the
ALU.
Make sure that you apply the input patterns which correspond to the
worst case delay for the complete feedback path (i.e., from the output
of ALUout
, through the mux, through the ALU, and back to the inputs of
the ALUout
register). All the signals along the feedback path should
be included in your timing diagrams and your simulations should
continue long enough for the results to arrive at the output of the
register. Show that your input patterns indeed correspond to the worst
case delay in the ALU. Submit more graphs if necessary.
Gradually reduce the cycle time. Find the minimum achievable cycle time that will not cause any timing problem in the circuit. Recall that the sum of the delays along the feedback path, plus the setup time of the D flip flop, should not be greater than the cycle time. Is your calculation consistent with that observed in the simulations?
Prepare a short report on the work done in step 3 through step 5 that includes the following: