2013-02-22 7 views
4

몇 가지 문제가 있어요 내 코드입니다 :이 nand2tetris 책의 PC (카운터) 구축을 위해 노력,하지만 난 논리 여기

CHIP PC { 
    IN in[16],load,inc,reset; 
    OUT out[16]; 

    PARTS: 
    Inc16(in = regout, out = incout); 
    Mux16(a = regout, b = incout, sel = inc, out = incdecision); 
    Mux16(a = incdecision, b = false, sel = reset, out = resetdecision); 
    Mux16(a = regout, b = resetdecision, sel = load, out = loaddecision); 
    Register(in = loaddecision, load = true, out = regout, out = out); 
} 

기본적으로, 레지스터에서 나오는 값이 증가, 어떤 inc가 1 인 경우 (Mux를 통해 확인), 재설정 할 수있는 다른 Mux를 통과 한 다음로드 값에 따라 쓰기가 가능한 또 다른 Mux가있는 경우에만 허용됩니다. 그런 다음 변경된 값이나 이전 레지스터의 값이 레지스터에 저장됩니다.

내가 뭘 잘못하고 있니?

답변

2

In 신호가 아무 것도 연결되지 않은 것으로 보입니다. load 신호가 설정되면 적절한 Mux16을 가져와 In 값을 레지스터에로드해야합니다.

2

resetdecisionloaddecesion의 순서를 변경하십시오. 첫 번째 우선 순위가 더 높습니다.

Inc16(in=outpc, out=outincreased); 
Mux16(a=outpc, b=outincreased, sel=inc, out=outinc); 
Mux16(a=outinc, b=in, sel=load, out=outload); 
Mux16(a=outload, b=false, sel=reset, out=outreset); 
    //And16(a=outLOAD, b[0..15]=reset, out=outreset); 
Register(in=outreset, load=true, out=out, out=outpc); 
0

리셋 Mux16은로드 Mux16 이후에 발생해야합니다. 부하 Mux16은 "b"핀으로 "in"을 가져야합니다. Nand2Tetris에서

내 작업 코드 :

대신 일을 그런 식으로해야 할 이유를 언급한다 일어날 필요가 무엇을 말하는
Inc16(in = outandabout, out = incout); 
Mux16(a = outandabout, b = incout, sel = inc, out = incinc); 
Mux16(a = incinc, b = in, sel = load, out = loadout); 
Mux16(a = loadout, b = false, sel = reset, out= outreset); 
Register(in = outreset, load = true, out = out, out = outandabout); 
+0

. 이렇게하면 미래에 다른 사람들이 당신의 답을 훨씬 더 배우고 제거 할 수 있습니다. – yanman1234