基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第五章:触发器和寄存器
1多选(3分)选出正确的锁存器描述得分/总分A.module Latch( input D,E,output reg Q);always@(E or D)if(E==1)Q=D;elseQ=0;endmoduleB.module Latch( input D,E,output reg Q);always@(E or D)if(E==1)Q=D;endmoduleC.module Latch( in
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)