基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器

简介: 基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器

1多选(3分)

选出正确的锁存器描述

得分/总分

A.

module Latch
( input D,E,
output reg Q);
always@(E or D)
if(E==1)
Q=D;
else
Q=0;
endmodule

B.

module Latch
( input D,E,
output reg Q);
always@(E or D)
if(E==1)
Q=D;
endmodule

C.

module Latch
( input D,E,
output reg Q);
always_latch
if(E)
Q=D;
endmodule

D.

module Latch
( input D,E,
output reg Q);
always@(E or D)
if(E==1)
Q=D;
else
Q=Q;
endmodule

正确答案:B、C、D

2多选(3分)

‎选出正确的触发器描述

得分/总分

A.

module D_FF
( input D,Clock,
 output reg Q);
 always_ff
   Q <= D;   
endmodule

B.

module D_FF
( input D,Clock,
 output reg Q);
 always@(Clock,D)
   Q <= D;   
endmodule

C.

module D_FF
( input D,Clock,
 output reg Q);
 always_ff@(posedge Clock)
   Q <= D;   
endmodule

D.

module D_FF
( input D,Clock,
 output reg Q);
 always@(posedge Clock)
   Q <= D;   
endmodule

正确答案:C、D

3多选(3分)

‌选出正确的带复位控制的触发器

得分/总分

A.

module D_FF
( input D,Clock,reset,
 output reg Q);
 always@(posedge Clock or  reset)
  if ( reset==0)
   Q <=0;
   else
   Q <=D; 
endmodule

B.

module D_FF
( input D,Clock,reset,
 output reg Q);
 always@(posedge Clock or posedge reset)
  if ( reset==1)
   Q <=0;
  else
   Q <=D; 
endmodule

C.

module D_FF
( input D,Clock,reset,
 output reg Q);
 always@(posedge Clock)
  if ( reset==1)
   Q <=0;
   else
   Q <=D; 
endmodule

D.

module D_FF
( input D,Clock,reset,
 output reg Q);
 always@(posedge Clock or posedeg reset)
  if ( reset==0)
   Q <=0;
   else
   Q <=D; 
endmodule

正确答案:B、C

4多选(3分)

选出具有使能控制的触发器或寄存器

得分/总分

A.

module D_ff
(  input D,CLK,
 output reg Q );
 always@(posedge CLK)
  begin
      Q <= D;
   end 
endmodule

B.

module D_ff
(  input CLK,load,
 input [3:0] D,
 output reg [3:0] Q );
 always@(posedeg CLK)
  begin  
    if (load)
      Q <= D;
   end 
endmodule

C.

module D_ff
(  input D,CLK,En,
 output reg Q );
 always@(posedge CLK)
  begin  
    if (En)
     Q <= D;
   end 
endmodule

D.

module D_ff
(  input D,CLK,En,
 output reg Q );
wire gateclk;
assign gateclk=(En&CLK);
 always@(posedge GATECLK)
  begin  
    if (En)
      Q < =D;
   end 
endmodule

正确答案:B、C、D

5多选(3分)

下面两段代码中信号in,q1,q2和q3的初值分别为0,1,2和3,那么经过1个时钟周期后,always块1中q3的值变成_________,always块2中q3的值变成________。

程序块1

always @(posedge clk)   
 begin     
 q1 = in; 
 q2 = q1; 
 q3 = q2;  
 end 

程序块2

always @(posedge clk)   
 begin     
 q1  <= in;     
 q2  <= q1; 
 q3  <= q2;  
 end

得分/总分

A.always块1中q3的值变成0

B.always块2中q3的值变成0

C.always块2中q3的值变成2

D.always块1中q3的值变成2

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

6判断(2分)

同步复位和异步复位的区别是是否需要等待时钟

只要复位信号有效,触发器立即清零,无需等待时钟触发边沿到来的是同步复位;

复位信号有效,并且时钟的有效边沿到来时,才能清零的是异步复位。

得分/总分

A.×

B.√

正确答案:A

解析:同步复位必须等待时钟信号到来

7判断(2分)

复位通常是清零,也时候也会置1,主要是使触发器处于一个确定的初始状态

得分/总分

A.√

B.×

正确答案:A

8判断(2分)

阻塞赋值适用于描述电平敏感的电路,例如组合逻辑电路和锁存器;

非阻塞赋值适用于描述边沿敏感的电路,例如触发器;

当输出没有反馈到输入时,两者没有区别,

一个语句块内可以同时使用阻塞赋值和非阻塞赋值。

得分/总分

A.√

B.×

正确答案:B

解析:一个语句块内只能使用一种类型的赋值语句

9判断(2分)

以下描述语句得到的结果一定是 a=1,b=1,c=1

begin

a <=1;

b <=a;

c <=b;

end

得分/总分

A.×

B.√

正确答案:A

解析:=是阻塞赋值,如果使用=,则结果一定是a=1,b=1,c=1; <=是非阻塞赋值,除了a=1,b会被赋值为a前一刻的值,c会被赋值为b前一刻的值

10判断(2分)

寄存器就是触发器,或者説是由触发器构成的。

得分/总分

A.√

B.×

正确答案:A

11判断(2分)

锁存器对脉冲电平敏感,在特定输入脉冲电平(高电平或低电平)作用下随输入改变状态;

触发器对脉冲边沿敏感,在时间脉冲的上升沿或下降沿变化瞬间改变状态。

(考察锁存器和触发器的区别)

得分/总分

A.√

B.×

正确答案:A

12填空(2分)

使用远程实验平台虚拟面板验证单端口寄存器堆的功能

寄存器能够装入数据的条件是时钟使能信号Load为________(0/1)并且________(有/没有)时钟上升沿。 如果Load=0,有时钟上升沿,寄存器的内容将________(更新/保持不变)。

注意,三个填空的答案之间用#隔开,例如:0#有#更新

得分/总分

1#有#保持不变

2.00/2.00

正确答案:1#有#保持不变

13填空(2分)

‌使用远程实验平台虚拟面板验证单端口寄存器堆的功能

执行下面的写操作操作,给寄存器堆内各个寄存器写入相应的值,完成后,寄存器R2的值应为__________(5/6/7/8)。

‌D INDEX Load CLK
‌0101 00 1 产生一个
‌0110 01 1 产生一个
‌0111 10 1 产生一个
‌1000 11 1 产生一个

得分/总分

7

2.00/2.00

正确答案:7

14填空(2分)

使用远程实验平台虚拟面板验证单端口寄存器堆的功能

读出各个寄存器的值,比较与写操作中保存在寄存器中的值是否一致。单端口寄存器读操作_________(需要/不需要)等待时钟到来。单端口寄存器_________(可以/不可以)同时写入和读出不同寄存器的值,因为它读操作和写操作地址端口index是________(独立的/共用的)。

得分/总分

不需要#不可以#共用的

2.00/2.00

正确答案:不需要#不可以#共用的

15填空(2分)

‌使用远程实验平台虚拟面板验证三端口寄存器堆的功能

执行下面的写操作操作,给寄存器堆内各个寄存器写入相应的值,完成后, 读出各个寄存器的值,比较与写操作中保存在寄存器中的值是否一致, 寄存器R3的值应为__________(5/6/7/8)。

D WA WE CLK
‌0101 00 1 产生一个
‍0110 01 1 产生一个
‌0111 10 1 产生一个
‌1000 11 1 产生一个

得分/总分

8

2.00/2.00

正确答案:8

16填空(2分)

使用远程实验平台虚拟面板验证三端口寄存器堆的功能

三端口寄存器 读操作的地址端口是________(WA/RA),写操作的地址端口是________(WA/RA),即读操作的和写操作的地址端口WE是_________(独立的/共用的)。

注意,三个填空的答案之间用#隔开,例如:0#有#更新

得分/总分

RA#WA#独立的

2.00/2.00

正确答案:RA#WA#独立的

17填空(2分)

使用远程实验平台虚拟面板验证三端口寄存器堆的功能

该三端口寄存器_________(可以/不可以)在写入_________(1/2)个寄存器的同时读出__________(1/2)个寄存器的值。

得分/总分

可以#1#2

2.00/2.00

正确答案:可以#1#2

实验代码

`default_nettype none 
module DataReg
#(parameter N = 4)
(   output reg [N-1:0] oQ,
    input wire [N-1:0] iD,
    input wire Clk,
    input wire Load,
    input wire Reset
);
always @(posedge Clk or posedge Reset)
begin
  if (Reset)
    oQ <= 0;  
  else if (Load)
    oQ <= iD;
end
endmodule
`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 clk    = PB[1];
wire [1:0] WA = S[5:4];
wire WE = S[6];
wire [3:0] WD = S[11:8];
wire [1:0] RA1=S[1:0];
wire [1:0] RA2=S[3:2];
/************* The logic of this experiment *************/
localparam N = 4;
// 2-4 decode
logic load3, load2, load1, load0;
always_comb begin
    if (WE)
        case (WA)
            2'b00: {load3, load2, load1, load0} = 4'b0001;
        2'b01: {load3, load2, load1, load0} = 4'b0010;
        2'b10: {load3, load2, load1, load0} = 4'b0100;
        2'b11: {load3, load2, load1, load0} = 4'b1000; 
            /*-
                这里将译码器补充完整
                                                       -*/
            default: {load3, load2, load1, load0} = 4'bx;
        endcase
    else
        {load3, load2, load1, load0} = 4'b0000;
end
// register instantiation
logic [N-1:0] R0_Q, R1_Q, R2_Q, R3_Q;
DataReg #(N) R0(.oQ(R0_Q), .iD(WD), .Clk(clk), .Load(load0), .Reset(1'b0));
DataReg #(N) R1(.oQ(R1_Q), .iD(WD), .Clk(clk), .Load(load1), .Reset(1'b0));
DataReg #(N) R2(.oQ(R2_Q), .iD(WD), .Clk(clk), .Load(load2), .Reset(1'b0));
DataReg #(N) R3(.oQ(R3_Q), .iD(WD), .Clk(clk), .Load(load3), .Reset(1'b0));
/*-
    这里实例化其余的寄存器
                                                                          -*/
// 4-1 MUX
logic  [N-1:0] RD1;
logic  [N-1:0] RD2;
//logic  [N-1:0] GRS_Q;
 always_comb begin
  case (RA1)
    2'b00 : RD1=R0_Q;
    2'b01 : RD1=R1_Q;
    2'b10 : RD1=R2_Q;
    2'b11 : RD1=R3_Q;
    default : RD1=4'bx;
  endcase
  case (RA2)
    2'b00 : RD2=R0_Q;
    2'b01 : RD2=R1_Q;
    2'b10 : RD2=R2_Q;
    2'b11 : RD2=R3_Q;
    default : RD1=4'bx;
  endcase
end
/*
 always_comb
  case (Index)
    2'b00 : GRS_Q=R0_Q;
    2'b01 : GRS_Q=R1_Q;
    2'b10 : GRS_Q=R2_Q;
    2'b11 : GRS_Q=R3_Q;
    default : GRS_Q=4'bx;
  endcase
*/
/****** Internal signal assignment to output port *******/
assign HD[0] = R0_Q;
assign HD[1] = R1_Q;
assign HD[2] = R2_Q;
assign HD[3] = R3_Q;
assign HD[4] = RD1;
assign HD[5] = RD2;
//assign HD[4] = GRS_Q;
assign L[0] = load0;
assign L[1] = load1;
assign L[2] = load2;
assign L[3] = load3;
endmodule


目录
相关文章
|
7月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
111 1
|
6月前
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
|
缓存
CPU、处理器、内存、外存、寄存器、缓存的区别
CPU、处理器、内存、外存、寄存器、缓存的区别
1619 0
|
前端开发 rax
实验一:查看CPU和内存,用机器指令和汇编指令编程
实验一:查看CPU和内存,用机器指令和汇编指令编程
223 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第十五章:认识RISCV
289 0
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
108 7
|
2月前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
273 1
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
875 2
|
4月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
221 5
|
3月前
|
C# 开发工具 Windows
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
C# 获取Windows系统信息以及CPU、内存和磁盘使用情况
85 0

热门文章

最新文章