EEC 281 - Homework/Project #2

Work individually, but I strongly recommend working with someone in the class nearby so you can help each other when you get stuck, with consideration of the Course Collaboration Policy. Send an email to me if something is not clear and I will update the assignment using green font.


Total: 235 points

For this homework/project, you may use the   "always @(*)"   verilog construct but keep an eye out for any situations where Design Compiler is not compatible with it.

  1. [20 pts] The purpose of this problem is to familiarize you with the synthesis process and to give you a rough feeling for the size of a few simple circuits in our standard cell library's technology. Copy the files from the DC tutorial (see link on the main EEC281 page) to get started. Synthesize the following circuits and report their total cell area. Do not include registers (flip-flops). Also, do not declare any wires or registers as "signed", but assume words are all 2's complement unless stated otherwise. No need to simulate, but your verilog must compile correctly (run "make check"). Also, for this problem, do not worry if designs do not meet timing (negative slack time).

    Turn in: 1) source verilog for each circuit, 2) totals in a single table so it can be used as a note sheet in the future. Do not submit any output synthesis reports.

    a) [2 pts] bitwise NOR of two 12-bit numbers (12-bit output)

    b) [2 pts] One 3:2 adder using verilog "&" "|", "^", "~". Draw your circuit and the circuit output by DC.

    c) [2 pts] One 3:2 adder using verilog "+".

    d) [3 pts] 12-bit carry-propagate adder (13-bit output). Use "+" in verilog. Write the circuit's maximum delay in your table.

    e) [5 pts] 12-bit carry-save adder that adds three 12-bit words into a single carry-save output. Write the circuit's maximum delay in your table.

    f) [3 pts] 8-bit x 8-bit unsigned multiplier (16-bit output). Use "*" in verilog.

    g) [3 pts] 16-bit x 16-bit unsigned multiplier (32-bit output). Use "*" in verilog.

  2. [20 pts] Build a ripple-carry adder with 12-bit inputs and 12-bit output using full adders from part 1(c). Register all inputs and outputs (to make synthesis timing accurate).

    a) [10 pts] Write design in verilog, test with at least 15 test cases in one simulation with a unique set of inputs calculated each clock cycle. Verify using method ***(3).

    b) [10 pts] Synthesize the design with a high clock frequency to find the maximum clock rate. State the maximum clock rate and corresponding area. Submit *.area and *.tim (longest path only) reports only.

  3. [30+10 pts] Repeat Problem 2(a)(b) with a carry-select adder composed of two 6-bit sections.

  4. [30+10+10 pts] Repeat Problem 2(a)(b) with a carry-select adder composed of three sections whose widths are chosen to minimize delay.

    c) [10 pts] Justify the partitioning you chose.

  5. [50+10 pts] Repeat Problem 2(a)(b) but pipeline the ripple-carry adder into 3 pipeline stages.

  6. [5 pts] Write a single table with 1) max clock frequency and 2) area for problems 2–5.

  7. [40 pts] Find the maximum possible clock frequency for a pipeline stage with no logic; that is, one register connected directly to another register.

    a) [25 pts] Appropriately synthesize one flip-flop connected to a second flip-flop to find the desired value. In a few sentences, state how you did this.

    b) [15 pts] Report each component of the minimum clock cycle time.



EEC 281 | B. Baas | ECE Dept. | UC Davis
2025/01/29  Posted