Week 2 Mr. Mahazani Dr. Sofian Week 3 Dr. Sofian Dr. Sofian Assignment 2 Week 4 Dr. Sofian Dr. Sofian Week 5 Dr. Sofian Dr. Sofian Assignment 3 Week 6 Dr. Sofian Dr. Sofian Semester Break Week 7 Dr. Sofian Dr. Sofian Mid-Term Test Week 8 Mr. Mahazani Mr. Mahazani Week 9 Mr. Mahazani Mr. Mahazani Week 10 Mr. Mahazani Mr. Mahazani Week 11 Mr. Mahazani Mr. Mahazani Week 12 Mr. Mahazani Mr. Mahazani Week 13 Mr. Mahazani Mr. Mahazani Week 14 Mr. Mahazani Mr. Mahazani Revision Week Final Exam Saturday (10 Jan 2015) Venue - not yet decided 11:30 1:30 PM
4 Questions Answers all Reference books Main texbook: Fundamentals of Digital Logic with Verilog Design, 3 rd
Edition, Brown and Vranesic, McGraw Hill, 2013. Other textbooks: Digital design: with an introduction to the Verilog HDL, 5 th Edition, Mano and Cilleti, Pearson, 2012. Digital design and computer architecture, 2 nd Edition, David Harris and Sarah Harris, Morgan Kaufman, 2013 Time Table (Group 1) Mon 2:00 4:00 PM DK8 Tue 12:00 1:00 PM DK8
CAD System Software Quartus II Web Edition ModelSim-Altera Short revision Truth table Logic gates Boolean algebra Synthesis (SOP & POS) Karnaugh map Number representation Adder Multiplier Chapter 4
Combinational-Circuit Building Blocks
Combinational Circuits Combinational circuits are stateless Output is dependent only on its inputs Common combinational blocks Multiplexer Demultiplexer Decoder Encoder Adder Multiplier Multiplexer Combinational circuit that selects binary information from one of many input lines and directs it to one output line Figure 4.1. A 2-to-1 multiplexer. (a) Graphical symbol f s w 0 w 1 0 1 (b) Truth table 0 1 f f s w 0 w 1 (c) Sum-of-products circuit s w 0 w 1 (d) Circuit with transmission gates w 0 w 1 f s Figure 4.2. A 4-to-1 multiplexer. f s 1 w 0 w 1 00 01 (b) Truth table w 0 w 1 s 0 w 2 w 3 10 11 0 0 1 1 1 0 1 f s 1 0 s 0 w 2 w 3 f (c) Circuit s 1 w 0 w 1 s 0 w 2 w 3 (a) Graphic symbol Figure 4.3. Using 2-to-1 multiplexers to build a 4-to-1 multiplexer. 0 w 0 w 1 0 1 w 2 w 3 0 1 f 0 1 s 1 s Larger multiplexer can also be constructed from smaller multiplexers Figure 4.4. A 16-to-1 multiplexer using 4-to-1 multiplexer. w 8 w 11 s 1 w 0 s 0 w 3 w 4 w 7 w 12 w 15 s 3 s 2 f Figure 4.5. A practical application of multiplexers. x 1 0 1 x 2 0 1 s y 1 y 2 x 1 x 2 y 1 y 2 (a) A 2x2 crossbar switch (b) Implementation using multiplexers s Figure 4.6. Synthesis of a logic function using multiplexers. (a) Implementation using a 4-to-1 multiplexer f w 1 0 1 0 1 w 2 1 0 0 0 1 1 1 0 1 f w 1 0 w 2 1 0 (b) Modified truth table 0 1 0 0 1 1 1 0 1 f w 1 0 w 2 1 0 f w 2 w 1 0 1 f w 1 w 2 w 2 (c) Circuit 1 2 Figure 4.7. Implementation of the three-input majority function using a 4-to-1 multiplexer. w 3 w 3 f w 1 0 w 2 1 (a) Modified truth table (b) Circuit 0 0 0 1 1 1 0 1 f w 1 0 w 2 1 0 0 0 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 1 1 1 w 1 w 2 w 3 f 0 0 0 0 1 1 1 1 w 3 Figure 4.8. Three-input XOR implemented with 2-to-1 multiplexers. (a) Truth table 0 0 0 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 w 1 w 2 w 3 f 0 0 0 0 1 1 1 1 w 2 w 3
w 2 w 3
f w 3 w 1 (b) Circuit w 2 Figure 4.9. Three-input XOR function implemented with a 4-to-1 multiplexer. f w 1 w 2 (a) Truth table (b) Circuit 0 0 0 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 w 1 w 2 w 3 f 0 0 0 0 1 1 1 1 w 3 w 3 w 3 w 3 w 3 Standard MSI Multiplexers Standard MSI Multiplexers 74151A (8-to-1) 74150 (16-to-1) 74153 (2-bit 4-to-1) 74157 (4-bit 2-to-1) Standard MSI Multiplexers 74151A 74151A 8-to-1 multiplexer Output equation
Strobe (~G) acts as enable signal 2 nd output W is just complement of Y Standard MSI Multiplexers 74150 74150 16-to-1 multiplexer Output equation
One strobe signal (~G) Only one output (W)
Standard MSI Multiplexers 74153 74153 2-bit 4-to-1 multiplexer (contain two 4-to-1 multiplexers) Have 1 enable signal. Module behavior: Standard MSI Multiplexers 74153 Alternative Symbol Standard MSI Multiplexers 74157 74157 4-bit 2-to-1 multiplexer Have only 1 control signal (S) Have 1 enable signal (~G) Multiple 74157 can be used to create other multiplexer configurations of different: Path widths, and Number of inputs.
Standard MSI Multiplexers 74157 Extending path widths Two 74157s are used to create 8-bit two-input multiplexer. Both modules are controlled with the same select signal (S). Standard MSI Multiplexers 74157 Extending number of inputs. Two 74157s are used to create 4-bit four-input multiplexer. S1 selects only 1 module (and turns off the other) S0 selects of one of the two 4-bit input of the enabled module. 28 Decoders n-to-2 n decoder is a multiple-output combinational logic, with: n input lines, and 2 n output lines.
Figure 4.13. A 2-to-4 decoder. Figure 4.14. Binary decoder. Figure 4.15. A 3-to-8 decoder using two 2-to-4 decoders. w 2 w 0 y 0 y 1 y 2 y 3 w 0 En y 0 w 1 y 1 y 2 y 3 w 0 En y 0 w 1 y 1 y 2 y 3 y 4 y 5 y 6 y 7 w 1 En Figure 4.16. A 4-to-16 decoder built using a decoder tree. w 0 En y 0 w 1 y 1 y 2 y 3 y 8 y 9 y 10 y 11 w 2 w 0 y 0 y 1 y 2 y 3 w 0 En y 0 w 1 y 1 y 2 y 3 w 0 En y 0 w 1 y 1 y 2 y 3 y 4 y 5 y 6 y 7 w 1 w 0 En y 0 w 1 y 1 y 2 y 3 y 12 y 13 y 14 y 15 w 0 En y 0 w 1 y 1 y 2 y 3 w 3 En Figure 4.17. A 4-to-1 multiplexer built using a decoder. w 1 w 0 w 0 En y 0 w 1 y 1 y 2 y 3 w 2 w 3 f s 0 s 1 1 Demultiplexers Connects a single input line to one of n output lines (2 s >=n). (s is number of bits in the selection code). Functional Diagram Selection code is used to generate a minterm of s variables. That minterm then connects the input data to the proper output terminal. n-to-2 n decoder can be used as a 1-to-n demultiplexer Demultiplexers 1-to-4 data demultiplexer with an enable signal (E) (that controls the operation of the circuit) is shown on the left. 1-to-4 Demultiplexer (with Enable) The operation of the device can be described as: Y i = ( m i D ) E (D is the input signal to be distributed to the n output lines) Encoders An encoder performs the opposite function of a decoder Encoders is a combinational logic that assigns a unique output code for each input signal (opposite of a decoder). If an encoder has n inputs, the number of outputs s must satisfy the expressions: 2 s >= n Figure 4.18. A 2 n -to-n binary encoder. 2 n inputs w 0 w 2 n 1 y 0 y n 1 n outputs Figure 4.19. A 4-to-2 binary encoder. 0 0 1 1 1 0 1 w 3 y 1 0 y 0 (b) Circuit w 1 w 0 0 0 1 0 w 2 0 1 0 0 w 1 1 0 0 0 w 0 0 0 0 1 y 0 w 2 w 3 y 1 (a) Truth table Figure 4.20. Truth table for a 4-to-2 priority encoder. d 0 0 1 0 1 0 w 0 y 1 d y 0 1 1 0 1 1 1 1 z 1 x x 0 x w 1 0 1 x 0 x w 2 0 0 1 0 x w 3 0 0 0 0 1 Figure 4.21. A hex-to-7-segment display code converter. Figure 4.22. A four-bit comparator circuit. Example 1 Show how the function f(w 1 ,w 2 ,w 3 )=m(0,2,3,4,5,7) can be implemented using a 3-to-8 binary decoder and an OR gate? Example 2 f = w 1 w 3 +w 2 w 3 +w 1 w 2 Consider the function Use the truth table to derive a circuit for f uses a 2-to-1 multiplexer? . Example 3 Derive a circuit that implement an 8-to-3 binary encoder? Verilog for Combinational Circuits Conditional Operator If-Else Statement Case Statement For Loop Verilog Operators Generate Construct Tasks and Functions Conditional Operator Often necessary to choose between several signals Example multiplexer circuit conditional_exp ? true_exp : false_exp; A = (B<C) ? (D+5):(D+2); Figure 4.23. A 2-to-1 multiplexer specified using the conditional operator. module mux2to1 (w0, w1, s, f); input w0, w1, s; output f;
assign f = s ? w1 : w0;
endmodule Example 1 Figure 4.24. An alternative specification of a 2-to-1 multiplexer using the conditional operator. module mux2to1 (w0, w1, s, f); input w0, w1, s; output reg f;
always @(w0, w1, s) f = s ? w1 : w0;
endmodule Example 2 Figure 4.25. A 4-to-1 multiplexer specified using the conditional operator. module mux4to1 (w0, w1, w2, w3, S, f); input w0, w1, w2, w3; input [1:0] S; output f;
endmodule Example 3 If-Else Statement If the expression evaluated true, first statement is executed, or else second statement is executed if (conditional_exp) first statement; else second statement; Figure 4.26. Code for a 2-to-1 multiplexer using the if-else statement. module mux2to1 (w0, w1, s, f); input w0, w1, s; output reg f;
always @(w0, w1, s) if (s==0) f = w0; else f = w1;
endmodule Example 1 Figure 4.27. Code for a 4-to-1 multiplexer using the if-else statement. module mux4to1 (w0, w1, w2, w3, S, f); input w0, w1, w2, w3; input [1:0] S; output reg f;
always @(*) if (S == 2'b00) f = w0; else if (S == 2'b01) f = w1; else if (S == 2'b10) f = w2; else if (S == 2'b11) f = w3;
endmodule Example 2 Figure 4.28. Alternative specification of a 4-to-1 multiplexer.
always @(W, S) if (S == 0) f = W[0]; else if (S == 1) f = W[1]; else if (S == 2) f = W[2]; else if (S == 3) f = W[3];
endmodule Example 3 Figure 4.4. A 16-to-1 multiplexer using 4-to-1 multiplexer. w 8 w 11 s 1 w 0 s 0 w 3 w 4 w 7 w 12 w 15 s 3 s 2 f Figure 4.29. Hierarchical code for a 16-to-1 multiplexer. module mux16to1 (W, S, f); input [0:15] W; input [3:0] S; output f; wire [0:3] M;
endmodule Example 4 Case Statement If many possible alternatives, use case statement case (expression) alternative1:statement; . . alternativej:statement; [default:statement;] endcase Figure 4.30. A 4-to-1 multiplexer defined using the case statement.
always @(W, S) case (S) 0: f = W[0]; 1: f = W[1]; 2: f = W[2]; 3: f = W[3]; endcase
endmodule Example 1 Example 2 Figure 4.31. Verilog code for a 2-to-4 binary decoder. module dec2to4 (W, En, Y); input [1:0] W; input En; output reg [0:3] Y;
always @(W, En) case ({En, W}) 3'b100: Y = 4'b1000; 3'b101: Y = 4'b0100; 3'b110: Y = 4'b0010; 3'b111: Y = 4'b0001; default: Y = 4'b0000; endcase
endmodule Example 2 Figure 4.32. Alternative code for a 2-to4 binary decoder. module dec2to4 (W, En, Y); input [1:0] W; input En; output reg [0:3] Y;
always @(W, En) begin if (En == 0) Y = 4'b0000; else case (W) 0: Y = 4'b1000; 1: Y = 4'b0100; 2: Y = 4'b0010; 3: Y = 4'b0001; endcase end
endmodule Example 3 Figure 4.16. A 4-to-16 decoder built using a decoder tree. w 0 En y 0 w 1 y 1 y 2 y 3 y 8 y 9 y 10 y 11 w 2 w 0 y 0 y 1 y 2 y 3 w 0 En y 0 w 1 y 1 y 2 y 3 w 0 En y 0 w 1 y 1 y 2 y 3 y 4 y 5 y 6 y 7 w 1 w 0 En y 0 w 1 y 1 y 2 y 3 y 12 y 13 y 14 y 15 w 0 En y 0 w 1 y 1 y 2 y 3 w 3 En Figure 4.33. Verilog code for a 4-to-16 decoder. module dec4to16 (W, En, Y); input [3:0] W; input En; output [0:15] Y; wire [0:3] M;
endmodule Example 4 Figure 4.34. Code for a hex-to-7-segment decoder. Table 4.1. The functionality of the 74381 ALU. Example 6 Figure 4.35. Code that represents the functionality of the 74381 ALU chip. // 74381 ALU module alu(s, A, B, F); input [2:0] S; input [3:0] A, B; output reg [3:0] F;
always @(S, A, B) case (S) 0: F = 4'b0000; 1: F = B - A; 2: F = A - B; 3: F = A + B; 4: F = A ^ B; 5: F = A | B; 6: F = A & B; 7: F = 4'b1111; endcase
endmodule Example 6 Figure 4.20. Truth table for a 4-to-2 priority encoder. d 0 0 1 0 1 0 w 0 y 1 d y 0 1 1 0 1 1 1 1 z 1 x x 0 x w 1 0 1 x 0 x w 2 0 0 1 0 x w 3 0 0 0 0 1 Example 7 - casex Figure 4.36. Verilog code for a priority encoder. module priority (W, Y, z); input [3:0] W; output reg [1:0] Y; output reg z;
always @(W) begin z = 1; casex (W) 4'b1xxx: Y = 3; 4'b01xx: Y = 2; 4'b001x: Y = 1; 4'b0001: Y = 0; default: begin z = 0; Y = 2'bx; end endcase end
endmodule Example 7 - casex For Loop If circuit exhibits a certain regularity use for loop for (initial_index;terminal_index;increment) statement; Example 1 Figure 4.37. A 2-to-4 binary decoder specified using the for loop. module dec2to4 (W, En, Y); input [1:0] W; input En; output reg [0:3] Y; integer k;
always @(W, En) for (k = 0; k <= 3; k = k+1) if ((W == k) && (En == 1)) Y[k] = 1; else Y[k] = 0;
endmodule Example 1 Figure 4.20. Truth table for a 4-to-2 priority encoder. d 0 0 1 0 1 0 w 0 y 1 d y 0 1 1 0 1 1 1 1 z 1 x x 0 x w 1 0 1 x 0 x w 2 0 0 1 0 x w 3 0 0 0 0 1 Example 2 Figure 4.38. A priority encoder specified using the for loop.
always @(W) begin Y = 2'bx; z = 0; for (k = 0; k < 4; k = k+1) if (W[k]) begin Y = k; z = 1; end end
endmodule Example 2 Verilog Operators Useful for synthesizing circuits Groups of operators Figure 4.39. Truth tables for bitwise operators. & 0 1 x | 0 1 x 0 0 0 0 0 0 1 x 1 0 1 x 1 1 1 1 x 0 x x x x 1 x ^ 0 1 x ~ ^
0 1 x 0 0 1 x 0 1 0 x 1 1 0 x 1 0 1 x x x x x x x x x Figure 4.22. A four-bit comparator circuit. Figure 4.40. Verilog code for a four-bit comparator. module compare (A, B, AeqB, AgtB, AltB); input [3:0] A, B; output reg AeqB, AgtB, AltB;
always @(A, B) begin AeqB = 0; AgtB = 0; AltB = 0; if(A == B) AeqB = 1; else if (A > B) AgtB = 1; else AltB = 1; end
endmodule Precedence of Verilog Operators The order is from top to bottom Top row highest precedence Bottom row lowest precedence Same row same precedence Use parentheses to change the precedence Parentheses remove misinterpretation, unambiguous code, easy to read Table 4.3. Precedence of Verilog operators. Generate Construct Generate loop capability to create multiple instances of subcircuit generate and endgenerate Variable defined using genvar keyword Must be positive integer values x 1 y 1 g 1 p 1 s 1 Stage 1 x 0 y 0 g 0 p 0 s 0 Stage 0 c 0 c 1 c 2 Figure 3.14. A ripple-carry adder based on Expression 3.3. Figure 4.41. Using the generate loop to define an n-bit ripple-carry adder. module addern (carryin, X, Y, S, carryout); parameter n=32; input carryin; input [n-1:0] X, Y; output [n-1:0] S; output carryout; wire [n:0] C;
genvar k; assign C[0] = carryin; assign carryout = C[n]; generate for (k = 0; k < n; k = k+1) begin: fulladd_stage wire z1, z2, z3; //wires within full-adder xor (S[k], X[k], Y[k], C[k]); and (z1, X[k], Y[k]); and (z2, X[k], C[k]); and (z3, Y[k], C[k]); or (C[k+1], z1, z2, z3); end endgenerate
endmodule Tasks and Functions High-level programming subroutines and functions To modularize large design and make the code easier to understand Task Declared by keyword task and endtask Task must be included in the module that calls it It may have input and output ports Task ports are used only to pass values between the module and the task Task may call another task and may invoke a function
Figure 4.42. Use of a task in Verilog code. Function Declared by keyword function and endfunction Must have at least one input It returns a single value that is placed where the function is invoked Function can invoke another function but it cannot call a task
Figure 4.43. The code from Figure 4.42 using a function.