21届提前批乐鑫笔试(二)

1、手撕代码异步FIFO

module afifo(
	input wr_clk,
	input rd_clk,
	input rst_n,
	input wr_en,
	input rd_en,
	input [7:0] din,
	
	output [7:0] dout,
	output reg rd_empty,
	output reg wr_full
);

reg [7:0] mem [31:0];
reg [7:0] waddr;
reg [7:0] raddr;

reg [8:0] wbin;
reg [8:0] rbin;

reg [8:0] wgray;
reg [8:0] rgray;
reg [8:0] wp;
reg [8:0] rp;

reg [8:0] w_rp1;
reg [8:0] w_rp2;

reg [8:0] r_wp1;
reg [8:0] r_wp2;

wire rempty_val;
wire wfull_val;


//输出的数据
assign dout = mem[raddr];

//输入的数据
always @ (posedge wr_clk) begin
	if(wr_en && (wr_full)) begin
		mem[waddr] <= din;
	end
end
//产生写地址
always @ (posedge wr_clk or negedge rst_n) begin
	if(!rst_n) begin
		wbin <= 9'b0;
	end
	else if(wr_en && (~wr_full)) begi
		wbin <= wbin + 1;
	end
end
assign waddr = wbin[7:0];
assign wgray = wbin ^ (wbin>>1);

always @ (posedge wr_clk or negedge rst_n) begin
	if(!rst_n) begin
		wp <= 9'b0;
	end
	else begin
		wp <= wgray;
	end
end

//将写指针同步到读时钟域
always @ (posedge rd_clk or negedge rst_n) begin
	if(!rst_n) begin
		r_wp1 <= 9'b0;
		r_wp2 <= 9'b0;
	end
	else begin
		r_wp1 <= wp;
		r_wp2 <= r_wp1;
	end
end

//产生读空信号
assign rempty_val = (r_wp2==rp);

always @ (posedge rd_clk or negedge rst_n) begin
	if(!rst_n) begin
		rd_empty <= 1'b0;
	end
	else begin
		rd_empty <= rempty_val;
	end
end


//---------------------------------------------------
//产生读地址
always @ (posedge rd_clk or negedge rst_n) begin
	if(!rst_n) begin
		rbin <= 9'b0;
	end
	else if(rd_en && (!rd_empty))begin
		rbin <= rbin + 1'b1;
	end
end

assign raddr = rbin[7:0];
//产生读地址的格雷码
assign rgray = rbin ^ (rbin>>1);
//将读地址的格雷码进行寄存
always @ (posedge rd_clk or negedge rst_n) begin
	if(!rst_n) begin
		rp <= 9'b0;
	end
	else begin
		rp <= rgray;
	end
end

//将读格雷码同步到写时钟域进行判断写满
always @ (posedge wr_clk or negedge rst_n) begin
	if(!rst_n) begin
		w_rp1 <= 9'b0;
		w_rp2 <= 9'b0;
	end
	else begin
		w_rp1 <= rp;
		w_rp2 <= w_rp1;
	end
end


assign wfull_val = {~(w_rp2[8:7]),w_rp2[6:0]}== wp;
always @ (posedge wr_Clk or negedge rst_n) begin
	if(!rst_n) begin
		wr_full <= 1'b0;
	end
	else begin
		wr_full <= wfull_val;
	end
end

endmodule

2、
这个题最后的结果是2V。
15V - [(2-0.7)/50k * 100 * 5k] = 2v

3、求保持时间

触发器的setup和hold是器件工艺决定,一般都是因为组合逻辑延迟过大等原因,会导致setup和hold的余量问题。具体的
setup_skew = Tcycle - Tsetup - Tlogic +Tclock skew - Tco
hold_skew = Tlogic + Tco - Tclock skew - Thold

Tclock skew + Thold = 0.3ns + 0.1ns = 0.4ns
要想保持时间不违例,只能Tlogic + Tco大于等于0.4ns
A-D:Tlogic + Tco = 0.3ns + 0.2ns + 0.1ns = 0.6ns
B-D :Tlogic + Tco = 0.1ns + 0.2ns + 0.1ns = 0.4ns
C-D:Tlogic + Tco = 0.2ns + 0.1ns = 0.3ns

4、某电路有A、B、C、D、E、F六个状态,A和C、D和F、E和B、F和C分别等价,则可以简化为2个状态。

5、21届提前批乐鑫笔试(二)_第1张图片
(A&B | C&D) ^ E = F
具体实现什么逻辑功能不清楚,有清楚地讲解一下:

6、一个8位数模转换器(DAC)的最小输出电压增量为0.02V,当输入代码为11011010时,输出电压V0=?V,ADC(模数转换器)的两个重要指标是(采样率)和(分辨率)。

11011010转化为10进制为218.
218 * 0.02V = 4.36V

7、以下关于电容的说法,正确的是(BA)
A、可以储能
B、为无源器件
C、不能储能
D、为有源器件

8、在满足换路定则的前提下,以下关于电感的说法,正确的是(CD)
A、电压不能跳变
B、电源可以跳变
C、电压可以跳变
D、电流不能跳变

感应电压正比于di/dt,电流变化速度越快,感应电压越高,因此在突然切断电感电流的情况下,会激发极高的感应电压脉冲。

电容两边电压不能跳变,电流电流能跳变

9、后一级的输入电容大小会影响(D)功耗
A、漏电流
B、静态
C、短路电流
D、动态

开关功耗:
在这里插入图片描述
短路电流功耗:
在这里插入图片描述
10、TTL门电路组成的JK触发器,时钟端接5khz脉冲,J与K悬空,则输出Q的频率为(A)
A、2.5khz
B、无法预测
C、5Khz
D、10khz

TTL门电路的悬空端相当于接高电平,所以根据Jk触发器的状态转移方程Q’=JQ’+K’Q=Q’,即JK触发器的状态会随着时钟信号的上升沿的到来而翻转,所以频率应为CP的一半。

你可能感兴趣的:(21届提前批乐鑫笔试(二))