죄송합니다... 밤을 새고 혹시나 하는 마음에 올리고 잤는데... 잠결에 썼더니... 너무 생략해놔서 저도 못보겠네요.. ㅜㅜ
우선 너무 길어서 다 쓰진 못할 거 같고요 그래도 필요한 부분만 써볼게요...
ALU.cpp---------------------------------------
#include "ALU.h"
void ALU::ALU_thread()
{
sc_uint<32> t_rs;
sc_uint<32> t_rt;
sc_uint<32> t_result;
sc_uint<4> t_alu_ctrl;
while(true){
t_rs = rs.read();
t_rt = rt.read();
t_alu_ctrl = alu_ctrl.read();
switch (t_alu_ctrl) {
case 0x2:
// add
t_result = t_rs + t_rt;
break;
case 0x6:
// subtract
t_result = t_rs - t_rt;
break;
case 0x0:
// AND
t_result = t_rs && t_rt;
break;
case 0x1:
// OR
t_result = t_rs || t_rt;
break;
case 0x7:
// slt
t_result = (t_rs < t_rt) ? 1:0;
}
cout << "ALU result : " << t_result.to_string(SC_HEX) << endl;
if(t_result == 0)
{
cout << "zero : YES" << endl;
zero.write(1);
}
else
{
cout << "zero : NO" << endl;
zero.write(0);
}
result.write(t_result);
wait();
}
}
----------------------------------------------------
다음 NOT.cpp 입니다.------------------------------
#include "NOT.h"
void NOT::NOT_thread()
{
sc_uint<1> t_in_1;
sc_uint<1> t_out;
while(true){
t_in_1 = in_1.read();
t_out = ~t_in_1;
out.write(t_out);
wait();
}
}
------------------------------------------------------
최종 main중 일부분 입니다.----------------------------
ALU m_ALU("alu");
m_ALU.rs(S_RS_DATA);
m_ALU.rt(S_mux2_out); // Mux 2 출력
m_ALU.alu_ctrl(S_ALU_CONTROL);
m_ALU.result(S_ALU_RESULT);
m_ALU.zero(S_zero);
////// NOT /////////////////////////////
NOT m_NOT("NOT");
m_NOT.in_1(S_zero);
m_NOT.out(S_zeronot);
--------------------------------------------------------
이렇게 하면 zero 값이 >> S_zero >> NOT.in_1 >> out=!in_1 >> S_zeronot 해서 보수가 들어가야할 거라고 해봤는데..
이게 data흐름으로 보면 계속 0이라서... main에가 S_zero값은 직접 넣어줘봤더니... 바뀌긴 하는 거 같은데...
함수에서 값을 불러서 그런지.,, 무슨 이유에서 인지는 모르겠는데 S_zero값이 변해도 S_zeronot이 0으로 꾲혀서요...
너무 길어서 ... 올려도 될지는 모르겠는데... 좀 .... 절박?해서 도움부탁드립니다.