Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

Repository files navigation

BUPT 计算机组成原理课程设计

北京邮电大学计算机组成原理课程设计 A 题归档。本仓库面向 TEC-8 实验平台和 Altera MAX 7000S EPM7128SLC84-15,按“基础顺序控制 → 二级流水 → 中断扩展”保留三套彼此独立的 Quartus II 9.0 SP2 工程。

本仓库实现的是 TEC-8 的硬布线控制器;ALU、R0-R3、PC、AR、IR、双端口 RAM 与总线均使用实验台既有数据通路。

相关资料:课程任务书 · 二级流水实现说明

三个层次

目录 层次 实现重点
01-basic-controller/ 基础顺序硬布线控制器 与课程任务书的功能、接口、W1/W2/W3 时序、器件和引脚约束保持一致
02-two-stage-pipeline/ 二级流水硬布线控制器 取指与执行重叠,以 EX_IR7_4 分离取指侧 IR 和执行级指令
03-interrupt-controller/ 带中断硬布线控制器 R3 作为 PC 影子寄存器,R2 保存中断入口,支持 EI、DI、IRET
flowchart LR
    B["基础版<br/>顺序 W1/W2/W3"] --> P["二级流水版<br/>取指与执行重叠"]
    P --> I["中断版<br/>断点保存与自动转移"]
Loading

目录结构

.
├── 01-basic-controller/
│   ├── src/controller.v
│   ├── controller.qpf / controller.qsf
│   ├── controller_assignment_defaults.qdf
│   ├── controller.cdf
│   └── artifacts/controller.pof
├── 02-two-stage-pipeline/
│   └── 与基础版相同的独立工程结构
├── 03-interrupt-controller/
│   ├── src/controller.v
│   ├── tb/*.v
│   └── Quartus 工程与编程文件
└── docs/
    ├── course-specification.pdf
    └── two-stage-pipeline-stop-control.docx

01 · 基础顺序控制器

基础版对应课程 A 题的基础层次。控制器支持运行程序、读/写存储器、读/写寄存器五种操作台模式;运行时在 W1 取指并令 PC 自增,在 W2 译码和执行普通指令,LD、ST 通过 LONG 延长到 W3 完成访存。

实现覆盖 NOP、ADD、SUB、AND、INC、LD、ST、JC、JZ、JMP、STOP 等基本指令,并保留 OUT、OR、CMP、MOV 扩展。控制接口、基本时序和引脚分配分别对应课程任务书第 10、27-31、40 页。

02 · 二级流水控制器

流水版把取指和执行安排到固定时槽:空流水在 P_EMPTY/W2 填充,当前指令在 P_EXEC/W1 执行;普通指令执行时同步产生 do_fetch,由 LIR 与 PCINC 预取下一条。LD/ST 进入 P_MEM2/W2,完成第二拍访存的同时取下一条指令。

控制器增加 EX_IR7_4 作为执行级 OP 寄存器,仅在 do_fetch 有效的 T3 下降沿更新。执行译码、状态转移和停机控制均读取执行级寄存器:STOP 只在 do_exec && ex_is_stop 时生效,并作为流水边界禁止继续预取;跳转同样清空当前流水,随后从新 PC 重新填充。P_MEM2 是访存的第二个微周期,不是额外的通用流水级。

flowchart LR
    A["P_EMPTY / W2<br/>填充流水<br/>LIR + PCINC"] --> B["P_EXEC / W1<br/>按 EX_IR7_4 执行"]
    B -->|"普通指令:执行 + 预取"| B
    B -->|"LD / ST"| C["P_MEM2 / W2<br/>完成访存 + 预取"]
    C --> B
    B -->|"跳转:清空后重取"| A
    B -->|"STOP:不再预取"| H["STOP = 1"]
    IR["IR7_4<br/>取指侧 OP"] -->|"do_fetch,T3 下降沿"| EX["EX_IR7_4<br/>执行级 OP"]
    EX --> B
Loading

03 · 中断控制器

TEC-8 的本控制器接口没有提供可直接保存断点的独立通路,因此中断版保留 R3 作为 PC 的影子寄存器,并在运行前把中断服务程序入口写入 R2。

  • 主程序每次 W1 取指时同时执行 PC ← PC + 1、R3 ← R3 + 1。
  • JMP 使用 1001_11_rs 编码:高两位寄存器字段固定为 11 以选择 R3 写回,原先空闲的低两位改作跳转源寄存器号,使 PC 与 R3 同时装入 R[rs]。
  • PULSE 上升沿锁存中断请求;控制器在当前指令结束后受理,关闭中断并冻结 R3,下一 W1 自动执行 PC ← R2。
  • IRET 通过 ALU A 口执行 PC ← R3,随后退出服务态并重新开放中断。
flowchart TD
    F["主程序 W1 取指<br/>PC 与 R3 同步自增"] --> E["执行当前指令"]
    E --> J{"JMP?"}
    J -->|"是"| JT["1001_11_rs<br/>PC、R3 同时装入 R[rs]"]
    J -->|"否"| Q{"指令结束且有已使能请求?"}
    JT --> Q
    Q -->|"否"| F
    Q -->|"是"| A["受理中断<br/>关中断并冻结 R3"]
    A --> V["入口 W1<br/>PC ← R2"]
    V --> ISR["执行中断服务程序"]
    ISR --> R{"IRET?"}
    R -->|"否"| ISR
    R -->|"是"| RET["PC ← R3<br/>重新开中断"]
    RET --> F
Loading

复位后中断默认关闭,需要先执行 EI。当前中断版本将 R3 作为保留寄存器,并暂不支持难以同步修正 R3 的 JC/JZ;主程序跳转应使用上述 JMP 编码。

小组成员

TeaSings avatar
@TeaSings
jingjia-11 avatar
@jingjia-11
Gjt20051218 avatar
@Gjt20051218
Xuanx-7 avatar
@Xuanx-7

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages