The Mano machine is a computer theoretically described by M. Morris Mano. It contains a central processing unit, random access memory, and an input-output bus.
We are a team of 5 students who worked on this project as part of our Microcontrollers Arcitechure Course:
We have implemented the Mano machine in Verilog and in Proteus
Verilog is a hardware description language (HDL) used to design and simulate digital systems. Verilog is similar to other HDLs, such as VHDL, but has a simpler syntax.
The Mano machine can be broken down into several modules, such as the ALU, memory, registers, flip-flops and I/O devices. Each module can be implemented in Verilog as a separate entity. The modules can then be interconnected to form the complete system.
- The Verilog modules used are:
- Adder_And_Logic_Circuit.v
- D_Flip-Flop.v
- Decoder.v
- Mano_Basic_Computer.v
- Memory.v
- Register_12.v
- Register_16.v
- Selection_Line.v
- Sequence_Counter.v
This implementation can excute all the instructions that was descriped by M. Morris Mano
| Instruction | Hexadecimal Code | Description |
|---|---|---|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Memorey Referrence Instructions | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| AND | 0XXX 8XXX | And memory word to AC |
| ADD | 1XXX 9XXX | Add memory word to AC |
| LDA | 2XXX AXXX | Load AC from memory |
| STA | 3XXX BXXX | Store content of AC into memory |
| BUN | 3XXX CXXX | Branch unconditionally |
| BSA | 6XXX DXXX | Branch and save return address |
| ISZ | 7XXX EXXX | Increment and skip if zero |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Register Referrence Instructions | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| CLA | 7800 | Clear AC |
| CLE | 7400 | Clear E |
| CMA | 7200 | Complement AC |
| CME | 7100 | Complement E |
| CIR | 7080 | Circulate right AC and E |
| CIL | 7040 | Circulate left AC and E |
| INC | 7020 | Increment AC |
| SPA | 7010 | Skip next instruction if AC is positive |
| SNA | 7008 | Skip next instruction if AC is negative |
| SZA | 7004 | Skip next instruction if AC is zero |
| SZE | 7002 | Skip next instruction if E is zero |
| HLT | 7001 | Halt the computer |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Input/Output Referrence Instructions | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| INP | F800 | Input character to AC |
| OUT | F400 | Output character from AC |
| SKI | F200 | Skip next instruction on Input Flag |
| SKO | F100 | next instruction on Output Flag |
| ION | F080 | Interrupt on |
| IOF | F040 | Interrupt off |
The program written in the memory can be found in instructuin.v file
The Mano machine can be broken down into samller Units such as ALU, InOut registers, ir and sc, mem registers, and signal,. Each Unit is is a bunch of ICs that make part of the full the machine job. These units can then be interconnected to form the complete system.
This implementation can excute most of the instructions that was descriped by M. Morris Mano as we used 4-bit register as the Address Register.
| Instruction | Hexadecimal Code | Description |
|---|---|---|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Memorey Referrence Instructions | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| AND | 0X 8X | And memory word to AC |
| ADD | 1X 9X | Add memory word to AC |
| LDA | 2X AX | Load AC from memory |
| SUB | 3X BX | Subtracte memory word from AC |
| BUN | 3X CX | Branch unconditionally |
| XOR | 6X DX | Exclusively-OR memory word to AC |
| STA | 7X EX | Store content of AC into memory |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Register Referrence Instructions | ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| HLT | 00 | Halt the computer |
| CMA | 01 | Complement AC |
| SZA | 02 | Skip next instruction if AC is zero |
| CLA | 03 | Clear AC |
| CIR | 04 | Circulate right AC and E |
| CIL | 05 | Circulate left AC and E |
| CLE | 06 | Clear E |
| CME | 07 | Complement E |
| INP | 08 | Input character to AC |
| OUT | 09 | Output character from AC |
To prpgram the memory do the following steops:
- 'STOP' the machine
- Turn on 'Programming'
- Turn on 'Write'
- Select 'Old' or 'New'
- Old:
- Click on 'Next' and the program will be written automatically
- New:
- Write the aaddress and the code
- Turn 'write' to 'read'
- Turn 'off' programing
- Turn 'STOP' to 0
Note: the built-in program can be removed or changed as it's not part of the machine and it was made to ease the programming process