83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
up:: [[Logique séquentielle]]
 | 
						|
#s/informatique #s/maths/logique 
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# ALU binary operators
 | 
						|
 | 
						|
| bin | operator   |
 | 
						|
| ---:|:---------- |
 | 
						|
| 000 | COMParison |
 | 
						|
| 001 | zero       |
 | 
						|
| 010 | OR         |
 | 
						|
| 011 | AND        |
 | 
						|
| 100 | ADD (+)    |
 | 
						|
| 101 | SUB (-)    |
 | 
						|
| 110 | COPY A     |
 | 
						|
| 111 | COPY B     |
 | 
						|
 | 
						|
# How to operate
 | 
						|
 | 
						|
## op exec
 | 
						|
 | 
						|
`op exec` is the component that gathers the ALU and the data registers. It can :
 | 
						|
 | 
						|
- perform operations with the ALU
 | 
						|
- read data : register to ALU inputs
 | 
						|
- write data : ALU output to registers
 | 
						|
- take input : 8 bit bus to ALU inputs
 | 
						|
- give output : ALU output or registers to 8 bit bus
 | 
						|
 | 
						|
 | 
						|
> [!info] Writing data to a register
 | 
						|
> It is not possible to write data directly from the 8 bit bus to the registers.
 | 
						|
> If you want to register some data, you have to do the following :
 | 
						|
>  - write the data to the ALU inputs (input A for example)
 | 
						|
>  - set the ALU operation to copy (copy A in our example, that is `110`)
 | 
						|
>  - write from the alu to the register (give the register address in the 8 bit bus, and set the `from ALU` and `to register` bits)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Binary code
 | 
						|
The binary code of the CPU. They are stored in 2 octets.
 | 
						|
 | 
						|
|            binary code | action          |
 | 
						|
| ----------------------:| --------------- |
 | 
						|
| `0000 0000  0000 0000` | NOOP            |
 | 
						|
|     SET ALU OPERATIONS |                 |
 | 
						|
| `XXX0 0000  0000 0001` | set X as ALU op |
 | 
						|
| `0000 0000  0000 0001` | COMParison      |
 | 
						|
| `0001 0000  0000 0001` | ZERO            |
 | 
						|
| `0010 0000  0000 0001` | OR              |
 | 
						|
| `0011 0000  0000 0001` | AND             |
 | 
						|
| `0100 0000  0000 0001` | A+B             |
 | 
						|
| `0101 0000  0000 0001` | A-B             |
 | 
						|
| `0110 0000  0000 0001` | BYPASS A        |
 | 
						|
| `0111 0000  0000 0001` | BYPASS B        |
 | 
						|
|           READ / WRITE |                 |
 | 
						|
| `XXXX XXXX  0000 0010` | X --> ALU A     |
 | 
						|
| `XXXX XXXX  0000 0011` | X --> ALU B     |
 | 
						|
| `XXXX XXXX  0000 0110` | reg X --> ALU A |
 | 
						|
| `XXXX XXXX  0000 0111` | reg X --> ALU B |
 | 
						|
| `0000 0000  0000 1000` | ALU --> reg     |
 | 
						|
 | 
						|
![[digital logic sim computer 2023-07-18 09.57.52.excalidraw]]
 | 
						|
 | 
						|
| bin | operator   |
 | 
						|
| ---:|:---------- |
 | 
						|
| 000 | COMParison |
 | 
						|
| 001 | zero       |
 | 
						|
| 010 | OR         |
 | 
						|
| 011 | AND        |
 | 
						|
| 100 | ADD (+)    |
 | 
						|
| 101 | SUB (-)    |
 | 
						|
| 110 | COPY A     |
 | 
						|
| 111 | COPY B     |
 | 
						|
 | 
						|
 | 
						|
10 + 10
 | 
						|
 | 
						|
write 10 to A -> 0001010 00000100
 | 
						|
write 11 to B -> 0001011 00001000
 | 
						|
write 100 to op 00000100 00010000
 |