Регистр D не обновляется, почему?

Чтобы скопировать файл cpu.out, показанный ниже (хотя и без моих комментариев), используйте этот cpu.hdl, который проходит все тесты.

Теперь мой вопрос в такте 3+, 4 и 4+. Обратите внимание, что DRegise (регистр D) не обновляется, несмотря на то, что команда была "D=A-D", почему?

|time| inM  |  instruction   |reset| outM  |writeM |addre| pc  |DRegiste|
a-instruc | store the number "12345"
|0+  |     0|0011000000111001|  0  |      0|   0   |    0|    0|      0 |
|1   |     0|0011000000111001|  0  |      0|   0   |12345|    1|      0 |

c-instru | comp: "A" | dest: "D" | jump: "no jump" | "D=A" 
|1+  |     0|1110110000010000|  0  |  12345|   0   |12345|    1|  12345 |
|2   |     0|1110110000010000|  0  |  12345|   0   |12345|    2|    |

a-instruc | "23456"
|2+  |     0|0101101110100000|  0  |     -1|   0   |12345|    2|  12345 |
|3   |     0|0101101110100000|  0  |     -1|   0   |23456|    3|  12345 |

c-instruc | comp: "A-D" | dest: "D" | jump: "no jump" | "D=A-D"
|3+  |     0|1110000111010000|  0  |  11111|   0   |23456|    3|  11111 |
|4   |     0|1110000111010000|  0  |  12345|   0   |23456|    4|  11111 |

a-instruc | "1000"                        WHY DREGISTE NOT CHANGE? v^v^
|4+  |     0|0000001111101000|  0  | -11111|   0   |23456|    4|  11111 |
|5   |     0|0000001111101000|  0  | -11111|   0   | 1000|    5|  11111 |

person xing Zì    schedule 24.07.2019    source источник


Ответы (1)


Если ваш cpu.hdl проходит все тесты, возможно, он работает правильно.

Насколько я могу судить (прошло несколько лет с тех пор, как я собирал свой процессор), Dreg обновляется корректно; он обновляется в циклах +. Обратите внимание, что в цикле 3 его значение равно 12345, а в цикле 3+ (после обработки D=A-D) оно равно 11111 (то есть 23456-12345, как и следовало ожидать).

Мое лучшее предположение заключается в том, что симулятор не обновляет значения выходов процессора в фазах +, а показывает внутреннее состояние. Таким образом, вы видите изменение Dreg в фазах +, но «addre» (который не является внутренним регистром, это внешние адресные строки) изменяется только в фазах, отличных от +.

person MadOverlord    schedule 24.07.2019