中科大OJ Verilog 在线评测题解 106-107

博主跟随老师学习Verilog,记录中科大练习题答案。介绍了Q106控制器,包括其产生的各种控制信号及与各模块的关系,还给出输入输出格式和代码;同时阐述Q107 RISC-V单周期CPU,说明在顶层模块调用子模块实现单周期CPU,也给出输入输出格式和代码。

近跟着老师学习Verilog,做了中科大的练习题,将答案记录一下

Q106 控制器

题目描述

控制器模块负责产生各种控制信号。


与寄存器堆模块相关的:

1.rf_wr_en:1位使能信号,连接到寄存器堆的写使能端口(WE)。

查RISC-V手册可得,需要写寄存器的指令有U型指令,J型指令,I型指令,R型指令。
2.rf_wr_sel:2位选择信号,控制寄存器堆写数据的选择。其与指令的关系如下:


与pc模块相关的:
do_jump:一位控制信号,当指令为jalr或者jal时为1。当指令为jal或者jalr或者B型指令且满足分支条件时,pc模块的JUMP信号为1。


与分支跳转模块相关的:
BrType:三位,指明分支指令类型。由于之前我们为了提高代码容错率,没有直接使用B型指令的功能码作为控制信号,而是设置BrType为0时不进行操作,所以信号与指令对应如下:


与ALU模块相关:
1.alu_a_sel:ALU模块SrcA端口的选择信号;
2.alu_b_sel:ALU模块SrcB端口的选择信号;

通过查RISC-V中文手册可得:
指令为R型或I型或S型时,ALU模块输入SrcA端口连接寄存器输出端口RD1,即ALU模块其中一个操作数为寄存器rs1中的值;
指令为R型时,ALU模块输入SrcB端口连接寄存器输出端口RD2,即ALU模块另一个操作数为寄存器rs2中的值;
(ps:并不是说指令里有rs2就代表alu_b_sel为0,如B型指令里有rs2,但比较过程是在branch模块进行的,不是经过ALU模块)
3.alu_ctrl:四位,控制ALU模块运算类型的信号,具体如下:

(ps:load型指令即lb,lh,lw,lbu,lhu)


与存储器模块相关:
1.dm_rd_ctrl:三位,指明数据存储器读方式。具体如下:

2.dm_wr_ctrl:两位,指明数据存储器写方式。具体如下:

输入格式

32位的指令inst

输出格式

1.位宽为1bit的rf_wr_en:寄存器堆的写使能信号 2.位宽为2bit的rf_wr_sel:输入寄存器堆的数据的选择信号 3.位宽为1bit的do_jump:无条件跳转信号 4.位宽为3bit的BrType:分支指令类型的控制信号 5.位宽为1bit的alu_a_sel:ALU模块SrcA端口的选择信号 6.位宽为1bit的alu_b_sel:ALU模块SrcB端口的选择信号 7.位宽为4bit的alu_ctrl:ALU模块运算类型的控制信号 8.位宽为3bit的dm_rd_ctrl:存储器读类型的控制信号 9.位宽为2bit的dm_wr_ctrl:存储器写类型的控制信号

代码

module top_module(
input     [31:0]  inst,
output            rf_wr_en,
output reg    [1:0]   rf_wr_sel,
output            do_jump,
output reg    [2:0]   BrType,
output            alu_a_sel,
output            alu_b_sel,
output reg    [3:0]  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值