基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十一章:数据通路

简介: 基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十一章:数据通路

1多选(3分)

多周期数据通路实验电路结构包括:

得分/总分

A.标志寄存器PSW,用来保存运算结果产生的标志位SF,ZF,OF,CF

B.数据寄存器RF,用来保存提供给ALU的运算操作数X

C.数据寄存器RX,用来保存ALU的运算结果F

D.数据开关DATA,给该实验电路提供操作数

正确答案:A、D你选对了

2多选(3分)

多周期数据通路执行下面的操作后,寄存器__________的值是__________。

DATA DATAoe INDEX GRSce GRSoe RFoe CLK
1001 1 01 1 0 0 产生一个

得分/总分

A.R1

B.9

C.R2

D.R3

正确答案:A、B

3多选(3分)

多周期数据通路执行下面的操作后,寄存器_________的值是_________。

DATA DATAoe INDEX GRSce GRSoe RFoe CLK
1100 1 10 1 0 0 产生一个

得分/总分

A.C

B.R2

C.0

D.6

正确答案:A、B

4多选(3分)

在多周期数据通路中执行下面的操作,操作过程中注意观察寄存器RX,寄存器RF,标志寄存器PSW,以及通用寄存器组GRS内相应寄存器的值,这八步操作实现的功能是__________.

DATA DATAoe INDEX GRSce GRSoe RXce ALU_OP PSWce RFce RFoe CLK
①0111 1 00 1 0 0 0000 0 0 0 产生一个
②1000 1 01 1 0 0 0000 0 0 0 产生一个
③1010 1 00 0 0 1 0000 0 0 0 产生一个
④0000 0 00 0 1 0 0001 1 1 0 产生一个
⑤0000 0 10 1 0 0 0000 0 0 1 产生一个
⑥0001 1 00 0 0 1 0000 0 0 0 产生一个
⑦0000 0 01 0 1 0 1011 1 1 0 产生一个
⑧0000 0 11 1 0 0 0000 0 0 1 产生一个

得分/总分

A.双倍字长加法00011010+10000111

B.双倍字长加法10100001+01111000

C.第⑤步骤完成后:

RX的值是A,RF的值是1,标志寄存器的值是4,R2寄存器的值是1。

D.第⑧步骤完成后:

RX的值是1,RF的值是A,标志寄存器的值是8,R3寄存器的值是A。

正确答案:A、D

5多选(3分)

在单周期数据通路中,将数据1001存入R1寄存器,在按下时钟clk之前,需要的操作包括()

得分/总分

A.操作MUX多路器的控制信号,选择0号通道的值输出

B.WE=1

C.操作MUX多路器的控制信号,选择1号通道的值输出

D.RA2=00

正确答案:B、C

6多选(3分)

在单周期数据通路中,完成R1+R2->R3,在按下时钟clk前,需要的操作包括()

得分/总分

A.WA=11

B.操作MUX多路器的控制信号,选择0号通道的值输出0.75/3.00

C.WE=1

D.RA1=01

正确答案:A、B、C、D

7填空(2分)

多周期数据通路执行下面的操作,操作过程中注意观察寄存器RX,寄存器RF,标志寄存器PSW,以及通用寄存器组GRS内相应寄存器的值,③④⑤ 这三步操作实现的功能是__________(R1+R2->R3 / R1-R2->R3 / R1&R2->R3 / R1->R3 / (R1)/2->R3 / (R1)2->R3 )。
符号说明:’+‘加法;’-‘减法;’&‘与;’/‘除法;’
'乘法

DATA DATAoe INDEX GRSce GRSoe RXce ALU_OP PSWce RFce RFoe CLK
① 1001 1 01 1 0 0 0000 0 0 0 产生一个
② 1100 1 10 1 0 0 0000 0 0 0 产生一个
③ 0000 0 01 0 1 1 0000 0 0 0 产生一个
④ 0000 0 10 0 1 0 0001 1 1 0 产生一个
⑤ 0000 0 11 1 0 0 0000 0 0 1 产生一个

得分/总分

正确答案:R1+R2->R3

8填空(2分)

多周期数据通路执行下面的操作,操作过程中注意观察寄存器RX,寄存器RF,标志寄存器PSW,以及通用寄存器组GRS内相应寄存器的值,③④⑤ 这三步操作实现的功能是__________(R1+R2->R3 / R1-R2->R3 / R1&R2->R3 / R1->R3 / (R1)/2->R3 / (R1)*2->R3 )。

DATA DATAoe INDEX GRSce GRSoe RXce ALU_OP PSWce RFce RFoe CLK
① 1001 1 01 1 0 0 0000 0 0 0 产生一个
② 1100 1 10 1 0 0 0000 0 0 0 产生一个
③ 0000 0 01 0 1 1 0000 0 0 0 产生一个
④ 0000 0 00 0 0 0 0000 0 1 0 产生一个
⑤ 0000 0 11 1 0 0 0000 0 0 1 产生一个

正确答案:R1->R3

9填空(2分)

多周期数据通路执行下面的操作,操作过程中注意观察寄存器RX,寄存器RF,标志寄存器PSW,以及通用寄存器组GRS内相应寄存器的值,③④⑤ 这三步操作实现的功能是__________(R1+R2->R3 / R1-R2->R3 / R1&R2->R3 / R1->R3 / (R1)/2->R3 / (R1)*2->R3 )。

DATA DATAoe INDEX GRSce GRSoe RXce ALU_OP PSWce RFce RFoe CLK
① 1001 1 01 1 0 0 0000 0 0 0 产生一个
② 1100 1 10 1 0 0 0000 0 0 0 产生一个
③ 0000 0 01 0 1 1 0000 0 0 0 产生一个
④ 0000 0 00 0 0 0 0110 0 1 0 产生一个
⑤ 0000 0 11 1 0 0 0000 0 0 1 产生一个

得分/总分

正确答案:(R1)/2->R3

10填空(2分)

多周期数据通路,写出R1+R2->R3的运算流程(填空时,操作之间用#隔开,例如R1->A#ADD#置PSW)

  1. R1->RX;
  2. ______________________________;
  3. RF->R3。
    (R1->RX / R2->RX / R1->ALU.Y / R2->ALU.Y / ADD/ALU->RF / 置PSW /RF->R1 / RF->R2 / RF->R3 /RF->RX)
    得分/总分
    正确答案:R2->ALU.Y#ADD#ALU->RF#置PSW

11填空(2分)

多周期数据通路,写出(R1)/2->R3的运算流程(填空时,操作之间用#隔开,例如R1->A#ADD#置PSW)

1.R1->A;

2.______________________________;

3.RF->R3。

(R1->RX / R2->RX / R1->ALU.Y / R2->ALU.Y / ADD/ ASR/ SHL/ALU->RF / 置PSW /RF->R1 / RF->R2 / RF->R3 /RF->RX)

得分/总分

正确答案:ASR#ALU->RF

12填空(2分)

多周期数据通路,写出R1->R3的运算流程(填空时,操作之间用#隔开,例如R1->A#ADD#置PSW)

1.R1->A;

2.______________________________;

3.RF->R3。

(R1->RX / R2->RX / R1->ALU.Y / R2->ALU.Y / ADD/ ASR/ SHL/ALU->RF / 置PSW /RF->R1 / RF->R2 / RF->R3 /RF->RX)

得分/总分

正确答案:ALU->RF

13填空(2分)

在单周期数据通路中,因为寄存器堆设计____(R0/R1/R2/R3)寄存器的值恒为0,因此可以通过ALU,令DATA加上该寄存器的值,将DATA传送到寄存器堆的写端口。

得分/总分

R0

2.00/2.00

正确答案:R0

14填空(2分)

根据实验结果,实现同样的运算R1+R2->R3,在多周期数据通路中,需要3个时钟周期,在单周期数据通路中,需要____个时钟周期。

得分/总分

1

2.00/2.00

正确答案:1

实验代码

不含clk的数据通路

`default_nettype none 
module VirtualBoard (
    input  logic  CLOCK,      // 10 MHz Input Clock 
    input  logic [19:0] PB,   // 20 Push Buttons, logical 1 when pressed
    input  logic [35:0] S,    // 36 Switches
    output logic [35:0] L,    // 36 LEDs, drive logical 1 to light up
    output logic  [7:0] SD7,  // 8 common anode Seven-segment Display
    output logic  [7:0] SD6,
    output logic  [7:0] SD5,
    output logic  [7:0] SD4,
    output logic  [7:0] SD3,
    output logic  [7:0] SD2,
    output logic  [7:0] SD1,
    output logic  [7:0] SD0
);
/********* Seven-segment decoder instantiation **********/
logic [3:0] HD[7:0];  // 8 hexadecimal display 
SevenSegDecode ssdecode_inst7(.iData(HD[7]), .oSeg(SD7));
SevenSegDecode ssdecode_inst6(.iData(HD[6]), .oSeg(SD6));
SevenSegDecode ssdecode_inst5(.iData(HD[5]), .oSeg(SD5));
SevenSegDecode ssdecode_inst4(.iData(HD[4]), .oSeg(SD4));
SevenSegDecode ssdecode_inst3(.iData(HD[3]), .oSeg(SD3));
SevenSegDecode ssdecode_inst2(.iData(HD[2]), .oSeg(SD2));
SevenSegDecode ssdecode_inst1(.iData(HD[1]), .oSeg(SD1));
SevenSegDecode ssdecode_inst0(.iData(HD[0]), .oSeg(SD0));
/** The input port is replaced with an internal signal **/
wire reset  = PB[0];
wire clk    = PB[1];
wire [3:0] DATA  = S[3:0];
wire [1:0] INDEX = S[5:4];
wire RFoe   = S[6];
wire GRSoe = S[7];
wire DATAoe= S[8];
wire [3:0] ALUop = S[12:9];
// wire    = S[13];
wire RFce = S[14];
wire PSWce= S[15];
wire GRSce= S[16];
wire RXce = S[17];
/************* The logic of this experiment *************/
//各模块间连线信号
wire [3:0] BUS, RX_Q, F, RF_Q, GRS_Q;
wire [3:0] FLAG, PSW_Q;
//模块实例
ALU #(4) ALU_inst(.iOp(ALUop), .iX(RX_Q), .iY(BUS), .oF(F), .oFlag(FLAG), .Cin(PSW_Q[0]));
GRS #(4) GRS_inst(.iD(BUS), .oQ (GRS_Q), .Load(GRSce), .Clk(clk), .Index(INDEX));
DataReg #(4) RX_inst(.oQ(RX_Q), .iD(BUS), .Clk(clk), .Load(RXce), .Reset(reset));
DataReg #(4) RF_inst(.oQ(RF_Q), .iD(F), .Clk(clk), .Load(RFce), .Reset(reset));
DataReg #(4) PSW_inst(.oQ(PSW_Q), .iD(FLAG), .Clk(clk), .Load(PSWce ), .Reset(reset));
//三态缓冲器逻辑描述
assign BUS = RFoe   ? RF_Q  : 4'bzzzz;
assign BUS = GRSoe  ? GRS_Q : 4'bzzzz;
assign BUS = DATAoe ? DATA  : 4'bzzzz;
/****** Internal signal assignment to output port *******/
assign L[25:22] = PSW_Q;
assign L[21:18] = FLAG;
assign HD[5] = RX_Q;
assign HD[4] = BUS;
assign HD[3] = GRS_Q;
assign HD[1] = RF_Q;
assign HD[0] = F;
endmodule

含clk的数据通路

`default_nettype none 
module VirtualBoard (
    input  logic  CLOCK,      // 10 MHz Input Clock 
    input  logic [19:0] PB,   // 20 Push Buttons, logical 1 when pressed
    input  logic [35:0] S,    // 36 Switches
    output logic [35:0] L,    // 36 LEDs, drive logical 1 to light up
    output logic  [7:0] SD7,  // 8 common anode Seven-segment Display
    output logic  [7:0] SD6,
    output logic  [7:0] SD5,
    output logic  [7:0] SD4,
    output logic  [7:0] SD3,
    output logic  [7:0] SD2,
    output logic  [7:0] SD1,
    output logic  [7:0] SD0
);
/********* Seven-segment decoder instantiation **********/
logic [3:0] HD[7:0];  // 8 hexadecimal display 
SevenSegDecode ssdecode_inst7(.iData(HD[7]), .oSeg(SD7));
SevenSegDecode ssdecode_inst6(.iData(HD[6]), .oSeg(SD6));
SevenSegDecode ssdecode_inst5(.iData(HD[5]), .oSeg(SD5));
SevenSegDecode ssdecode_inst4(.iData(HD[4]), .oSeg(SD4));
SevenSegDecode ssdecode_inst3(.iData(HD[3]), .oSeg(SD3));
SevenSegDecode ssdecode_inst2(.iData(HD[2]), .oSeg(SD2));
SevenSegDecode ssdecode_inst1(.iData(HD[1]), .oSeg(SD1));
SevenSegDecode ssdecode_inst0(.iData(HD[0]), .oSeg(SD0));
/** The input port is replaced with an internal signal **/
wire reset  = PB[0];
wire clk    = PB[1];
wire [1:0] RA2  = S[3:2];
wire [1:0] RA1  = S[1:0];
wire [1:0] WA=S[5:4];
wire WE   = S[6];
wire [3:0] ALUop = S[11:8];
wire M0 = S[14];
wire S1 = S[13];
wire S0 = S[12];
wire RXce = S[17];
/************* The logic of this experiment *************/
//各模块间连线信号
wire [3:0] RD1;
wire [3:0] RD2;
wire [3:0] FLAG;
wire [3:0] SSD3;
wire [3:0] SSD0;
//模块实例
sALU #(4) ALU_inst(.iCtrl(ctrl), .iX(RD1), .iY(SSD0), .oF(SSD3), .oFlag(FLAG));
RegFile #(4) GRS_inst(.iRA1(RA1),.iRA2(RA2),.iWA(WA),.iWE(WE),.Clk(clk),.iWD(SSD3),.oRD1(RD1),.oRD2(RD2));
//三态缓冲器逻辑描述
wire [2:0] ctrl=S[14:12];
always_comb
begin
  case (S[7])
    1'b1: SSD0=ALUop;
    1'b0: SSD0=RD2;
    default: SSD0={4{1'bx}};
  endcase
end
/****** Internal signal assignment to output port *******/
assign HD[3] = SSD3;
assign HD[2] = RD2;
assign HD[1] = RD1;
assign HD[0] = SSD0;
assign L[21:18]=FLAG;
endmodule


目录
打赏
0
0
0
0
54
分享
相关文章
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
随着 Llama2 的开源,以及通义千问、百川、智谱等国内大模型的问世,很多用户有了本地部署去尝试大模型的需求,然而硬件的需求阻碍了很多人的尝试,并不是所有人都拥有一块英伟达显卡的,所以 Llama2 问世不久,大神 Andrej Karpathy 的一个 weekend project 爆火——llama2.c。
魔搭+Xinference 平台:CPU,GPU,Mac-M1多端大模型部署
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
99 13
|
9月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
144 1
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
人工智能平台PAI产品使用合集之如何在CPU服务器上使用PAIEasyRec进行分布式训练
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
国产化之虚拟ARM64-CPU安装银河麒麟操作系统
国产化之虚拟ARM64-CPU安装银河麒麟操作系统
1729 0
ICS TRIPLEX T8461 创建额外的虚拟或逻辑CPU
ICS TRIPLEX T8461 创建额外的虚拟或逻辑CPU
121 0
ICS TRIPLEX T8461 创建额外的虚拟或逻辑CPU
实验一:查看CPU和内存,用机器指令和汇编指令编程
实验一:查看CPU和内存,用机器指令和汇编指令编程
254 0
阿里云服务器的vCPU是什么意思?虚拟CPU?
阿里云服务器的vCPU是什么意思?虚拟CPU?阿里云服务器vCPU和CPU是什么意思?CPU和vCPU有什么区别?一台云服务器ECS实例的CPU选项由CPU物理核心数和每核线程数决定,CPU是中央处理器,一个CPU可以包含若干个物理核,通过超线程HT(Hyper-Threading)技术可以将一个物理核变成两个逻辑处理核。vCPU(virtual CPU)是ECS实例的虚拟处理核。云服务器吧来详细说下阿里云服务器CPU和vCPU的区别:
2494 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
317 0