目录整理:RTL/上板/仿真分开存放,测试 ROM 镜像归入 testbench/rom
- rtl/:12 个可综合的处理器源文件(顶层 cpu21_riscv_redirect_int_bpb.v,其余为各功能单元)。 - board/:板级顶层 cpu21_board_top.v、引脚约束 cpu21_board_top.xdc、片内 ROM 初始化 cpu21_board_rom.vh 与短延时版本 cpu21_board_rom_fast.vh。 - testbench/:保留三个测试平台;ROM 镜像统一放到 testbench/rom/,测试程序源码与期望值 仍在 testbench/programs/(其中的 .hex 是 RARS 原始输出,与 rom/ 里改过显示方式的版本 内容不同,两者都保留)。 - 同步更新:两个测试平台的 ROM 探测路径改为 testbench/rom/(并在头注释里补充说明: PowerShell 会把 -generic_top/--testplusarg 参数里的 "=" 拆开、Verilog 字符串中的 路径要用正斜杠);tools/hex2vh.py 的用法示例指向 board/cpu21_board_top.v; 说明文档新增“目录结构”一节并同步所有路径引用;.gitignore 补充 .Xil/。 - 清理:删除 *.hex.lst 中间文件与空的 .Xil/ 目录。 - 验证:isa_test 24/24、lui_test 4/4、mmio_test 5/5 三项回归通过;两个基线(5560 / 6003 周期)与整理前一致;板级仿真(默认 ROM 首次写入 LED=0001、快速 ROM 跑马灯循环)正常; Vivado 工程源文件路径同步到 rtl/ 与 board/ 后综合通过(LUT 5276、23 个引脚,与整理前 完全一致),因此已有 bit 文件仍然有效。
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
`timescale 1ns / 1ps
|
||||
`default_nettype none
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 冒险/流水控制单元。
|
||||
//
|
||||
// load-use 冒险:EX 级是 load 且 ID 级指令马上要用它的结果时,插入一个
|
||||
// 气泡(停顿一拍)。其余数据相关由前递网络解决。
|
||||
// 冲刷(flush_younger)优先级高于停顿:中断、URET、ecall 停机、分支
|
||||
// 重定向都会丢弃年轻指令,此时不需要再插气泡。
|
||||
// -----------------------------------------------------------------------------
|
||||
module cpu21_riscv_hazard_unit (
|
||||
input wire ifid_valid_i,
|
||||
input wire idex_valid_i,
|
||||
input wire idex_mem_to_reg_i,
|
||||
input wire [4:0] idex_rd_i,
|
||||
input wire d_uses_rs1_i,
|
||||
input wire d_uses_rs2_i,
|
||||
input wire [4:0] d_src1_idx_i,
|
||||
input wire [4:0] d_src2_idx_i,
|
||||
// 冲刷来源
|
||||
input wire take_irq_i,
|
||||
input wire uret_redirect_i,
|
||||
input wire halt_event_i,
|
||||
input wire redirect_valid_i,
|
||||
input wire halted_i,
|
||||
// 控制结果
|
||||
output wire load_use_hazard_o,
|
||||
output wire flush_younger_o,
|
||||
output wire pipeline_stall_o
|
||||
);
|
||||
// EX 级为 load,且 ID 级的源寄存器与它的目的寄存器相同。
|
||||
assign load_use_hazard_o = ifid_valid_i && idex_valid_i && idex_mem_to_reg_i &&
|
||||
(idex_rd_i != 5'd0) &&
|
||||
((d_uses_rs1_i && (d_src1_idx_i == idex_rd_i)) ||
|
||||
(d_uses_rs2_i && (d_src2_idx_i == idex_rd_i)));
|
||||
|
||||
assign flush_younger_o = take_irq_i || uret_redirect_i || halt_event_i || redirect_valid_i;
|
||||
|
||||
assign pipeline_stall_o = load_use_hazard_o && !flush_younger_o && !halted_i;
|
||||
endmodule
|
||||
|
||||
`default_nettype wire
|
||||
Reference in New Issue
Block a user