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

news2025/1/23 17:27:28

对应实验手册请参阅《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,{16{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;//在这里完成写回寄存器值的选择

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1101967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

E053-web安全应用-Brute force暴力破解初级

课程分类: web安全应用 实验等级: 中级 任务场景: 【任务场景】 小王接到磐石公司的邀请,对该公司旗下的网站进行安全检测,经过一番检查发现该论坛的后台登录页面上可能存在万能密码漏洞,导致不知道账号密码也能登录后台&am…

Windows消息 队列

1、 Windows消息机制 Windows是一个消息驱动的操作系统,消息是用一个常量标识符来标记,并且有两个32Bit的消息附加信息。单击鼠标、敲击键盘,都会通过电脑外设向系统发送特定的中断信号,这个中断信息在操作系统中会转化为一个消息…

leetcode每日一题复盘(10.16~10.22)

leetcode 501 二叉搜素树中的众数 对二叉搜索树的性质还不是很熟悉,不懂得利用其性质,做题没有方法论,这是暴露出来的问题,明天重做一下98,530,501这三个题,再进行总结

33 机器学习(一):特征工程

文章目录 机器学习需要用到的包的介绍机器学习做什么深度学习做什么常见的概念 数据介绍数据类型数据的来源数据的构成 特征工程one-hot编码接口集特征提取DictVectorizerCountVectorizerTfidfVectorizer 特征处理归一化 MinMaxScaler标准化 StandardScaler标准化和归一化的对比…

mmdetection及mmengine源码结构

python中的装饰函数 所谓的函数修饰符,就是在函数外面再套一层函数, 装饰函数可以接受不同的参数类型的函数传入,对其进行装饰加工; 在需要装饰的函数前面装饰函数即可; 这样子做的好处在于代码的复用,比…

使用interrupt()中断线程

示例一 : public class Test01 extends Thread {Overridepublic void run() {while (true) {}}public static void main(String[] args) {Test01 t new Test01();t.start();try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.prin…

家用洗地机哪个牌子最好用?质量最好的洗地机推荐

提到家务清洁,相信应该是很多宝妈头疼的事儿,不仅工作量打,耗时又耗力,拥有一款完美的清洁工具,那讲大大的提升幸福指数,而洗地机便是当下的智能清洁神器之一。那么家用洗地机哪个牌子最好用,质…

竞赛 深度学习YOLO图像视频足球和人体检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非…

使用Nginx实现采集端和数据分析平台的数据加密传输

1. 需求描述 目前鸿鹄暴露出来的重要ports如下表: 在实际的生产环境中,结合我司的使用场景,需要在鸿鹄前端安装proxy,用以解决如下两个问题: 1.1 实现http到https的强制跳转 企业环境中,一般会关闭http 80端…

精准定位——MySQL日志学习的一天【错误、二进制、查询、慢查询】

MySQL 日志是记录 MySQL 数据库服务器运行过程中的各种活动和事件的文件。它们对于监控、故障排查、性能优化和数据恢复等方面都非常重要。 回顾一下Linux中查看文件的指令操作 cat 命令: cat 命令用于将文件的内容一次性输出到终端。它的主要功能是将文件连接起来…

在全志R128上启用USB ADB以及无线ADB配置方法

首先在FreeRTOS的环境下,选择r128_c906_pro: source envsetup.sh lunch_rtos r128s2_pro_c906USB ADB的配置比较常规,注意以下几个驱动的勾选 usb device驱动adb gadget驱动adbd应用 运行menuconfig,选择对应的驱动以及软件包&…

Docker安装ES7.14和Kibana7.14(无账号密码)

一、Docker安装ES7.14.0 1、下载镜像 docker pull elasticsearch:7.14.0 2、docker安装7.14.0 mkdir -p /usr/local/elasticsearch/config mkdir -p /usr/local/elasticsearch/data chmod 777 -R /usr/local/elasticsearch/ echo "http.host: 0.0.0.0" >> /u…

linux下 u2net tensorrt模型部署

TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署 TensorRT系列之 Linux下 yolov5 tensorrt模型加速…

搭建Redis哨兵集群

目录 一、集群结构二、准备实例和配置三、启动四、测试 一、集群结构 这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图: 三个sentinel实例信息如下: 节点IPPORTs1192.168.239.1027001s2192.168.239.1027002s3…

RS232协议、RS485协议

RS232、RS485总线并不是单独的协议,这两种是依赖于串口的协议,这可以让他的抗干扰能力更强、提升传输速度。统一了接口标准。编程不受影响 2.RS232协议 RS232->TTL电平 常用电平转换芯片Max232 3.RS485协议 RS485采用差分信号进行传输&#xff0…

MyBatis进行单表多表查询以及其中的${}涉及的SQL注入

目录 回顾: 参数占位符#{}和${} ${}唯一使用地方 使用${}造成的SQL注入漏洞 like查询 mapper中接收结果的参数 resultType和resultMap​编辑 多表查询 回顾: 参数占位符#{}和${} #{} 占位符语法通常用于模板引擎或动态查询语句中。它是一种更加安全的…

C++产生未定义的行为的原因分析

前言 最近一直在做QT开发,编程环境是VS2017和QT5.11.2 经常遇到的问题就是,在VS中调试程序,前面都是正常运行的,但是当关闭窗口,退出程序的时候,VS会抛出一个异常 “未加载ntdll.pdb,触发了一…

Nmap渗透测试指南之防火墙/IDS逃逸、信息搜集

Nmap渗透测试指南之防火墙/IDS逃逸、信息搜集 一. 防火墙/IDS逃逸本章知识点本章选项一 .关于防火墙/IDS二. 报文分段三. 指定偏移大小四. IP欺骗五. 源地址欺骗六. 源端口欺骗七. 指定发包长度八. 目标主机随机排序九. MAC地址欺骗二. 信息收集本章知识点本章脚本一. 信息搜集…

iOS代码混淆工具推荐:IPA Guard详细介绍

iOS代码混淆工具推荐:IPA Guard详细介绍 目录 摘要: 引言 正文 1. IPA Guard概述 2. IPA Guard的功能特性 3. IPA Guard的混淆模式 4. 支持的语言 5. 使用场景 总结 参考资料 总结 参考资料 摘要: 了解并选择合适的iOS代码混淆工…

python 深度学习 解决遇到的报错问题7

目录 一、ValueError: unsupported pickle protocol: 5 二、报错protobuf 三、AttributeError: The vocab attribute was removed from KeyedVector in Gensim 4.0.0 四、ModuleNotFoundError: No module named cartopy 五、ImportError: cannot import name COMMON_SAFE_A…