CPU.hdl - Нужно объяснение, чтобы понять код
У меня есть этот код CPU.hdl.
CHIP CPU {
IN inM[16], // M value input (M = contents of RAM[A])
instruction[16], // Instruction for execution
reset; // Signals whether to re-start the current
// program (reset=1) or continue executing
// the current program (reset=0).
OUT outM[16], // M value output
writeM, // Write into M?
addressM[15], // Address in data memory (of M)
pc[15]; // address of next instruction
PARTS:
Not(in=instruction[15], out=isAcmd);
Not(in=isAcmd, out=isCcmd);
// Create the ALU chip.
// First input to ALU is always D; 2nd is A or M based on inst[12]
Mux16(a=outA, b=inM, out=outAM, sel=instruction[12]);
ALU(x=outD, y=outAM, zx=instruction[11], nx=instruction[10], zy=instruction[9], ny=instruction[8], f=instruction[7], no=instruction[6], out=outM, out=outALU, out=inD, zr=zr, ng=ng);
//also need logic as to whether to write to M ... it's part of the instruction
And(a=isCcmd, b=instruction[3], out=writeM);
.
.
.
}
Я пытаюсь понять CPU.hdl. Я не понимаю 2 строки после ЧАСТЕЙ. Что они делают?
2 ответа
PARTS создает новые компоненты внутри вашего процессора.
Например. E сть NOT
компонент, где порт назван in
подключен к сигналу instruction[15]
Из книги:
Чтобы понять, что означает это 16-битное слово, можно ли разбить его на поля "i xx a cccccc ddd jjj". Бит i кодирует тип инструкции, который равен 0 для A-инструкции и 1 для C-инструкции.
Эти две строки разбивают инструкцию [15] на 2 контакта. Возможно, разделение их с помощью DMux может иметь для вас больше смысла:
DMux(in=true, sel=instruction[15], a=aInstruction, b=cInstruction);
Нарисуйте таблицу истинности в обоих направлениях, и это должно иметь смысл для вас.