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)。

‌DINDEXLoadCLK
‌0101001产生一个
‌0110011产生一个
‌0111101产生一个
‌1000111产生一个
得分/总分
7
2.00/2.00
正确答案:7

14填空(2分)
使用远程实验平台虚拟面板验证单端口寄存器堆的功能
读出各个寄存器的值,比较与写操作中保存在寄存器中的值是否一致。单端口寄存器读操作_________(需要/不需要)等待时钟到来。单端口寄存器_________(可以/不可以)同时写入和读出不同寄存器的值,因为它读操作和写操作地址端口index是________(独立的/共用的)。
得分/总分
不需要#不可以#共用的
2.00/2.00
正确答案:不需要#不可以#共用的

15填空(2分)
‌使用远程实验平台虚拟面板验证三端口寄存器堆的功能
执行下面的写操作操作,给寄存器堆内各个寄存器写入相应的值,完成后, 读出各个寄存器的值,比较与写操作中保存在寄存器中的值是否一致, 寄存器R3的值应为__________(5/6/7/8)。

DWAWECLK
‌0101001产生一个
‍0110011产生一个
‌0111101产生一个
‌1000111产生一个
得分/总分
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


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐