LoongArch 指令集设计——单周期5条指令exp5

对应实验手册请参阅《LoongArch CPU设计实验》

NOTE:

  1. minicpu_env/miniCPU/目录下的代码功能不全,是有意为之,无需提issue修正。
  2. mycpu_env/myCPU/目录下的代码有功能错误,亦是有意为之,无需提issue修正。

================================================================================
实验安排简介

// dc_env
exp1 : 跑马灯实验。熟悉Vivado和FPGA实验环境基本使用技能。
exp2 : 寄存器堆仿真;
exp3 : 同步、异步 RAM 仿真、综合实现;
exp4 : 数字逻辑电路的设计与调试。

// minicpu_env
exp5 : 5条指令单周期CPU,跑斐波那契数程序,给RTL填空方式。

// mycpu_env - soc_dram i/f (distributed ram interface)
exp6 : 20条指令单周期CPU,测试规模缩减版func的n1~n20,给RTL找错误并修正。

// mycpu_env - soc_bram i/f (block ram interface)
exp7 : 20条指令五级流水CPU,不考虑hazard,测试插NOP的func的n1~n20,增量开发。
exp8 : 20条指令五级流水CPU,cancel解决control hazard,阻塞解决data hazard,测试
func的n1~n20,增量开发。
exp9 : 20条指令五级流水CPU,forward优化data hazard处理,测试func的n1~n20,增量
开发。
exp10 : 增加用户态运算类指令,测试func的n1~n36,增量开发。
exp11 : 增加用户态转移指令和除了ll.w、sc.w之外的用户态访存指令,测试func的n1~n46,
增量开发。
exp12 : 支持syscall例外,测试func的n1~n47,增量开发。
exp13 : 支持更多例外,测试func的n1~n58,增量开发。

// mycpu_env - soc_hs_bram i/f (handshaking block ram interface)
exp14 : CPU采用带握手机制的接口,测试func的n1~n58,增量开发。

// mycpu_env - soc_axi i/f (AXI bus interface)
exp15 : CPU采用AXI接口,外部固定延迟响应,测试func的n1~n58,增量开发。
exp16 : CPU采用AXI接口,外部随机延迟响应,测试func的n1~n58,增量开发。
exp18 : CPU集成TLB模块后并支持TLB相关指令和CSR,测试func的n1~n70,增量开发。
exp19 : CPU支持TLB MMU功能,测试func的n1~n72,增量开发。
exp21 : CPU实现指令Cache,测试func的n1~n72,增量开发。
exp22 : CPU实现数据Cache,测试func的n1~n72,增量开发。
exp23 : CPU支持CACOP指令,测试func的n1~n79,增量开发。

// mycpu_env - module_tlb
exp17 : TLB模块设计,非func测试,单独开发。

// mycpu_env - module_cache
exp20 : Cache模块设计,非func测试,单独开发。

5条指令

1. add_w


指令概述
在这里插入图片描述

2. addi_w

在这里插入图片描述
指令概述
在这里插入图片描述

3. ld_w

在这里插入图片描述
在这里插入图片描述

4. st_w

在这里插入图片描述
在这里插入图片描述

5. bne

在这里插入图片描述
在这里插入图片描述

填充代码
第一处代码
assign inst_add_w  = op_31_26_d[6'h00] & op_25_22_d[4'h0] & op_21_20_d[2'h1] & op_19_15_d[5'h00];
assign inst_addi_w = op_31_26_d[6'h00] & op_25_22_d[4'ha];
assign inst_ld_w   = op_31_26_d[6'h0a] & op_25_22_d[4'h2];
assign inst_st_w   = op_31_26_d[6'h0a] & op_25_22_d[4'h6];//在这里实现inst_st_w指令的译码
assign inst_bne    = op_31_26_d[6'h17];

第二处代码,这里不确定正确

assign src2_is_imm   = inst_bne|inst_addi_w|inst_ld_w|inst_st_w;//在这里实现立即数选择信号
assign res_from_mem  = inst_ld_w;
assign gr_we         = inst_add_w | inst_ld_w | inst_addi_w;
assign mem_we        = inst_st_w;
assign src_reg_is_rd = inst_bne | inst_st_w;
第三处代码
regfile u_regfile(
    .clk    (clk      ),
    .raddr1 (rf_raddr1         ),
    .rdata1 (rj_value),
    .raddr2 (rf_raddr2         ),
    .rdata2 (rkd_value),
    .we     (gr_we    ),
    .waddr  (rf_raddr2         ),
    .wdata  (rf_wdata )
    );//在空出的括号里完成引脚匹配

第四处代码
assign br_offs   = {i16[13:0],{18{1'b0}}};//在这里完成br_offs信号的生成
assign br_target = pc + br_offs;
assign rj_eq_rd  = (rj_value == rkd_value);
assign br_taken  = valid && inst_bne  && !rj_eq_rd;
assign nextpc    = br_taken?br_target:pc+{32'h0_0_0_4};//在这里实现nextpc信号的生成

assign imm      = {{20{i12[11]}},i12[11:0]};
assign alu_src1 = rj_value;
assign alu_src2 = rkd_value;//在这里实现alu_src2信号

assign alu_result = alu_src1+alu_src2;
第五处代码
assign alu_result = alu_src1+alu_src2;

assign data_sram_we    = mem_we;
assign data_sram_addr  = alu_result;
assign data_sram_wdata = rkd_value;

assign rf_wdata = alu_result;//在这里完成写回寄存器值的选择
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
龙芯的胡伟武在“2020年CCF全国计算机体系结构学术年会”上作报告:《指令系统的自主与兼容》时的PPT展示内容。这是在线观看时屏幕截图重新制作PPT。 内容总结: 1、LoongArch 是全新的指令集,不是在 MIPS 上做的扩展。包含基础指令 337 、虚拟机扩展 10 、二进制翻译扩展 176 、128 位向量扩展 1024 、256 位向量扩展 1018 ,共计 2565 原生指令。 2、LoongArch 的"指令格式"是 MIPS 的超集,仍为RISC且兼容MIPS指令格式,但二进制不同。大部分 MIPS 指令可以直接映射为 LoongArch 指令,且龙芯的编译器已经实现把 MIPS 汇编编译为 LoongArch 二进制。 3、龙芯提供基于 LoongArch 的 Linux 操作系统,在此操作系统中除了运行原生的 LoongArch 程序,还能通过翻译的方式兼容 MIPS、x86、ARM、RISC-V 这几种指令集的 Linux 程序。 4、龙芯的二进制翻译与 qemu 的软件翻译不同,龙芯是软硬件结合方式。qemu 软件跨体系翻译一般只有 5% ~ 20% 的性能,龙芯的翻译相对于 qemu 在整数运算方面有数倍提升,而在浮点运算方面有数十倍的性能提升。 5、翻译执行 MIPS 目标为 100% 的原生性能,翻译执行 ARM 目标为 90% 原生性能,翻译执行 x86 目标为 80% 原生性能,并可通过某种方式安装运行 Windows,对 Windows 的整体翻译执行目标为 70% 原生性能。 6、从当前已有的测试结果来看,把 C/C++ 代码编译为 MIPS 和 LoongArch 分别运行测试,LoongArch 比 MIPS 有近 17% 的性能提升,翻译执行 MIPS 平均性能在 100% 左右。 7、龙芯 2020 年之后生产的 CPU 都不再原生支持 MIPS,但因为可以 100% 翻译执行 MIPS,所以以前的 MIPS 生态仍然完全兼容,但以后会以发展 LoongArch 原生生态为主。 8、将会成功组建自主指令系统联盟,联盟成员免费使用 LoongArch 指令集,联盟成员可以免费获得龙芯的低于 ARM A53 性能的那些CPU核心设计,联盟成员之间不发生指令系统诉讼(防止Intel/ARM等挤进来,它们一旦加入就相当于x86/ARM指令集充公了)。
### 回答1: 单周期 CPU 设计与实现是一种基于单指令CPU 架构,它的特点是每个指令的执行时间相同,即一个时钟周期。这种设计简单易懂,但效率较低,因为每个指令都需要占用一个时钟周期,无法实现指令流水线和乱序执行等高级优化技术。 ### 回答2: 单周期 CPU 是计算机的一种设计方式,主要是为了实现简单而高效的执行过程。单周期 CPU 的核心思想是每一指令只需要完成一个时钟周期,可靠性高且可维护性好,每指令都有一个预分配的时钟周期,这种方法会带来额外的负担和延迟,同时还有占用额外资源的风险。而单指令 CPU 设计是在单周期 CPU 基础上的一种改进,它通过限制计算机的功能,使得每一指令都具有高度相似的指令格式和执行过程。这种设计方式,有很多的优点,使得它能够更加灵活适应各种不同的需求。 单指令 CPU 设计最重要的优点是它比较容易实现,因为所有指令都具有相似的执行过程,硬件设计也就比较简单,可以节省大量的成本和时间。同时,由于指令格式的统一,程序员将更容易编写出清晰和可读性较高的代码,也有助于减少不同指令间的对齐限制等问题。此外,由于单指令 CPU 可以根据需求动态配置,因此可以适应不同的应用环境,比如平面图形、音效处理等。因此,单指令 CPU 执行效率比较低,但它的灵活性却是非常好的。 对于单指令 CPU 的实现,主要需要考虑硬件的设计.硬件中要求处理器尽快完成运算,以达到更高的执行速度,同时要保证所耗费的位数不会影响运算结果。为了实现这些目标,有很多种方法可以用于设计和实现。计算机工程师可以借助数字逻辑、逆向工程、调试技术等一系列工具,较为轻松地完成实现。但是,由于单指令 CPU 的原理和设计都比较简单,可能无法满足更复杂的计算需求,在这种情况下,工程师会尝试更高级别的计算机设计技术,比如微处理器或高级计算系统,以实现更高性能的计算机系统。 总的来说,单指令 CPU 是一种比较特殊的设计方式,具有一定的优点和缺点,不同场景的计算需求也会影响该方法的实现方式。计算机设计师可以根据实际情况选择不同的设计策略,以满足不同的性能和实现需求。 ### 回答3: 随着计算机科技的不断进步,单周期CPU被认为是计算机结构设计的最基础单元之一。在单周期CPU中,每个指令在一个时钟周期内执行完成,因此称之为单指令CPU。接下来,我们将深入探讨单周期CPU设计和实现,并对其优缺点进行比较。 单指令CPU设计针对的是简单指令集架构。在这个架构中,每个指令都是通过单个指令来完成的。对于指令集中所包含的每个指令,单指令CPU均为其分配一个固定的时钟周期。但是这种方案的缺点在于,不同指令所需要的时钟周期数是不同的,因此,在执行某些指令时,CPU会在执行完其本身所需要的时钟周期之后等待更多的时钟周期,直到总时钟周期数等于该指令的时钟周期数,这会浪费很多时间。 此外,在单指令CPU中,所有指令均以相同的速率运行,即使某些指令可能需要更多的时间来完成。尽管如此,在多数情况下,单指令CPU的优点在于其设计简单、易于理解和实现。 当谈到单周期CPU的实现时,一般情况下它被分为五个主要的阶段,即指令获取、指令解码、执行操作、访问存储和写回。指令获取阶段的目的是从内存中获取将要执行的指令。在指令解码阶段,CPU会解码指令,理解其意义以及所需要的具体操作。在执行操作阶段,CPU需要根据指令类型执行各种不同的操作,如算术、逻辑和分支操作等。在访问存储阶段,CPU会根据指令类型读取或写入存储器。最后,在写回阶段,结果将会被写入通用寄存器,供后续的指令使用。 在单指令CPU的优缺点方面,由于其简单性,单指令CPU通常比多指令CPU更低成本。此外,由于其设计简单、易于理解和实现,单指令CPU在启动时通常需要很少的时间。然而,由于单指令CPU的每个指令都需要相同的时钟周期,因此在执行某些指令时效率可能会较低。 综上所述,单周期CPU设计和实现是计算机结构设计中最为基础的部分,但它并不是最优解。单指令CPU的优缺点主要取决于具体情况下所需求解的问题。如果要求计算机系统运行速度更快,关键在于将每个指令的执行时间限制在最短时间内。如果要求计算机系统设计更加简单和稳定,单指令CPU则是更适合的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的码泰君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值