> # ♻️ 资源
> **大小:** 117MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010673**](https://www.yuque.com/sxbn/ks/100010673)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87425296**](https://download.csdn.net/download/s1t16/87425296)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 1. 实验名称
指令流水仿真程序
# 2. 实验报告作者
# 3. 实验内容
## 3.1. 定义 NK-CPU 指令流水线仿真的基本数据结构
### 3.1.1. 四个锁存器
nkcpuPipelineDlg.cpp
```
// 模拟各段之间的锁存器
// IF/ID
class ifData {
public:
CString PC;
CString IR;
ifData& operator=(ifData x) {
this->PC = x.PC;
this->IR = x.IR;
return *this;
}
};
ifData ifbefore, ifafter;
// ID/EX
class idData {
public:
CString PC;
CString IR;
int A;
int B;
int C;
int Imm;
idData& operator=(idData x) {
this->PC = x.PC;
this->IR = x.IR;
this->A = x.A;
this->B = x.B;
this->C = x.C;
this->Imm = x.Imm;
return *this;
}
};
idData idbefore, idafter;
// EX/MEM
class exData {
public:
CString PC;
CString IR;
int C;
int Imm;
int ALUOutput;
exData& operator=(exData x) {
this->PC = x.PC;
this->IR = x.IR;
this->ALUOutput = x.ALUOutput;
this->C = x.C;
this->Imm = x.Imm;
return *this;
}
};
exData exbefore, exafter;
// MEM/WB
class memData {
public:
CString PC;
CString IR;
int Imm;
int LMD;
int ALUOutput;
memData& operator=(memData x) {
this->PC = x.PC;
this->IR = x.IR;
this->ALUOutput = x.ALUOutput;
this->LMD = x.LMD;
this->Imm = x.Imm;
return *this;
}
};
memData membefore, memafter;
```
五段流水每段之间需要一个锁存器,所以一共是四个分别以锁存器之前的 段名+Data 命名,其中:
- IR 是该段要处理的指令,
- PC 是该指令对应的地址,
- A 是指令的 6-10 位也就是操作数 s ,
- B 是指令的 11-15 位也就是操作数 t ,
- C 是指令的 16-20 位也就是操作数 d ,
- Imm 是指令的后 16 位也就是对应的立即数,
- ALUOutput 是 EX 段 ALU 运算后的输出结果,
- LMD 是 MEM 段取出的数据。
由于没有实现并行操作,是利用串行模拟所以要将锁存器分成两个状态 ××before 和 ××after ,每段从 ××before 读取数据,向 ××after 写入数据,一个时钟周期结束后将 ××after 的值赋予 ××before ,所以我重载了 = 运算符。
## 3.2. 使用 C 语言实现 NK-CPU 指令流水线仿真程序
### 3.2.1. 模拟五段流水
设计的总逻辑依据下图:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714270043210-3096acc1-29c3-44c8-8b47-38c72231bb31.png#averageHue=%23c2bdb4&from=url&id=tqPAJ&originHeight=3024&originWidth=4032&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
《计算机体系结构:量化研究方法(第五版)》 P484
#### 3.2.1.1. IF
nkcpuPipelineDlg.cpp
```
CString CnkcpuPipelineDlg::IF() {
if (ifbefore.IR == "11111111111111111111111111111111") {
ifafter.IR = ifbefore.IR;
return _T("NOP");
}
else {
UpdateData(TRUE);
CString strPC;
strPC.Format(_T("%d"), m_PC);
ifafter.PC = strPC;
m_program.EnsureVisible(m_PC / 4, FALSE);// 滚动到选中行
m_program.SetItemState(m_PC / 4, LVIS_SELECTED, LVIS_SELECTED);// 高亮选中行,其实未聚焦时为灰色
CString code = m_program.GetItemText(m_PC / 4, 1);
ifafter.IR = code.Left(8) + code.Mid(9, 8) + code.Mid(18, 8) + code.Right(8);
if ((idbefore.IR.Left(6) == "100011"
&& ifbefore.IR.Left(6) == "101011"
&& (idbefore.IR.Mid(16, 5) == ifbefore.IR.Mid(6, 5) || idbefore.IR.Mid(16, 5) == ifbefore.IR.Mid(11, 5) || idbefore.IR.Mid(16, 5) == ifbefore.IR.Mid(16, 5))) ||
(idbefore.IR.Left(6) == "100011"
&& (ifbefore.IR.Left(6) == "000000" || ifbefore.IR.Left(6) == "100011")
&& (idbefore.IR.Mid(16, 5) == ifbefore.IR.Mid(6, 5) || idbefore.IR.Mid(16, 5) == ifbefore.IR.Mid(11, 5))) ||
(idbefore.IR.Left(6) == "100011"
&& (ifbefore.IR.Left(6) == "001000" || ifbefore.IR.Left(6) == "000110")
&& idbefore.IR.Mid(16, 5) == ifbefore.IR.Mid(6, 5)))
{
ifafter = ifbefore;
idafter.IR = _T("000000") + idafter.IR.Mid(6, 20) + _T("000000");
}
else if (ifbefore.IR.Left(6) == "000010" || (ifbefore.IR.Left(6) == "000110"&&idafter.A <= 0))
{
m_PC = idafter.Imm;
ifafter.IR = _T("000000") + ifafter.IR.Mid(6, 20) + _T("000000");
}
else
{
m_PC += 4;
}
UpdateData(FALSE);
return strPC;
}
}
```
IF 段取指,利用 ID 判断分支是否成立的结果,如果分支指令成立或者是跳转指令,就将 PC 置为相应地址,这里会有一周期的延迟,所以会读入下一条指令,如果跳转到别处,这条指令就没用了,所以将控制位置 0 ,之后的操作也就不会做了。参照下图中的 IF 段:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714270043333-40fb63d0-42dc-42bd-b09f-9e0eb6eb04b7.png#averageHue=%23c3bfb6&from=url&id=P1iPj&originHeight=3024&originWidth=4032&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
《计算机体系结构:量化研究方法(第五版)》 P484
还有一点就是在 ID 段由于数据冒险会有旁路转发,其中有一种情况不能处理,也就是载入指令的目标寄存器在紧接着的下一条指令中作为源寄存器被调用,这种情况也会有一周期延迟,这需要停顿等待,其实也是将 ID 段的判断结果在这一段使用。所以我就都写在这一段里了。参照下图中的 表C-11 :
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1714270043451-d29ece3a-321f-48d0-af22-10660c79cd78.png#averageHue=%23c4bfb7&from=url&id=tG1Br&originHeight=2291&originWidth=4032&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
《计算机体系结构:量化研究方法(第五版)》 P481
如果这两种情况均不存在,就将 PC + 4 存入 PC。
#### 3.2.1.2. ID
nkcpuPipelineDlg.cpp
```
CString CnkcpuPipelineDlg::ID() {
if (time < 1)return _T("");
else if (ifbefore.IR.Left(6) == "000000"&&ifbefore.IR.Right(6) == "000000"|| ifbefore.IR == "11111111111111111111111111111111") {
idafter.IR = ifbefore.IR;
return _T("NOP");
}
else {
idafter.PC = ifbefore.PC;
idafter.IR = ifbefore.IR;
idafter.A = m_Reg[bin2num(ifbefore.IR.Mid(6, 5))];
idafter.B = m_Reg[bin2num(ifbefore.IR.Mid(11, 5))];
idafter.C = m_Reg[bin2num(ifbefore.IR.Mid(16, 5))];
idafter.Imm = bin2num(ifbefore.IR.Right(16));
if ((memafter.IR.Left(6) == "000000"|| memafter.IR.Left(6) == "100011")
&& (idafter.IR.Left(6) == "000000" || idafter.IR.Left(6) == "100011" || idafter.IR.Left(6) == "101011" || idafter.IR.Left(6) == "001000" || idafter.IR.Left(6) == "000110")
&& (memafter.IR.Mid(16, 5) == idafter.IR.Mid(6, 5))) {
if (memafter.IR.Left(6) == "000000")idafter.A = memafter.ALUOutput;
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现的指令流水仿真程序【100010673】
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共83个文件
tlog:18个
jpg:8个
txt:6个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 27 浏览量
2023-02-07
16:20:10
上传
评论
收藏 117.96MB ZIP 举报
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010673 1. 定义 NK-CPU 指令流水线仿真的基本数据结构 2. 使用 C 语言实现 NK-CPU 指令流水线仿真程序 3. 仿真运行实验 2 中实现的随机数排序程序
资源推荐
资源详情
资源评论
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/EXE.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PDF.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JPG.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/EXE.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/BMP.png)
共 83 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/fbed2db386fd4018b8f2474d6651545d_s1t16.jpg!1)
神仙别闹
- 粉丝: 2712
- 资源: 7668
![benefits](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-1.c8e153b4.png)
下载权益
![privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-2.ec46750a.png)
C知道特权
![article](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-3.fc5e5fb6.png)
VIP文章
![course-privilege](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-4.320a6894.png)
课程特权
![rights](https://csdnimg.cn/release/downloadcmsfe/public/img/vip-rights-icon.fe0226a8.png)
开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)