🏠 Homework

2A

espresso script

.i 8
.o 4
.ilb a7 a6 a5 a4 a3 a2 a1 a0
.ob y2 y1 y0 z
.p 9
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 1 0 0 0 1 1
0 0 0 0 0 1 0 0 0 1 0 1
0 0 0 0 1 0 0 0 0 1 1 1
0 0 0 1 0 0 0 0 1 0 0 1
0 0 1 0 0 0 0 0 1 0 1 1
0 1 0 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 0 0 1 1 1 1
.e

Result

  y2 = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&a4&!a3&!a2&!a1&!a0);   y1 = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&a2&!a1&!a0);   y0 = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&!a2&a1&!a0);   z = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&!a2&a1&!a0) | (!a7&!a6&!a5&!a4&!a3&!a2&!a1&a0);

2B

s₂s₁s₀Output (y)
000d₀
001d₁
010d₂
011d₃
100d₄
101d₅
110d₆
111d₇
y = s₂’s₁’s₀’d₀ + s₂’s₁’s₀d₁ + s₂’s₁s₀’d₂ + s₂’s₁s₀d₃ + s₂s₁’s₀’d₄ + s₂s₁’s₀d₅ + s₂s₁s₀’d₆ + s₂s₁s₀d₇

2C

y2y1y0a’b’c’d’e’f’g’
0001111111
0011111110
0101111101
0111111011
1001110111
1011101111
1101011111
1110111111

✏️ Execises

2.2 A

B

C

switch2display

`timescale 1 ns / 1 ps
 
module switch2display_tb ();
 
    
    // Signal declarations
    logic [7:0] sw;
    logic a7, a6, a5, a4, a3, a2, a1, a0;
    logic a,b,c,d,e,f,g;
    
    // Generate test vector.
    initial begin
        #0   sw = 8'b00000000;
        #100 sw = 8'b00000001;
        #100 sw = 8'b00000010;
        #100 sw = 8'b00000100;
        #100 sw = 8'b00001000;
        #100 sw = 8'b00010000;
        #100 sw = 8'b00100000;
        #100 sw = 8'b01000000;
        #100 sw = 8'b10000000;        
    end
    
    // Unpack test vector to separate signals.
    assign {a7, a6, a5, a4, a3, a2, a1, a0} =sw;
    
    // Connect test signals to encoder8 module ports.
    switch2display dut(.sw7(a7), .sw6(a6), .sw5(a5), .sw4(a4), .sw3(a3), .sw2(a2), .sw1(a1), .sw0(a0),
                        .a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g)
                        );
 
 
 
endmodule

testbench

`timescale 1 ns / 1 ps
 
module switch2display_tb ();
 
    
    // Signal declarations
    logic [7:0] sw;
    logic a7, a6, a5, a4, a3, a2, a1, a0;
    logic a,b,c,d,e,f,g;
    
    // Generate test vector.
    initial begin
        #0   sw = 8'b00000000;
        #100 sw = 8'b00000001;
        #100 sw = 8'b00000010;
        #100 sw = 8'b00000100;
        #100 sw = 8'b00001000;
        #100 sw = 8'b00010000;
        #100 sw = 8'b00100000;
        #100 sw = 8'b01000000;
        #100 sw = 8'b10000000;        
    end
    
    // Unpack test vector to separate signals.
    assign {a7, a6, a5, a4, a3, a2, a1, a0} =sw;
    
    // Connect test signals to encoder8 module ports.
    switch2display dut(.sw7(a7), .sw6(a6), .sw5(a5), .sw4(a4), .sw3(a3), .sw2(a2), .sw1(a1), .sw0(a0),
                        .a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g)
                        );
endmodule

mux8

module mux8 (input  logic d7, d6, d5, d4, d3, d2, d1, d0,
             input  logic s2, s1, s0,
             output logic y);
 
    // Complete module description here.
    assign y = !s2&!s1&!s0&d0 | !s2&!s1&s0&d1 | !s2&s1&!s0&d2 | !s2&s1&s0&d3 | s2&!s1&!s0&d4 | s2&!s1&s0&d5 | s2&s1&!s0&d6 | s2&s1&s0&d7;
endmodule

encoder

module encoder8 (input  logic a7, a6, a5, a4, a3, a2, a1, a0,
                 output logic y2, y1, y0,
                 output logic z);
 
    // Complete module description here.
 
    assign y2 = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&a4&!a3&!a2&!a1&!a0);
    assign y1 = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&a2&!a1&!a0);
    assign y0 = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&!a2&a1&!a0);
    assign z = (a7&!a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&a6&!a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&a5&!a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&a4&!a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&a3&!a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&a2&!a1&!a0) | (!a7&!a6&!a5&!a4&!a3&!a2&a1&!a0) | (!a7&!a6&!a5&!a4&!a3&!a2&!a1&a0);
endmodule

nand

 
module nand_gate (input logic a, b,
             output logic y 
             );
 
  assign y = !(a&b);
  
endmodule

📄Assignment