안녕 프형들
브랜치 해저드 부분 보고 잇는 프늅이야!
내가 궁금한건 브랜치 주소 계산을 MEM에서 ID단계로 옮기는 부분인데, 사진에서 $1과 $3 값의 일치 여부를 확인하는 덧셈기가 보이지?
궁금한 것 두 가지가 잇어
1. 책에서는 두 레지스터값을 비트별로 xor을 하여 결과비트를 and 하여서 같은지 여부를 테스트한다고 되있는데, 비트별로 xor하면 서로 다를 때만 1을 출력하고, 이 결과들을 and 한다고 햇으니 이 and게이트의 출력이 1이면 결과적으로 모든 비트 값들이 다르다는 것을 의미하잖아.
그럼 설계의도에 맞지 않는 것 아닌가? 레지스터 값이 똑같을 때 1을 필요로 하기 때문에 두 레지스터값을 비트별로 같을 때만 1을 취하도록 하고 그 결과들을 and 해서 그 결과가 1이면 두 레지스터 값이 같은 것 아닌가? 내가 뭘 놓쳣을까...?ㅜ
2. 그리고 그 결과 비트가 1로 나온다면 s1과 s3의 결과가 똑같다는 말이니, 사진속의 adder에 의한 출력인 72가 IF단계의 멀티플렉서에게 선택 받아야 하잖아
그럼 이 ID단계의 레지스터 비교 덧셈기(덧셈기는 사실 아니고, 등가기?) 의 출력을 ID에서의 adder 나 IF단계에서의 멀티플렉서로 전달을 해줄 모종의 선(제어선인 것 같은데 개념적으로 혼돈스러워서 그냥 선이라고 했어! 자신있게 제어선이라고 못하겟다ㅜ)이 필요할 것 같은데 보다시피 등가기는 그냥 혼자 덩그러니 있네..ㅠ 어디서 막힌걸까ㅠ
질문 끝!
꾸짖음 환영 조언 환영!
중간에 잘못써서 수정햇어!
Apache // 2번째 질문에서 만약에 그림에서만 빠진거면 그 선에 대한 설명이나 선을 어디에 연결하고 멀티플렉서 변경사항 같은 걸 알려줘야할 것 같은데 그냥 저러고 끝이야ㅜㅠ 저 부분은 그냥 크게 신경 안쓰고 넘어가도 될까?
사실 이런 건 진짜 hdl로 구현해보면 직빵인데
걍 님이 구현한다면 어디에 연결할 지 고민해보셈
기본적으로 컨트롤 유닛에 결과를 보내고 만약 misprediction 났으면 front-end pipeline을 flush 해야겠지
apache // 컨트롤 말고 그냥 IF의 멀티플렉서에 바로 연결하거나 뭐 하나 더 만들어서 하는 방식이 처음 떠오른 생각인데, 자세히 생각해보니 뭐 더 복잡해질 것 같고 그냥 컨트롤 유닛에 보낸다는 형 말이 맞는듯ㅜ 아직 안 익숙해서 생각이 불이익스러울 정도로 유연해ㅎㅎ