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