Programming Assignment 4 Solution

$30.00

Category:

Description

Description

 

  • This is an individual assignment. Please do not collaborate

 

  • If you think that this document does not clearly describes the assignment, ask questions before its too late.

 

This assignment is about implementing and testing classes for a logic circuit simulator.

 

  • Your program reads two files:

 

circuit.txt

 

input.txt

 

  • According to content in circuit.txt, the program dynamically creates necessary objects for a logic circuit and evaluates the states listed in input.txt.

 

  • Your program prints the output to stdout. Each line in input.txt is a state. For each state, there should be a line of output printed.

 

circuit.txt

 

  • Each line starts with a keyword. Possible keywords:

 

INPUT

 

OUTPUT

 

AND

 

OR

 

NOT

 

FLIPFLOP

 

DECODER

 

  • The first line specifies input labels. Labels are separated by spaces. Example:

 

INPUT a input2 c3 k

 

  • Here there are 4 inputs are defined. Each has an identifier. a, input2, c3, k.

 

  • The second line specifies output labels. Labels are separated by spaces. Example:

 

OUTPUT d1 d2 d3 d4

 

  • Here there are 4 outputs are defined. Each has an identifier. d1, d2, d3, d4.

 

  • AND keyword specifies that there is an and gate defined. AND keyword follows the identifier for its output and two other identifiers for the inputs. Example:

 

AND gate_A c3 another_id

 

  • Here the and gate has an output identified by the string gate_A. Its inputs are identified c3 and another_id. These identifiers can be input identifiers or identifiers for other gates.

 

  • OR keyword specifies that there is an or gate defined. OR keyword follows the identifier for its output and two other identifiers for the inputs. Example:

 

OR gate_B ck id3

 

  • Here the or gate has an output identified by the string gate_B. Its inputs are identified ck and id3. These identifiers can be input identifiers or identifiers for other gates.

 

 

 

1

 

  • NOT keyword specifies that there is a not gate defined. NOT keyword follows the identifier for its output and one other identifier for its input. Example:

 

NOT gate_C c5

 

  • Here the not gate has an output identified by the string gate_C. It has only one input an it is identified by the string c5.

 

  • FLIPFLOP keyword specifies that there is a flip-flop gate defined. FLIPFLOP keyword follows the identifier for its output and one other identifier for its input. Example:

 

FLIPFLOP gate_F c6

 

  • Here the flip-flop gate has an output identified by the string gate_F. Its input is identified by c6.

 

  • DECODER keyword specifies that there is a decoder gate defined. DECODER keyword follows the identifiers for its outputs(o1, o2, o3, o4) and identifiers for its inputs(a1, a2). Example:

 

DECODER d1 d2 d3 d4 g1 another_identifier

 

  • Here the decoder gate has outputs identified by strings o1, o2, o3, o4. Its inputs are identified by g1 and another_identifier.

 

input.txt

 

  • Each line is a list of 1 and 0. Example:

 

1 0 1 1

 

0 1 1 1

 

0 0 1 0

 

1 0 0 1

 

Example:

 

  • Suppose that circuit.txt is has the following content:

 

INPUT a b c d

 

OUTPUT d1 d2 d3 d4

 

AND and1 a b

 

OR or1 and1 c

 

NOT n1 d

 

FLIPFLOP f1 n1

 

AND a2 or1 f1

 

DECODER d1 d2 d3 d4 a2 f1

 

  • txt has the following content:

 

1 1 0 1

 

1 0 1 0

 

1 1 1 0

 

  • Assume that initially former-out of any FLIPFLOP is 0.

 

  • Any FLIPFLOPs should preserve the state throughout the evaluation of the whole input.txt.

 

  • Each line in input.txt is assigned to identifiers a, b, c, d, defined in circuit.txt. According to the truth tables, outputs of gates are calculated.

 

  • For the input.txt given, the output of your program should be:

 

1 0 0 0

 

0 0 0 1

 

1 0 0 0

 

 

 

2

 

  • and
b gate and
and1 or or1
gate gate
c flip f1 a2
flop
d not n1 decoder d1
gate d3d2
d4

 

Figure 1: Example Logic Circuit

 

Remarks

 

  • Each identifier is unique. You can assume that their length is limited to 15 characters. You can use std::string.
  • There won’t be any errors in the files.

 

  • You have to use dynamic memory allocation and C++ classes.

 

  • You have use inheritance and polymorphism. Find a class hierarchy and try to use abstraction.

 

  • You are not allowed to used std::vectors.

 

  • You cannot use components which are not covered in class. (such as templates etc..)

 

  • In order to learn about file I/O operations, you can go through the related book chapter(not covered in class). Or you can read the section presented in assignment 3.

 

Turn in:

 

  • Source code of a complete C++ program and a suitable makefile. You should use c++11 standard. Your code will be tested in a linux-gcc environment.
  • A script will be used in order to check the correctness of your results. So, be careful not to violate the expected output format.

 

  • Provide comments unless you are not interested in partial credit. (If I cannot easily understand your design, you may loose points.)

 

  • You cannot get full credit if your implementation contradicts with the statements in this document.

 

 

 

 

 

Truth Tables:

 

  • AND

 

a b out
0 0 0
0 1 0
1 0 0
1 1 1

 

  • OR

 

a b out
0 0 0
0 1 1
1 0 1
1 1 1

 

  • NOT

 

a    out

 

0    1

 

1  0

 

  • FLIPFLOP

 

a former_out out
0 0 0
0 1 1
1 0 1
1 1 0

 

  • DECODER

 

a1 a2 d1 d2 d3 d4
0 0 1 0 0 0
0 1 0 1 0 0
1 0 0 0 1 0
1 1 0 0 0 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4


error: Content is protected !!