<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>EE260 (Fall, 2025) | Yao Zheng@UHM</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/</link><atom:link href="https://gustybear.github.io/docs/exams/course_ece260_2025_fall/index.xml" rel="self" type="application/rss+xml"/><description>EE260 (Fall, 2025)</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Tue, 25 Nov 2025 00:00:00 +0000</lastBuildDate><image><url>https://gustybear.github.io/media/logo_hu_d0a0b1783c391ac0.png</url><title>EE260 (Fall, 2025)</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/</link></image><item><title>Take-Home Midterm Exam: Combinational Circuits and Verilog</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_01_game/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate><guid>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_01_game/</guid><description>&lt;p>&lt;strong>Scope:&lt;/strong> Number systems, Boolean algebra, combinational design, optimization, hazards, MUX/decoder/PLA, Verilog HDL&lt;br>
&lt;strong>Duration:&lt;/strong> 48 hours&lt;br>
&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Attempt &lt;strong>all&lt;/strong> questions. Show reasoning, derivations, and clearly state assumptions.&lt;/li>
&lt;li>Provide &lt;strong>commented, synthesizable Verilog&lt;/strong> and a &lt;strong>self‑checking testbench&lt;/strong> where requested.&lt;/li>
&lt;li>Include brief timing/area reasoning (big‑O style or gate/count estimates).&lt;/li>
&lt;li>No collaboration. Cite any external references you consulted.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-a--multiple-choice-10--3--30-pts">Part A — Multiple Choice (10 × 3 = 30 pts)&lt;/h2>
&lt;p>Select the &lt;strong>best&lt;/strong> answer.&lt;/p>
&lt;p>&lt;strong>Q1.&lt;/strong> Which of the following is &lt;em>not&lt;/em> a characteristic of combinational logic?&lt;br>
a) Output depends only on present inputs&lt;br>
b) No feedback paths&lt;br>
c) May exhibit propagation delay&lt;br>
d) Requires clock edge to update&lt;/p>
&lt;p>&lt;strong>Q2.&lt;/strong> Which Verilog statement is &lt;em>not&lt;/em> synthesizable in general FPGA/ASIC tools?&lt;br>
a) &lt;code>assign y = a &amp;amp; b;&lt;/code>&lt;br>
b) &lt;code>always @(*) y = a | b;&lt;/code>&lt;br>
c) &lt;code>initial y = 0;&lt;/code>&lt;br>
d) &lt;code>case(sel) y = d0; endcase&lt;/code>&lt;/p>
&lt;p>&lt;strong>Q3.&lt;/strong> The &lt;strong>critical path delay&lt;/strong> in a ripple‑carry adder grows:&lt;br>
a) Linearly with bit‑width&lt;br>
b) Logarithmically with bit‑width&lt;br>
c) Constant with bit‑width&lt;br>
d) Randomly with input values&lt;/p>
&lt;p>&lt;strong>Q4.&lt;/strong> Which gate set is &lt;strong>not&lt;/strong> functionally complete?&lt;br>
a) {NAND}&lt;br>
b) {NOR}&lt;br>
c) {AND, OR}&lt;br>
d) {XOR, AND}&lt;/p>
&lt;p>&lt;strong>Q5.&lt;/strong> In Verilog, &lt;code>reg&lt;/code> and &lt;code>wire&lt;/code> differ because:&lt;br>
a) &lt;code>reg&lt;/code> can only be used in sequential circuits&lt;br>
b) &lt;code>wire&lt;/code> holds values without drivers&lt;br>
c) &lt;code>reg&lt;/code> stores a value until reassigned; &lt;code>wire&lt;/code> reflects drivers continuously&lt;br>
d) &lt;code>wire&lt;/code> is faster than &lt;code>reg&lt;/code>&lt;/p>
&lt;p>&lt;strong>Q6.&lt;/strong> A 32‑to‑1 multiplexer can be implemented most efficiently using:&lt;br>
a) One 32‑input gate&lt;br>
b) A tree of 2‑to‑1 multiplexers&lt;br>
c) A PLA&lt;br>
d) Multiple XOR gates&lt;/p>
&lt;p>&lt;strong>Q7.&lt;/strong> Which optimization reduces &lt;strong>logic depth&lt;/strong> the most?&lt;br>
a) Gate duplication&lt;br>
b) Pipelining&lt;br>
c) Karnaugh map simplification&lt;br>
d) Multi‑level factoring&lt;/p>
&lt;p>&lt;strong>Q8.&lt;/strong> Which Verilog operator performs &lt;strong>bitwise XNOR&lt;/strong>?&lt;br>
a) &lt;code>~^&lt;/code>&lt;br>
b) &lt;code>^~&lt;/code>&lt;br>
c) Both a and b&lt;br>
d) None&lt;/p>
&lt;p>&lt;strong>Q9.&lt;/strong> Main limitation of ROM implementation for logic functions is:&lt;br>
a) Too slow for combinational circuits&lt;br>
b) Size grows exponentially with #inputs&lt;br>
c) Can only implement sequential logic&lt;br>
d) Does not support initialization&lt;/p>
&lt;p>&lt;strong>Q10.&lt;/strong> If two drivers assign conflicting values to a Verilog &lt;code>wire&lt;/code>:&lt;br>
a) Last assignment wins&lt;br>
b) Wire holds 0&lt;br>
c) Wire holds 1&lt;br>
d) Wire becomes unknown (&lt;code>x&lt;/code>)&lt;/p>
&lt;hr>
&lt;h2 id="part-b--design--analysis-10--7--70-pts">Part B — Design &amp;amp; Analysis (10 × 7 = 70 pts)&lt;/h2>
&lt;p>&lt;strong>Problem 1 — Functional Completeness (NAND‑Only)&lt;/strong>&lt;br>
a) Prove {NAND} is functionally complete (construct NOT, AND, OR).&lt;br>
b) Implement \(F(A,B,C)=\Sigma(0,2,5,7)\) using &lt;strong>NAND‑only&lt;/strong>. Show product terms and sharing.&lt;br>
c) Provide synthesizable Verilog for the NAND‑only implementation and compare gate count v.s. SOP using AND/OR/NOT.&lt;/p>
&lt;p>&lt;strong>Problem 2 — Arithmetic: Carry‑Save Adder (CSA)&lt;/strong>&lt;br>
a) Derive a 3‑operand (A,B,C) 4‑bit CSA producing (Sum, Carry).&lt;br>
b) Compare worst‑case delay against 2‑operand ripple add repeated twice.&lt;br>
c) Provide synthesizable Verilog for a parameterized CSA.&lt;/p>
&lt;p>&lt;strong>Problem 3 — 16→4 Priority Encoder&lt;/strong>&lt;br>
a) Specify truth table/priority convention (D\(15\) highest). Include &lt;code>valid&lt;/code>.&lt;br>
b) Build hierarchically from 4×(4→2) encoders + 4→2 encoder.&lt;br>
c) Structural Verilog with module instances.&lt;/p>
&lt;p>&lt;strong>Problem 4 — PLA and ROM Implementations&lt;/strong>&lt;br>
Given:&lt;br>
\(F_1(A,B,C,D)=\Sigma(0,2,5,8,12),\quad F_2(A,B,C,D)=\Sigma(1,3,4,9,15)\)&lt;br>
a) Derive minimized SOPs with shared product terms for a PLA.&lt;br>
b) Sketch a PLA with labeled shared products.&lt;br>
c) Show 16×2 ROM mapping (address=A B C D).&lt;br>
d) Provide generic Verilog: (i) PLA using &lt;code>and&lt;/code> of literals + &lt;code>or&lt;/code> planes; (ii) ROM using &lt;code>case&lt;/code> or packed &lt;code>localparam&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 5 — Scalable MUX&lt;/strong>&lt;br>
a) Build a &lt;strong>16→1&lt;/strong> MUX using only 2→1 MUXes (balanced tree).&lt;br>
b) Count 2→1 cells and tree depth.&lt;br>
c) Write a parameterized &lt;strong>recursive&lt;/strong> Verilog module &lt;code>mux_tree #(N=16,W=1)&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 6 — Comparator (4‑bit)&lt;/strong>&lt;br>
a) Derive equations for &lt;code>GT, EQ, LT&lt;/code>.&lt;br>
b) Show hierarchical design from chained 1‑bit comparators.&lt;br>
c) Provide synthesizable Verilog and a constrained‑random testbench.&lt;/p>
&lt;p>&lt;strong>Problem 7 — Gray/Binary Converters (4‑bit)&lt;/strong>&lt;br>
a) Derive equations: Gray→Bin and Bin→Gray.&lt;br>
b) Compose them in loopback to prove &lt;code>Bin == g2b(b2g(Bin))&lt;/code>.&lt;br>
c) Parameterized Verilog + exhaustive testbench.&lt;/p>
&lt;p>&lt;strong>Problem 8 — Digital Lock&lt;/strong>&lt;br>
Opens for inputs &lt;strong>110101&lt;/strong> or &lt;strong>011110&lt;/strong>.&lt;br>
a) Minimize SOP.&lt;br>
b) Implement via decoder + OR.&lt;br>
c) Verilog (behavioral and structural).&lt;br>
d) Short note: why loose “don’t care” policies are risky for security.&lt;/p>
&lt;p>&lt;strong>Problem 9 — Parameterized ALU&lt;/strong>&lt;br>
Ops: ADD, SUB, AND, OR, XOR, CMP(==,&amp;gt;,&amp;lt;). Width parameter &lt;code>N&lt;/code>.&lt;br>
a) Synthesizable Verilog with &lt;code>unique case&lt;/code>.&lt;br>
b) Self‑checking randomized testbench (seeded).&lt;br>
c) Brief resource discussion for N=8 vs N=32 (qualitative + simple count).&lt;/p>
&lt;p>&lt;strong>Problem 10 — Adder Tree&lt;/strong>&lt;br>
Sum eight 16‑bit numbers with minimal depth.&lt;br>
a) Draw balanced adder tree and give depth.&lt;br>
b) Compare with serial accumulation.&lt;br>
c) Parameterized Verilog using &lt;code>generate&lt;/code> and a reduction tree.&lt;/p></description></item><item><title>Take-Home Midterm Exam Solution: Combinational Circuits and Verilog</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_01_solutions/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate><guid>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_01_solutions/</guid><description>&lt;p>&lt;strong>Scope:&lt;/strong> Number systems, Boolean algebra, combinational design, optimization, hazards, MUX/decoder/PLA, Verilog HDL&lt;br>
&lt;strong>Duration:&lt;/strong> 48 hours&lt;br>
&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Attempt &lt;strong>all&lt;/strong> questions. Show reasoning, derivations, and clearly state assumptions.&lt;/li>
&lt;li>Provide &lt;strong>commented, synthesizable Verilog&lt;/strong> and a &lt;strong>self‑checking testbench&lt;/strong> where requested.&lt;/li>
&lt;li>Include brief timing/area reasoning (big‑O style or gate/count estimates).&lt;/li>
&lt;li>No collaboration. Cite any external references you consulted.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-a--multiple-choice-keys">Part A — Multiple Choice (Keys)&lt;/h2>
&lt;ol>
&lt;li>d&lt;/li>
&lt;li>c&lt;/li>
&lt;li>a&lt;/li>
&lt;li>c&lt;/li>
&lt;li>c&lt;/li>
&lt;li>b&lt;/li>
&lt;li>d&lt;/li>
&lt;li>c&lt;/li>
&lt;li>b&lt;/li>
&lt;li>d&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="part-b--design--analysis">Part B — Design &amp;amp; Analysis&lt;/h2>
&lt;h3 id="problem-1--functional-completeness-nandonly">Problem 1 — Functional Completeness (NAND‑Only)&lt;/h3>
&lt;p>&lt;strong>a) Constructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>NOT: \( \neg A = A\,\text{NAND}\,A \)&lt;/li>
&lt;li>AND: \( A\land B = (A\,\text{NAND}\,B)\,\text{NAND}\,(A\,\text{NAND}\,B) \)&lt;/li>
&lt;li>OR (by De Morgan): \( A\lor B = (\neg A)\,\text{NAND}\,(\neg B) = (A\,\text{NAND}\,A)\,\text{NAND}\,(B\,\text{NAND}\,B) \)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>b) Minimal SOP for&lt;/strong> \(F=\Sigma(0,2,5,7)\) &lt;strong>→&lt;/strong> \(F = A' C' + A C\). (Covers 0,2 and 5,7.)&lt;/p>
&lt;p>&lt;strong>c) NAND‑only Verilog&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-verilog" data-lang="verilog">&lt;span class="line">&lt;span class="cl">&lt;span class="k">module&lt;/span> &lt;span class="n">F_nand_only&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">input&lt;/span> &lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">C&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">output&lt;/span> &lt;span class="n">F&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="n">nA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">t1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">t2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// B not used after minimization
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">A&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="n">nA_and_nC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AbarCbar&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nA_and_nC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nC&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">AbarCbar&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nA_and_nC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nA_and_nC&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="n">AandC_n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AandC&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">AandC_n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">AandC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AandC_n&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AandC_n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="n">nAbarCbar&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nAandC&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nAbarCbar&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AbarCbar&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AbarCbar&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nAandC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AandC&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">AandC&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">nand&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nAbarCbar&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nAandC&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">endmodule&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Gate count ~7 NANDs.&lt;/p>
&lt;hr>
&lt;h3 id="problem-2--csa">Problem 2 — CSA&lt;/h3>
&lt;p>Sum bits: \(s_i = a_i \oplus b_i \oplus c_i\), carry bits: \(k_i=(a_ib_i)+(b_ic_i)+(a_ic_i)\). Final result = &lt;code>s + (k&amp;lt;&amp;lt;1)&lt;/code> via one CPA. Delay better than two ripples.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-verilog" data-lang="verilog">&lt;span class="line">&lt;span class="cl">&lt;span class="k">module&lt;/span> &lt;span class="n">csa3&lt;/span> &lt;span class="p">#(&lt;/span>&lt;span class="k">parameter&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">4&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="k">input&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">output&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">output&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">genvar&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">generate&lt;/span> &lt;span class="k">for&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="p">;&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">begin&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">g&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assign&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">^&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assign&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">])&lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">c&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">end&lt;/span> &lt;span class="k">endgenerate&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">endmodule&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="problem-3--164-priority-encoder">Problem 3 — 16→4 Priority Encoder&lt;/h3>
&lt;p>See hierarchical structural solution:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-verilog" data-lang="verilog">&lt;span class="line">&lt;span class="cl">&lt;span class="k">module&lt;/span> &lt;span class="n">pe4&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">input&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">output&lt;/span> &lt;span class="n">valid&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">output&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assign&lt;/span> &lt;span class="n">valid&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">|&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assign&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">!&lt;/span>&lt;span class="n">valid&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mb">&amp;#39;b00&lt;/span> &lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mb">&amp;#39;b11&lt;/span> &lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mb">&amp;#39;b10&lt;/span> &lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mb">&amp;#39;b01&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mb">&amp;#39;b00&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">endmodule&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">module&lt;/span> &lt;span class="n">pe16&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">input&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">15&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">output&lt;/span> &lt;span class="n">valid&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">output&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="kt">wire&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">y0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">y1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">y2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">y3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pe4&lt;/span> &lt;span class="n">u0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">y0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pe4&lt;/span> &lt;span class="n">u1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">7&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">4&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">y1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pe4&lt;/span> &lt;span class="n">u2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">11&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">8&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">y2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pe4&lt;/span> &lt;span class="n">u3&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">15&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">12&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">y3&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pe4&lt;/span> &lt;span class="n">uT&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">valid&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">2&lt;/span>&lt;span class="p">]);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">reg&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">always&lt;/span> &lt;span class="p">@(&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">case&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">y&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">2&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">2&lt;/span>&lt;span class="mi">&amp;#39;d0&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">y0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mi">&amp;#39;d1&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">y1&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="mh">2&lt;/span>&lt;span class="mi">&amp;#39;d2&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">y2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">default&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="n">low&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">y3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">endcase&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assign&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">low&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">endmodule&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h3 id="problem-4--pla--rom">Problem 4 — PLA &amp;amp; ROM&lt;/h3>
&lt;p>One valid sharing (not unique):&lt;/p>
&lt;ul>
&lt;li>\(F_1 = A'B' + C'D' + AD'\)&lt;/li>
&lt;li>\(F_2 = A'CD + AB' + B'D\)&lt;/li>
&lt;/ul>
&lt;p>PLA code shown (shared terms). ROM mapping by full truth table is acceptable (example mapping provided in handout).&lt;/p>
&lt;hr>
&lt;h3 id="problem-5--scalable-mux">Problem 5 — Scalable MUX&lt;/h3>
&lt;p>Uses \(N-1\) 2→1 cells; for 16→1, 15 cells, depth 4. Recursive &lt;code>mux_tree&lt;/code> given in handout; students verify widths and &lt;code>$clog2&lt;/code> correctness with synthesis/sim.&lt;/p>
&lt;hr>
&lt;h3 id="problem-6--comparator">Problem 6 — Comparator&lt;/h3>
&lt;p>Equations:&lt;br>
&lt;code>EQ = Π_i ~(Ai ^ Bi)&lt;/code>&lt;br>
&lt;code>GT = g3 | (eq3&amp;amp;g2) | (eq3&amp;amp;eq2&amp;amp;g1) | (eq3&amp;amp;eq2&amp;amp;eq1&amp;amp;g0)&lt;/code>&lt;br>
&lt;code>LT&lt;/code> mirror. Verilog in handout accepted.&lt;/p>
&lt;hr>
&lt;h3 id="problem-7--graybinary">Problem 7 — Gray/Binary&lt;/h3>
&lt;p>Gray→Bin prefix XOR; Bin→Gray adjacent XOR. Parameterized modules and exhaustive TB as shown.&lt;/p>
&lt;hr>
&lt;h3 id="problem-8--lock">Problem 8 — Lock&lt;/h3>
&lt;p>&lt;code>assign open = (in==6'b110101) || (in==6'b011110);&lt;/code>&lt;br>
Security note: define all unspecified inputs as closed (0); avoid ‘x’ in synthesizable paths.&lt;/p>
&lt;hr>
&lt;h3 id="problem-9--alu">Problem 9 — ALU&lt;/h3>
&lt;p>Reference ALU with &lt;code>unique case&lt;/code>. TB randomizes A,B and compares against high‑level model. Resource: adder dominates; scaling roughly linear with N for ripple implementations.&lt;/p>
&lt;hr>
&lt;h3 id="problem-10--adder-tree">Problem 10 — Adder Tree&lt;/h3>
&lt;p>Balanced tree depth 3 for 8 inputs; serial is 7. Example parameterized module provided; students may generalize to 2^k inputs or pad to nearest power of two.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-verilog" data-lang="verilog">&lt;span class="line">&lt;span class="cl">&lt;span class="k">module&lt;/span> &lt;span class="n">sum8&lt;/span> &lt;span class="p">#(&lt;/span>&lt;span class="k">parameter&lt;/span> &lt;span class="n">W&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">16&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="k">input&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">W&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">a0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">a7&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">output&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">W&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">3&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">sum&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nl">W:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">s0&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">a0&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s1&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">a2&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">a3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s2&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">a4&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">a5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s3&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">a6&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">a7&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">wire&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">W&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="mh">1&lt;/span>&lt;span class="o">:&lt;/span>&lt;span class="mh">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="n">t0&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">s0&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">s1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">t1&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">s2&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">s3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">assign&lt;/span> &lt;span class="n">sum&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">t0&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">t1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">endmodule&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr></description></item><item><title>Take-Home Midterm Exam: Sequential Circuits and Verilog</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_02_game/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate><guid>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_02_game/</guid><description>&lt;p>&lt;strong>Scope:&lt;/strong> Sequential logic, finite state machines, registers, counters, with Verilog modeling&lt;br>
&lt;strong>Duration:&lt;/strong> 48 hours&lt;br>
&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Attempt &lt;strong>all&lt;/strong> questions. Show reasoning, derivations, and clearly state assumptions.&lt;/li>
&lt;li>Provide &lt;strong>commented, synthesizable Verilog&lt;/strong> and a &lt;strong>self‑checking testbench&lt;/strong> where requested.&lt;/li>
&lt;li>Include brief timing/area reasoning (big‑O style or gate/count estimates).&lt;/li>
&lt;li>No collaboration. Cite any external references you consulted.&lt;/li>
&lt;li>Tutorial of Online tools for Verilog simulation can be found
.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-a--multiple-choice-10--3-pts--30-pts">Part A — Multiple Choice (10 × 3 pts = 30 pts)&lt;/h2>
&lt;p>Select the &lt;strong>best&lt;/strong> answer.&lt;/p>
&lt;p>&lt;strong>Q1.&lt;/strong> A positive-level D latch is best described as:&lt;/p>
&lt;ul>
&lt;li>A. Sampling on rising edges only&lt;/li>
&lt;li>B. Transparent when clock=1 and opaque when clock=0&lt;/li>
&lt;li>C. Triggered on both edges&lt;/li>
&lt;li>D. Metastability-free by design&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q2.&lt;/strong> The parameter that primarily limits f_max is:&lt;/p>
&lt;ul>
&lt;li>A. Hold time&lt;/li>
&lt;li>B. Recovery time&lt;/li>
&lt;li>C. t_clk-q + t_comb + t_setup&lt;/li>
&lt;li>D. Clock duty cycle&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q3.&lt;/strong> A T flip-flop divides the clock by two because it:&lt;/p>
&lt;ul>
&lt;li>A. Filters every other edge by delay&lt;/li>
&lt;li>B. Toggles its output at each active edge&lt;/li>
&lt;li>C. Samples input twice per cycle&lt;/li>
&lt;li>D. Has J=0, K=1&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q4.&lt;/strong> A ripple counter differs from a synchronous counter because:&lt;/p>
&lt;ul>
&lt;li>A. It uses fewer flip-flops&lt;/li>
&lt;li>B. Its stages are clocked by preceding stage outputs&lt;/li>
&lt;li>C. It is immune to propagation delay&lt;/li>
&lt;li>D. It is always faster&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q5.&lt;/strong> In a Moore machine, outputs depend on:&lt;/p>
&lt;ul>
&lt;li>A. Current input only&lt;/li>
&lt;li>B. Current state only&lt;/li>
&lt;li>C. Next state only&lt;/li>
&lt;li>D. Current and previous inputs&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q6.&lt;/strong> In a Mealy machine:&lt;/p>
&lt;ul>
&lt;li>A. Outputs change only at clock edges&lt;/li>
&lt;li>B. Outputs depend on state and inputs&lt;/li>
&lt;li>C. It needs more states than Moore always&lt;/li>
&lt;li>D. It cannot be coded in Verilog&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q7.&lt;/strong> A 4-bit shift register with serial input 1101 after four clocks contains (MSB..LSB):&lt;/p>
&lt;ul>
&lt;li>A. 1011&lt;/li>
&lt;li>B. 1101&lt;/li>
&lt;li>C. 0110&lt;/li>
&lt;li>D. 1110&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q8.&lt;/strong> A hold-time violation can be mitigated by:&lt;/p>
&lt;ul>
&lt;li>A. Adding delay to data path&lt;/li>
&lt;li>B. Increasing clock frequency&lt;/li>
&lt;li>C. Reducing setup time&lt;/li>
&lt;li>D. Removing all registers&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q9.&lt;/strong> One-hot encoding of an N-state FSM uses:&lt;/p>
&lt;ul>
&lt;li>A. log2(N) flip-flops&lt;/li>
&lt;li>B. N flip-flops&lt;/li>
&lt;li>C. N-1 flip-flops&lt;/li>
&lt;li>D. 2N flip-flops&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q10.&lt;/strong> Pipeline registers primarily:&lt;/p>
&lt;ul>
&lt;li>A. Reduce combinational delay per stage&lt;/li>
&lt;li>B. Store only final outputs&lt;/li>
&lt;li>C. Remove all hazards&lt;/li>
&lt;li>D. Reduce setup time of FFs&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-b--design--analysis-10--7--70-pts">Part B — Design &amp;amp; Analysis (10 × 7 = 70 pts)&lt;/h2>
&lt;p>For each problem, complete the Verilog template in the
and verify using the provided self‑checking testbench.
Name your top‑level modules exactly as specified.&lt;/p>
&lt;p>&lt;strong>Files provided (in the questions zip):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Templates: &lt;code>*.v&lt;/code> (one per problem)&lt;/li>
&lt;li>Testbenches: &lt;code>tb_*.v&lt;/code> (one per problem)&lt;/li>
&lt;li>Timescale: &lt;code>1ns/1ps&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Problems:&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Problem 1 — Synchronizer + Edge Detect (&lt;code>sync_edge&lt;/code>)&lt;/strong>&lt;br>
Synchronize asynchronous &lt;code>btn_async&lt;/code> into &lt;code>clk&lt;/code> with a two‑FF synchronizer; output &lt;code>btn_sync&lt;/code> level and one‑cycle &lt;code>btn_pulse&lt;/code> on rising edges. Active‑low &lt;code>rst_n&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 2 — Dual‑Edge Capture (&lt;code>ddr_reg&lt;/code>)&lt;/strong>&lt;br>
Capture &lt;code>D&lt;/code> on posedge into &lt;code>Q_pos&lt;/code> and on negedge into &lt;code>Q_neg&lt;/code>. Active‑low &lt;code>rst_n&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 3 — Mealy Sequence Detector “11010” (&lt;code>seq_11010_mealy&lt;/code>)&lt;/strong>&lt;br>
Detect the overlapping pattern and assert &lt;code>Z&lt;/code> on the final bit. Use a minimal FSM.&lt;/p>
&lt;p>&lt;strong>Problem 4 — Mod‑6 Up/Down Counter with Enable (&lt;code>mod6_counter&lt;/code>)&lt;/strong>&lt;br>
3‑bit counter over 0..5. &lt;code>En&lt;/code> gates counting; &lt;code>Dir=1&lt;/code> up, &lt;code>0&lt;/code> down. Synchronous reset to 0.&lt;/p>
&lt;p>&lt;strong>Problem 5 — 4×4 Serial Multiplier Controller (&lt;code>mul4_ctrl&lt;/code>)&lt;/strong>&lt;br>
Shift‑add controller with signals &lt;code>LdA,LdB,ClrP,Add,Shift,Done&lt;/code>. Start with &lt;code>start=1&lt;/code>. Iterate 4 times.&lt;/p>
&lt;p>&lt;strong>Problem 6 — 2‑Stage Pipeline &lt;code>(A+B)*C&lt;/code> with Valid/Ready (&lt;code>pipe_add_mul&lt;/code>)&lt;/strong>&lt;br>
Implement a two‑stage pipeline (add then multiply) with back‑pressure (&lt;code>in_valid/in_ready&lt;/code>, &lt;code>out_valid/out_ready&lt;/code>).&lt;/p>
&lt;p>&lt;strong>Problem 7 — CDC Bridge 1 MHz → 100 MHz (&lt;code>cdc_bridge&lt;/code>)&lt;/strong>&lt;br>
Use a &lt;code>req/ack&lt;/code> handshake and 2FF synchronizers both directions to transfer an 8‑bit word reliably.&lt;/p>
&lt;p>&lt;strong>Problem 8 — Moore FSM with Registered Output (&lt;code>moore_safe&lt;/code>)&lt;/strong>&lt;br>
Provide both combinational output &lt;code>Zc&lt;/code> and registered &lt;code>Zr&lt;/code> (hazard‑free).&lt;/p>
&lt;p>&lt;strong>Problem 9 — Sequential 4‑bit ALU (&lt;code>seq_alu4&lt;/code>)&lt;/strong>&lt;br>
Opcode: 00=ADD, 01=AND, 10=XOR, 11=SHL. Registered outputs &lt;code>Y&lt;/code> and &lt;code>Cout&lt;/code> with synchronous reset.&lt;/p>
&lt;p>&lt;strong>Problem 10 — Traffic Lights with Pedestrian Preempt (&lt;code>traffic_ped&lt;/code>)&lt;/strong>&lt;br>
Main: G×3, Y×1; Side: G×2, Y×1. Insert &lt;code>WALK&lt;/code>×4 at a safe point when &lt;code>ped_req=1&lt;/code>; resume correctly.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Deliverables:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>PDF with answers to Section A and brief design notes for Section B.&lt;/li>
&lt;li>Verilog sources for all 10 designs.&lt;/li>
&lt;li>Simulation logs/screenshots demonstrating passing testbenches.&lt;/li>
&lt;/ul></description></item><item><title>Take-Home Midterm Exam: Sequential Circuits and Verilog</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_02_solutions/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate><guid>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_02_solutions/</guid><description>&lt;p>&lt;strong>Scope:&lt;/strong> Sequential logic, finite state machines, registers, counters, with Verilog modeling&lt;br>
&lt;strong>Duration:&lt;/strong> 48 hours&lt;br>
&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Attempt &lt;strong>all&lt;/strong> questions. Show reasoning, derivations, and clearly state assumptions.&lt;/li>
&lt;li>Provide &lt;strong>commented, synthesizable Verilog&lt;/strong> and a &lt;strong>self‑checking testbench&lt;/strong> where requested.&lt;/li>
&lt;li>Include brief timing/area reasoning (big‑O style or gate/count estimates).&lt;/li>
&lt;li>No collaboration. Cite any external references you consulted.&lt;/li>
&lt;li>Tutorial of Online tools for Verilog simulation can be found
.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-a--multiple-choice-10--3-pts--30-pts">Part A — Multiple Choice (10 × 3 pts = 30 pts)&lt;/h2>
&lt;p>Select the &lt;strong>best&lt;/strong> answer.&lt;/p>
&lt;h2 id="part-a--multiple-choice-keys">Part A — Multiple Choice (Keys)&lt;/h2>
&lt;ol>
&lt;li>b&lt;/li>
&lt;li>c&lt;/li>
&lt;li>b&lt;/li>
&lt;li>b&lt;/li>
&lt;li>b&lt;/li>
&lt;li>b&lt;/li>
&lt;li>b&lt;/li>
&lt;li>a&lt;/li>
&lt;li>b&lt;/li>
&lt;li>a&lt;/li>
&lt;/ol>
&lt;h2 id="part-a-mp--multiple-choice-keys">Part A (MP) — Multiple Choice (Keys)&lt;/h2>
&lt;ol>
&lt;li>b&lt;/li>
&lt;li>c&lt;/li>
&lt;li>b&lt;/li>
&lt;li>c&lt;/li>
&lt;li>c&lt;/li>
&lt;li>c&lt;/li>
&lt;li>b&lt;/li>
&lt;li>b&lt;/li>
&lt;li>b&lt;/li>
&lt;li>d&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="part-b--design--analysis-10--7--70-pts">Part B — Design &amp;amp; Analysis (10 × 7 = 70 pts)&lt;/h2>
&lt;p>Download solutions
.&lt;/p>
&lt;p>&lt;strong>Files provided (in the questions zip):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Templates: &lt;code>*.v&lt;/code> (one per problem)&lt;/li>
&lt;li>Testbenches: &lt;code>tb_*.v&lt;/code> (one per problem)&lt;/li>
&lt;li>Timescale: &lt;code>1ns/1ps&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Problems:&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Problem 1 — Synchronizer + Edge Detect (&lt;code>sync_edge&lt;/code>)&lt;/strong>&lt;br>
Synchronize asynchronous &lt;code>btn_async&lt;/code> into &lt;code>clk&lt;/code> with a two‑FF synchronizer; output &lt;code>btn_sync&lt;/code> level and one‑cycle &lt;code>btn_pulse&lt;/code> on rising edges. Active‑low &lt;code>rst_n&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 2 — Dual‑Edge Capture (&lt;code>ddr_reg&lt;/code>)&lt;/strong>&lt;br>
Capture &lt;code>D&lt;/code> on posedge into &lt;code>Q_pos&lt;/code> and on negedge into &lt;code>Q_neg&lt;/code>. Active‑low &lt;code>rst_n&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 3 — Mealy Sequence Detector “11010” (&lt;code>seq_11010_mealy&lt;/code>)&lt;/strong>&lt;br>
Detect the overlapping pattern and assert &lt;code>Z&lt;/code> on the final bit. Use a minimal FSM.&lt;/p>
&lt;p>&lt;strong>Problem 4 — Mod‑6 Up/Down Counter with Enable (&lt;code>mod6_counter&lt;/code>)&lt;/strong>&lt;br>
3‑bit counter over 0..5. &lt;code>En&lt;/code> gates counting; &lt;code>Dir=1&lt;/code> up, &lt;code>0&lt;/code> down. Synchronous reset to 0.&lt;/p>
&lt;p>&lt;strong>Problem 5 — 4×4 Serial Multiplier Controller (&lt;code>mul4_ctrl&lt;/code>)&lt;/strong>&lt;br>
Shift‑add controller with signals &lt;code>LdA,LdB,ClrP,Add,Shift,Done&lt;/code>. Start with &lt;code>start=1&lt;/code>. Iterate 4 times.&lt;/p>
&lt;p>&lt;strong>Problem 6 — 2‑Stage Pipeline &lt;code>(A+B)*C&lt;/code> with Valid/Ready (&lt;code>pipe_add_mul&lt;/code>)&lt;/strong>&lt;br>
Implement a two‑stage pipeline (add then multiply) with back‑pressure (&lt;code>in_valid/in_ready&lt;/code>, &lt;code>out_valid/out_ready&lt;/code>).&lt;/p>
&lt;p>&lt;strong>Problem 7 — CDC Bridge 1 MHz → 100 MHz (&lt;code>cdc_bridge&lt;/code>)&lt;/strong>&lt;br>
Use a &lt;code>req/ack&lt;/code> handshake and 2FF synchronizers both directions to transfer an 8‑bit word reliably.&lt;/p>
&lt;p>&lt;strong>Problem 8 — Moore FSM with Registered Output (&lt;code>moore_safe&lt;/code>)&lt;/strong>&lt;br>
Provide both combinational output &lt;code>Zc&lt;/code> and registered &lt;code>Zr&lt;/code> (hazard‑free).&lt;/p>
&lt;p>&lt;strong>Problem 9 — Sequential 4‑bit ALU (&lt;code>seq_alu4&lt;/code>)&lt;/strong>&lt;br>
Opcode: 00=ADD, 01=AND, 10=XOR, 11=SHL. Registered outputs &lt;code>Y&lt;/code> and &lt;code>Cout&lt;/code> with synchronous reset.&lt;/p>
&lt;p>&lt;strong>Problem 10 — Traffic Lights with Pedestrian Preempt (&lt;code>traffic_ped&lt;/code>)&lt;/strong>&lt;br>
Main: G×3, Y×1; Side: G×2, Y×1. Insert &lt;code>WALK&lt;/code>×4 at a safe point when &lt;code>ped_req=1&lt;/code>; resume correctly.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Deliverables:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>PDF with answers to Section A and brief design notes for Section B.&lt;/li>
&lt;li>Verilog sources for all 10 designs.&lt;/li>
&lt;li>Simulation logs/screenshots demonstrating passing testbenches.&lt;/li>
&lt;/ul></description></item><item><title>Take-Home Midterm Exam (Makeup): Sequential Circuits and Verilog</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_02_game_mp/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate><guid>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/miterm_02_game_mp/</guid><description>&lt;p>&lt;strong>Scope:&lt;/strong> Sequential logic, finite state machines, registers, counters, with Verilog modeling&lt;br>
&lt;strong>Duration:&lt;/strong> 48 hours&lt;br>
&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Attempt &lt;strong>all&lt;/strong> questions. Show reasoning, derivations, and clearly state assumptions.&lt;/li>
&lt;li>Provide &lt;strong>commented, synthesizable Verilog&lt;/strong> and a &lt;strong>self‑checking testbench&lt;/strong> where requested.&lt;/li>
&lt;li>Include brief timing/area reasoning (big‑O style or gate/count estimates).&lt;/li>
&lt;li>No collaboration. Cite any external references you consulted.&lt;/li>
&lt;li>Tutorial of Online tools for Verilog simulation can be found
.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-a--multiple-choice-10--3-pts--30-pts">Part A — Multiple Choice (10 × 3 pts = 30 pts)&lt;/h2>
&lt;p>Select the &lt;strong>best&lt;/strong> answer.&lt;/p>
&lt;p>&lt;strong>Q1.&lt;/strong> The primary reason metastability cannot be completely eliminated in synchronous systems is:&lt;/p>
&lt;ul>
&lt;li>A. Setup and hold times are always zero in practice&lt;/li>
&lt;li>B. Flip-flops rely on analog behavior near threshold regions&lt;/li>
&lt;li>C. Clocks in synchronous systems naturally drift&lt;/li>
&lt;li>D. Combinational gates inherently produce glitches&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q2.&lt;/strong> A level-sensitive latch used inside a two-phase latch pipeline must satisfy which condition to avoid races?&lt;/p>
&lt;ul>
&lt;li>A. Both latches must be transparent at the same time&lt;/li>
&lt;li>B. The two clocks must overlap for reliable data transfer&lt;/li>
&lt;li>C. The two clocks must be non-overlapping&lt;/li>
&lt;li>D. Both latches must be opaque for half the cycle&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q3.&lt;/strong> A master–slave flip-flop is functionally equivalent to:&lt;/p>
&lt;ul>
&lt;li>A. Two positive-edge-triggered flip-flops in series&lt;/li>
&lt;li>B. A positive-level latch feeding a negative-level latch&lt;/li>
&lt;li>C. A single negative-level latch&lt;/li>
&lt;li>D. A pair of asynchronous SR latches&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q4.&lt;/strong> The &lt;em>maximum&lt;/em> safe operating frequency of a synchronous sequential circuit is limited by:&lt;/p>
&lt;ul>
&lt;li>A. Clock skew plus the hold time requirement&lt;/li>
&lt;li>B. The minimum propagation delay of the flip-flop&lt;/li>
&lt;li>C. The longest register-to-register combinational path plus setup time&lt;/li>
&lt;li>D. The number of flip-flops in the design&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q5.&lt;/strong> A state machine experiences a transient illegal state during power-up but self-recovers within two cycles. This is most likely due to:&lt;/p>
&lt;ul>
&lt;li>A. Bad next-state logic&lt;/li>
&lt;li>B. Incomplete state encoding causing metastability&lt;/li>
&lt;li>C. Lack of synchronous reset initialization&lt;/li>
&lt;li>D. Excessive gate fan-out in the critical path&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q6.&lt;/strong> A Mealy FSM can produce output glitches primarily because:&lt;/p>
&lt;ul>
&lt;li>A. Its outputs change only on clock edges&lt;/li>
&lt;li>B. It depends directly on asynchronous inputs&lt;/li>
&lt;li>C. Its outputs are combinational functions of both state and inputs&lt;/li>
&lt;li>D. It always requires one extra pipeline stage&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q7.&lt;/strong> Gray-coded counters are often used in multi-clock systems because:&lt;/p>
&lt;ul>
&lt;li>A. They require fewer flip-flops than binary counters&lt;/li>
&lt;li>B. Only one bit changes per transition, minimizing sampling hazards&lt;/li>
&lt;li>C. They operate at higher maximum clock frequencies&lt;/li>
&lt;li>D. They automatically synchronize across domains&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q8.&lt;/strong> In a synchronizer chain for CDC (clock-domain crossing), increasing the number of flip-flops:&lt;/p>
&lt;ul>
&lt;li>A. Eliminates metastability completely&lt;/li>
&lt;li>B. Reduces metastability probability exponentially&lt;/li>
&lt;li>C. Increases metastability probability linearly&lt;/li>
&lt;li>D. Has no effect on metastability at all&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q9.&lt;/strong> Which Verilog description is most likely to unintentionally infer a latch?&lt;/p>
&lt;ul>
&lt;li>A. &lt;code>always @(posedge clk)&lt;/code> with full assignment&lt;/li>
&lt;li>B. &lt;code>always @(*)&lt;/code> missing an &lt;code>else&lt;/code> assignment&lt;/li>
&lt;li>C. A continuous assignment with XOR logic&lt;/li>
&lt;li>D. A blocking assignment inside a clocked block&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q10.&lt;/strong> A multi-port register file supporting simultaneous read and write must ensure:&lt;/p>
&lt;ul>
&lt;li>A. Writes occur asynchronously to avoid data hazards&lt;/li>
&lt;li>B. Read ports are implemented with edge-triggered flip-flops&lt;/li>
&lt;li>C. Write operations are synchronized and typically prioritized over reads&lt;/li>
&lt;li>D. Read-after-write data hazards are resolved with bypass logic or forwarding&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-b--design--analysis-10--7--70-pts">Part B — Design &amp;amp; Analysis (10 × 7 = 70 pts)&lt;/h2>
&lt;p>For each problem, complete the Verilog template in the
and verify using the provided self‑checking testbench.
Name your top‑level modules exactly as specified.&lt;/p>
&lt;p>&lt;strong>Files provided (in the questions zip):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Templates: &lt;code>*.v&lt;/code> (one per problem)&lt;/li>
&lt;li>Testbenches: &lt;code>tb_*.v&lt;/code> (one per problem)&lt;/li>
&lt;li>Timescale: &lt;code>1ns/1ps&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Problems:&lt;/strong>&lt;/p>
&lt;p>&lt;strong>Problem 1 — Synchronizer + Edge Detect (&lt;code>sync_edge&lt;/code>)&lt;/strong>&lt;br>
Synchronize asynchronous &lt;code>btn_async&lt;/code> into &lt;code>clk&lt;/code> with a two‑FF synchronizer; output &lt;code>btn_sync&lt;/code> level and one‑cycle &lt;code>btn_pulse&lt;/code> on rising edges. Active‑low &lt;code>rst_n&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 2 — Dual‑Edge Capture (&lt;code>ddr_reg&lt;/code>)&lt;/strong>&lt;br>
Capture &lt;code>D&lt;/code> on posedge into &lt;code>Q_pos&lt;/code> and on negedge into &lt;code>Q_neg&lt;/code>. Active‑low &lt;code>rst_n&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Problem 3 — Mealy Sequence Detector “11010” (&lt;code>seq_11010_mealy&lt;/code>)&lt;/strong>&lt;br>
Detect the overlapping pattern and assert &lt;code>Z&lt;/code> on the final bit. Use a minimal FSM.&lt;/p>
&lt;p>&lt;strong>Problem 4 — Mod‑6 Up/Down Counter with Enable (&lt;code>mod6_counter&lt;/code>)&lt;/strong>&lt;br>
3‑bit counter over 0..5. &lt;code>En&lt;/code> gates counting; &lt;code>Dir=1&lt;/code> up, &lt;code>0&lt;/code> down. Synchronous reset to 0.&lt;/p>
&lt;p>&lt;strong>Problem 5 — 4×4 Serial Multiplier Controller (&lt;code>mul4_ctrl&lt;/code>)&lt;/strong>&lt;br>
Shift‑add controller with signals &lt;code>LdA,LdB,ClrP,Add,Shift,Done&lt;/code>. Start with &lt;code>start=1&lt;/code>. Iterate 4 times.&lt;/p>
&lt;p>&lt;strong>Problem 6 — 2‑Stage Pipeline &lt;code>(A+B)*C&lt;/code> with Valid/Ready (&lt;code>pipe_add_mul&lt;/code>)&lt;/strong>&lt;br>
Implement a two‑stage pipeline (add then multiply) with back‑pressure (&lt;code>in_valid/in_ready&lt;/code>, &lt;code>out_valid/out_ready&lt;/code>).&lt;/p>
&lt;p>&lt;strong>Problem 7 — CDC Bridge 1 MHz → 100 MHz (&lt;code>cdc_bridge&lt;/code>)&lt;/strong>&lt;br>
Use a &lt;code>req/ack&lt;/code> handshake and 2FF synchronizers both directions to transfer an 8‑bit word reliably.&lt;/p>
&lt;p>&lt;strong>Problem 8 — Moore FSM with Registered Output (&lt;code>moore_safe&lt;/code>)&lt;/strong>&lt;br>
Provide both combinational output &lt;code>Zc&lt;/code> and registered &lt;code>Zr&lt;/code> (hazard‑free).&lt;/p>
&lt;p>&lt;strong>Problem 9 — Sequential 4‑bit ALU (&lt;code>seq_alu4&lt;/code>)&lt;/strong>&lt;br>
Opcode: 00=ADD, 01=AND, 10=XOR, 11=SHL. Registered outputs &lt;code>Y&lt;/code> and &lt;code>Cout&lt;/code> with synchronous reset.&lt;/p>
&lt;p>&lt;strong>Problem 10 — Traffic Lights with Pedestrian Preempt (&lt;code>traffic_ped&lt;/code>)&lt;/strong>&lt;br>
Main: G×3, Y×1; Side: G×2, Y×1. Insert &lt;code>WALK&lt;/code>×4 at a safe point when &lt;code>ped_req=1&lt;/code>; resume correctly.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Deliverables:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>PDF with answers to Section A and brief design notes for Section B.&lt;/li>
&lt;li>Verilog sources for all 10 designs.&lt;/li>
&lt;li>Simulation logs/screenshots demonstrating passing testbenches.&lt;/li>
&lt;/ul></description></item><item><title>Practice Final Exam</title><link>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/final_practice/</link><pubDate>Tue, 25 Nov 2025 00:00:00 +0000</pubDate><guid>https://gustybear.github.io/docs/exams/course_ece260_2025_fall/final_practice/</guid><description>&lt;p>&lt;strong>Scope:&lt;/strong> Combinational Logic, Sequential logic, RTL Design&lt;br>
&lt;strong>Duration:&lt;/strong> 2 hours&lt;br>
&lt;strong>Instructions&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Attempt &lt;strong>all&lt;/strong> questions. Show reasoning, derivations, and clearly state assumptions.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-a--multiple-choice-5--4-pts--20-pts">Part A — Multiple Choice (5 × 4 pts = 20 pts)&lt;/h2>
&lt;p>Select the &lt;strong>best&lt;/strong> answer.&lt;/p>
&lt;p>&lt;strong>Q1.&lt;/strong> In a pipelined RTL datapath, a structural hazard occurs when:&lt;/p>
&lt;ul>
&lt;li>A. Multiple pipeline stages need the same hardware resource&lt;/li>
&lt;li>B. Instructions depend on the results of prior instructions&lt;/li>
&lt;li>C. The clock frequency is too low&lt;/li>
&lt;li>D. Control signals are not registered&lt;br>
&lt;strong>Answer:&lt;/strong> A&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q2.&lt;/strong> In a synchronous design, increasing the number of pipeline registers generally:&lt;/p>
&lt;ul>
&lt;li>A. Increases the critical-path delay&lt;/li>
&lt;li>B. Decreases the maximum clock frequency&lt;/li>
&lt;li>C. Reduces combinational delay per stage&lt;/li>
&lt;li>D. Eliminates data hazards entirely&lt;br>
&lt;strong>Answer:&lt;/strong> C&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q3.&lt;/strong> A register file with two read ports and one write port requires:&lt;/p>
&lt;ul>
&lt;li>A. Two physical register copies&lt;/li>
&lt;li>B. One array with dual-read-access mechanisms&lt;/li>
&lt;li>C. Flip-flops instead of memory cells&lt;/li>
&lt;li>D. A clock enable on its read ports&lt;br>
&lt;strong>Answer:&lt;/strong> B&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q4.&lt;/strong> In RTL modeling, the primary purpose of the register-transfer level is to:&lt;/p>
&lt;ul>
&lt;li>A. Automatically generate physical layout&lt;/li>
&lt;li>B. Describe asynchronous data transfers&lt;/li>
&lt;li>C. Capture clocked state transitions and datapath flow&lt;/li>
&lt;li>D. Specify combinational logic through truth tables&lt;br>
&lt;strong>Answer:&lt;/strong> C&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Q5.&lt;/strong> A Mealy-type controller is preferred over a Moore-type controller when:&lt;/p>
&lt;ul>
&lt;li>A. Output latency must be minimized&lt;/li>
&lt;li>B. Excessive noise immunity is required&lt;/li>
&lt;li>C. Outputs must be stable throughout the clock cycle&lt;/li>
&lt;li>D. A synchronous datapath is not available&lt;br>
&lt;strong>Answer:&lt;/strong> A&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="part-b--design--analysis-8--10-pts--80-pts">Part B — Design &amp;amp; Analysis (8 × 10 pts = 80 pts)&lt;/h2>
&lt;h3 id="problem-1--4-cycle-micro-operation-sequencing">&lt;strong>Problem 1&lt;/strong> — 4-Cycle Micro-operation Sequencing&lt;/h3>
&lt;p>Design a 4-cycle Moore FSM and datapath for:&lt;/p>
&lt;ol>
&lt;li>&lt;code>R1 ← R0 + R2&lt;/code>&lt;/li>
&lt;li>&lt;code>R3 ← R1&lt;/code>&lt;/li>
&lt;li>&lt;code>R4 ← R3 - 1&lt;/code>&lt;/li>
&lt;li>&lt;code>R5 ← R4&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>Show datapath (ALU, MUXes, reg enables) and FSM transitions.&lt;/p>
&lt;h3 id="problem-2--3-input-conditional-datapath">&lt;strong>Problem 2&lt;/strong> — 3-Input Conditional Datapath&lt;/h3>
&lt;p>Implement:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">if (A &amp;gt; B)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> X ← A - C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">else
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> X ← B + C
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Draw datapath (CMP, ALU, MUX) and two-cycle control sequence.&lt;/p>
&lt;h3 id="problem-3--4-bit-barrel-shifter">&lt;strong>Problem 3&lt;/strong> — 4-bit Barrel Shifter&lt;/h3>
&lt;p>Draw a 4-bit rotate-left barrel shifter (k ∈ {0,1,2,3}) with MUX stages.&lt;/p>
&lt;h3 id="problem-4--5-state-memory-controller">&lt;strong>Problem 4&lt;/strong> — 5-State Memory Controller&lt;/h3>
&lt;p>States: &lt;code>IDLE → REQ → WAIT → LATCH → DONE&lt;/code>&lt;br>
WAIT repeats until &lt;code>mem_ready=1&lt;/code>.&lt;br>
Draw state diagram + control signals.&lt;/p>
&lt;h3 id="problem-5--16-bit-accumulator">&lt;strong>Problem 5&lt;/strong> — 16-bit Accumulator&lt;/h3>
&lt;p>Accumulator operations:&lt;/p>
&lt;ul>
&lt;li>&lt;code>ACC ← ACC + IN&lt;/code>&lt;/li>
&lt;li>&lt;code>ACC ← IN&lt;/code>&lt;/li>
&lt;li>&lt;code>ACC ← 0&lt;/code>&lt;br>
Show ALU, zero-path, MUXing, ACC register control.&lt;/li>
&lt;/ul>
&lt;h3 id="problem-6--pipeline-raw-hazard-detection">&lt;strong>Problem 6&lt;/strong> — Pipeline RAW Hazard Detection&lt;/h3>
&lt;p>For a 2-stage pipeline (F → X), draw RAW hazard detection hardware and stall logic.&lt;/p>
&lt;h3 id="problem-7--signedunsigned-compare-block">&lt;strong>Problem 7&lt;/strong> — Signed/Unsigned Compare Block&lt;/h3>
&lt;p>Mode bit: &lt;code>0 = signed&lt;/code>, &lt;code>1 = unsigned&lt;/code>.&lt;br>
Draw comparator datapath + control.&lt;/p>
&lt;h3 id="problem-8--iterative-multiply-datapath">&lt;strong>Problem 8&lt;/strong> — Iterative Multiply Datapath&lt;/h3>
&lt;p>Given:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">P ← P + A (if B[0]=1)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A ← A &amp;lt;&amp;lt; 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">B ← B &amp;gt;&amp;gt; 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Draw shift registers, adder, and control FSM.&lt;br>
Show cycle-by-cycle micro-ops.&lt;/p></description></item></channel></rss>