# Lab 4 - Exercise 2

## Question

1. We need to create chip design of the Hot Coffee/Hot Milk Dispenser machine using it's boolean expressions given below:
* Final Expressions after solving K-Maps implemented here using logic gates are:
  * `Coff_Out(CREQ, MREQ, M, T, C) = CREQ.M.T'.C` 
  * `Milk_Out(CREQ, MREQ, M, T, C) = MREQ.M.T'`
  * `Insuff_Qty(CREQ, MREQ, M, T, C) = MREQ.M' + CREQ.(M' + C')`

## Solution

Code to add to parts section of `diagram.json` for adding chip IN and chip OUT:
```json
{ "type": "board-tt-block-input", "id": "chip1", "top": 242.27, "left": 292.8, "attrs": { "verilogRole": "input" }},
{ "type": "board-tt-block-output", "id": "chip2", "top": 290.27, "left": 792, "attrs": { "verilogRole": "output" }},
```

Link to verilog code: [https://wokwi.com/api/projects/385541309817051137/verilog](https://wokwi.com/api/projects/385541309817051137/verilog)

```verilog
/* Automatically generated from https://wokwi.com/projects/385541309817051137 */

`default_nettype none

module tt_um_wokwi_385541309817051137(
  input  wire [7:0] ui_in,    // Dedicated inputs
  output wire [7:0] uo_out,    // Dedicated outputs
  input  wire [7:0] uio_in,    // IOs: Input path
  output wire [7:0] uio_out,    // IOs: Output path
  output wire [7:0] uio_oe,    // IOs: Enable path (active high: 0=input, 1=output)
  input ena,
  input clk,
  input rst_n
);
  wire net1 = ui_in[0];
  wire net2 = ui_in[1];
  wire net3 = ui_in[2];
  wire net4 = ui_in[3];
  wire net5 = ui_in[4];
  wire net6;
  wire net7;
  wire net8;
  wire net9;
  wire net10;
  wire net11;
  wire net12;
  wire net13;
  wire net14;
  wire net15;
  wire net16;
  wire net17;

  assign uo_out[0] = net6;
  assign uo_out[1] = net7;
  assign uo_out[2] = net8;
  assign uo_out[3] = 0;
  assign uo_out[4] = 0;
  assign uo_out[5] = 0;
  assign uo_out[6] = 0;
  assign uo_out[7] = 0;
  assign uio_out[0] = 0;
  assign uio_oe[0] = 0;
  assign uio_out[1] = 0;
  assign uio_oe[1] = 0;
  assign uio_out[2] = 0;
  assign uio_oe[2] = 0;
  assign uio_out[3] = 0;
  assign uio_oe[3] = 0;
  assign uio_out[4] = 0;
  assign uio_oe[4] = 0;
  assign uio_out[5] = 0;
  assign uio_oe[5] = 0;
  assign uio_out[6] = 0;
  assign uio_oe[6] = 0;
  assign uio_out[7] = 0;
  assign uio_oe[7] = 0;

  not_cell not2 (
    .in (net3),
    .out (net9)
  );
  not_cell not3 (
    .in (net4),
    .out (net10)
  );
  not_cell not4 (
    .in (net5),
    .out (net11)
  );
  and_cell and1 (
    .a (net1),
    .b (net3),
    .out (net12)
  );
  and_cell and2 (
    .a (net12),
    .b (net10),
    .out (net13)
  );
  and_cell and3 (
    .a (net13),
    .b (net5),
    .out (net6)
  );
  and_cell and4 (
    .a (net2),
    .b (net3),
    .out (net14)
  );
  and_cell and5 (
    .a (net14),
    .b (net10),
    .out (net7)
  );
  or_cell or1 (
    .a (net9),
    .b (net11),
    .out (net15)
  );
  and_cell and6 (
    .a (net1),
    .b (net15),
    .out (net16)
  );
  or_cell or2 (
    .a (net17),
    .b (net16),
    .out (net8)
  );
  and_cell and7 (
    .a (net2),
    .b (net9),
    .out (net17)
  );
endmodule
```
not2:IN
not2:OUT
not3:IN
not3:OUT
not4:IN
not4:OUT
and1:A
and1:B
and1:OUT
and2:A
and2:B
and2:OUT
and3:A
and3:B
and3:OUT
and4:A
and4:B
and4:OUT
and5:A
and5:B
and5:OUT
or1:A
or1:B
or1:OUT
and6:A
and6:B
and6:OUT
or2:A
or2:B
or2:OUT
and7:A
and7:B
and7:OUT
chip1:EXTCLK
chip1:EXTRST_N
chip1:EXTIN0
chip1:EXTIN1
chip1:EXTIN2
chip1:EXTIN3
chip1:EXTIN4
chip1:EXTIN5
chip1:EXTIN6
chip1:EXTIN7
chip1:CLK
chip1:RST_N
chip1:IN0
chip1:IN1
chip1:IN2
chip1:IN3
chip1:IN4
chip1:IN5
chip1:IN6
chip1:IN7
Loading
tt-block-output