【数电试题】西电通卓模拟卷一

一,简答题

1.数字电路与模拟电路有什么区别?数字电路有哪些优点,试举例说明。(10分)

My answer:

模拟电路与数字电路的区别
    (1)处理的信号不同,模拟电路处理的是时间和幅度连续变化的模拟信号,而数字电路处理的是用“0”和“1”两个基本数字符号表示的离散信号。
    (2)研究的着重点不同 研究模拟电路时关心的是电路输入与输出之间的大小、相位、效率、保真等问题,要计算出信号的实际数值;而研究数字电路时关心的是输入与输出之间的逻辑关系。数字电路只需判别数字信号的有无,不必反映数字信号本身的实际数值。
    (3)研究的方法不同 模拟电路主要分析方法有解析法、微变等效电路法、图解法等,而数字电路的主要分析方法有真值表、逻辑代数、卡诺图、波形图等。
数字电路的优点
    (1)稳定性好:数字电路不像模拟电路那样易受噪声的干扰。
    (2)可靠性高:数字电路中只需分辨出信号的有与无,故电路的组件参数,可以允许有较大的变化(漂移)范围。
    (3)可长期存储:数字信息可以利用某种媒介,如磁带、磁盘、光盘等进行长时期的存储。
    (4)便于计算机处理:数字信号的输出除了具有直观、准确的优点外,最主要的还是便于利用电子计算机来进行信息的处理。
    (5)便于高度集成化:由于数字电路中基本单元电路的结构比较简单,而且又允许组件有较大的分散性,这就使我们不仅可把众多的基本单元做在同一块硅片上,同时又能达到大批量生产所需要的良率。
My Question:
数字电路的优点的例子? \color{red}数字电路的优点的例子? 数字电路的优点的例子?

2.化简下列逻辑方程。要求画出卡诺图,化简为最简与或式。(10分)

F(a,b,c,d)= ∏ \prod M(0,2,4,5,8,10,12,14)

My answer:

 关于逻辑方程化简,该帖讲解详细
https://blog.csdn.net/weixin_66578482/article/details/125931372

step1 由于是要求解最简与或式而非最简或与式,先将上式化简为最小项形式
F ( a , b , c , d ) = ∑ m ( 1 , 3 , 6 , 7 , 9 , 11 , 13 , 15 ) F(a,b,c,d)=\sum m(1,3,6,7,9,11,13,15) F(a,b,c,d)=m(1,3,6,7,9,11,13,15)
检查最大项和最小项之和为 2 4 = 16 2^4=16 24=16,说明化简无遗缺

step2 做出卡诺图
在这里插入图片描述

step 3 由卡诺图可知,最简与或式共有四项如图,一种化简结果为
F ( a , b , c , d ) = a ‾ b ‾ d + a b ˉ c + a d F(a,b,c,d)=\overline{a} \overline{b}d+a\bar{b}c+ad F(a,b,c,d)=abd+abˉc+ad

3.假设有两个8位2的补码数,a[7:0]和b[7:0]。这些数字相加以产生s[7:0]。还要计算是否发生了(有符号)溢出。试写出Verilog语言(10分)

module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
); //


// assign s = ...

// assign overflow = ...

endmodule

【问题分析】

  1. 什么是“2的补码数”,理解为二进制补码数可能有助于问题的分析
  2. 补码的加减法运算, a [ 补码 ] + b [ 补码 ] = ( a + b ) [ 补码 ] a_{[补码]}+b_{[补码]}={(a+b)}_{[补码]} a[补码]+b[补码]=a+b[补码]
  3. 有符号溢出

【逻辑算式】

  1. s最终的结果也是补码形式
  2. 需要设计全加器组成带进位的八位全加器, p l u s plus plus表示全加
    { o v e r f l o w , s u m [ 7 : 0 ] } = a p l u s b \{overflow,sum[7:0]\}=a\quad plus\quad b {overflow,sum[7:0]}=aplusb

【模块实现】

  1. 全加器
module fulladder(s, cout, a, b, cin);
	//输入输出端口定义
	output s, cout;
	input a, b, cin;
	
	//采用行为描述的方式实现1位全加器
	assign s = a ^ b ^ cin;
	assign cout = a & b | a & cin | b & cin;
endmodule

另一种全加器的描述方法

module fulladder(A,B,CI,S,CO)
	input A,B,CI;
	output S,CO;
	
	assign {CO,S}=A+B+CI;
endmodule
  1. 带进位的8位加法器
module 8_fulladder(a,b,sum,overflow);
	output [7:0] sum;
	output overflow;
	input [7:0] a , [7:0] b;
	wire [6:0] carry;
	
	fulladder m0(sum[0],carry[0],a[0],b[0],0);
	fulladder m1(sum[1],carry[1],a[1],b[1],carry[0]);
	fulladder m2(sum[2],carry[2],a[2],b[2],carry[1]);
	fulladder m3(sum[3],carry[3],a[3],b[3],carry[2]);
	fulladder m4(sum[4],carry[4],a[4],b[4],carry[3]);
	fulladder m5(sum[5],carry[5],a[5],b[5],carry[4]);
	fulladder m6(sum[6],carry[6],a[6],b[6],carry[5]);
	fulladder m7(sum[7],overflow,a[7],b[7],carry[6]);

endmodule

【顶层代码(My answer)】

module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow;
); //
wire c0,c1,c2;

assign {c0,s}=a+b;
assign c1=a[6]+b[6];
assign c2=a[7]+b[7];
assign overflow=c1^c2; 

endmodule

二,分析设计题

1.组合电路设计(20分)

① 试给出2位4x1多路复用器模块框图,标注输入输出信号

MUX多路复用器(数据选择器)
2-1MUX

在这里插入图片描述

② 试给出2位4x1多路复用器模块框图,标注输入输出信号

在这里插入图片描述

③ 使用2位4x1多路复用器实现下列函数(仅使用一个,说明设计思路,用框图实现)

F 1 ( a , b , c ) = a c ˉ + b ˉ c F_1(a,b,c)=a\bar{c}+\bar{b}c F1(a,b,c)=acˉ+bˉc F 2 ( a , b ) = ∑ m ( 1 , 3 ) F_2(a,b)=\sum m(1,3) F2(a,b)=m(1,3)

两函数必须仅用一个2位4x1同时实现
在这里插入图片描述

2.时序电路设计(20分)

试设计控制电路,每当输入X从0变为1时,Y在两个时钟周期内应保持为1,然后返回到0–即使X仍为1。

①试画出模块图,并标注输入输出信号。

在这里插入图片描述

②试给出状态转移图。

在这里插入图片描述

③实现该时序电路(电路图与Verilog HDL描述都可以)
module design(X,clk,rst,Y);
input X,clk;
output reg Y;
reg [1:0] count;//计数标志位
reg flag;//触发标志位

//计数器
always@(posegde clk or negedge rst) begin
	if(!rst)count<=2'b00;
	else if (flag==1'b1 ) begin
		if(count==2'b10)
			count<=2'b00;
		else count<=count+1;
	end
end

//上升沿触发
always@(posedge X or  negedge rst ) begin
flag<=1'b1;
	if(!rst) begin
		Y<=1'b0;
		flag<=1'b0;
	end
	else if(count==2'b10 && Y==1'b1) begin
		Y<=1'b0;
		flag<=1'b0;
	end
	else begin
		Y<=1'b1;
		flag<=1'b1;
	end
end

三,应用设计题

1.舵机控制单元设计

某舵机的控制需要一个20ms的时基脉冲,该脉冲的高电平部分为0.5ms-2.5ms范围,脉冲的宽度将决定转动的角度。例如:1.5毫秒的脉冲,电机将转向 90 度的位置。如果脉冲宽度小于 1.5 毫秒,那么电机轴向朝向0度方向。如果脉冲宽度大于 1.5 毫秒,轴向就朝向180度方向 在这里插入图片描述

① 通过两个按键 key1, key2 来控制 PWM 信号调节舵机转动的角度,key1 每按下一次,角度减少 5°,key2 每按下一次,角度增加 5°。试确定两个按键按下后的调节的脉宽,给出必要计算过程。(5 分)

  设两个按键按下后调节的脉宽为 x x x,key1按下一次增加 x x x,key2按下一次减小 x x x,设档位有 y y y
y = 18 0 ∘ 5 ∘ = 36 y=\frac{180^{\circ}}{5^{\circ}}=36 y=5180=36
  那么在2ms的时钟周期内需要有36个不同的档位,解得
x ≤ 2 36 m s = 0.05 5 … m s x \leq \frac{2}{36}ms=0.055^…ms x362ms=0.055ms
  取 x = 0.05 m s x =0.05ms x=0.05ms,当脉冲宽度为0.5ms时,舵机方向为 0 ∘ 0^{\circ} 0,脉冲宽度为1.4ms时,舵机方向为 9 0 ∘ 90^{\circ} 90,脉冲宽度为2.3ms时,舵机方向为 18 0 ∘ 180^{\circ} 180

② 假设输入时钟的频率可以自行设定,给出舵机控制单元的 Verilog HDL 描述,并进行必要的注释。(5 分)

【思路分析】

  1. 按键最小调节脉宽为0.05ms,以此为时钟周期可以分频产生其他脉冲宽度
  2. 设计脉冲宽度可调的脉冲发生模块,可以采用计数器实现

【顶层代码(My Answer)】

module pps(clk,rst,q,key1,key2);
input clk,rst;//时钟和复位,时钟为20KHz
input key1,key2;//按键
output reg q;//脉冲信号

reg[10:0]m;//时间计数
reg[10:0]N;//占空比控制

//计数器
always@(posedge clk or negedge rst) begin
	if(!rst) m<=0;
	else if(m==399)
		m<=0;
	else
		m<=m+1;
end

//脉冲生成
always@(posedge clk or negedge rst)begin
	if(!rst) q<=0;
	else if(m==N)
		q<=0;
	else if(m==0)
		q<=1;
end

//占空比调节
always@(*)begin
	if(!rst) N<=10;
	else begin
		case({key1,key2}):
			2'b10:N<=N+1;
			2'b01:N<=N-1;
			2'b00:N<=N;
			2'b11:N<=N;
			default:N<=N;
		endcase
	end
end

endmodule

2、CPU相关

假定 ALU 只支持 8 位二进制数的加、减、与、或、非、左移 1 位、右移 1 位、赋值等操作,如图所示。两个 8 位输入 S1 和 S2,一个 8 位输出 DT,另一个输出为进位标志位 FLG。

在这里插入图片描述

① 根据题意,补充功能表:

在这里插入图片描述
My answer
在这里插入图片描述
修正
在这里插入图片描述
ARM中进位标志位C的四种置位情况

C 可以有4种方法设置C的值:

  1. 加法运算(包括CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。
  2. 减法运算(包括CMP):当运算时产生了借位时(无符号数溢出),C=0,否则C=1。
  3. 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
  4. 对于其它的非加/减运算指令,C的值通常不会改变。
② 试用Verilog实现该电路

【思路分析】

  1. 规范写法应该构建全加器全减器模块,考试时间原因,采用快速的方法
  2. 考虑到8位数运算结果的复杂程度和应用,与或非采用按位与或非而不采用逻辑与或非,二者区别可参见下面博客总结【HDLbits刷题笔记 】01-verilog语法-基础部分

【顶层代码(M与answer)】

module ALU(opr,s1,s2,dst,flg);
input [7:0]s1,[7:0]s2;
input[2:0]opr;
output [7:0]dst;
output flg;

always@(*)begin
case(opr)
3'b001:{flg,dst}<=s1+s2;
3'b010:{flg,dst}<=s1-s2;
3'b011:{flg,dst}<={1'b0,s1&s2};
3'b100:{flg,dst}<={1'b0,s1|s2};
3'b101:{flg,dst}<={1'b0,~s1};
3'b110:{flg,dst}<={2'b0,s1[6:0]};
3'b111:{flg,dst}<={s1[7],s1[6:0],1'b0};
default:{flg,dst}<=0;
endcase
end

endmodule

3、片上系统

PWM设备接口电路有8位地址输入端A0-A7,8位数据输入输出端D0-D7,写控制线 nWR,设备端口PWM 。

在这里插入图片描述

①该接口有三个寄存器,CR、ARR和CCR的片内地址分别为0、1和2,采用两个地址线进行译码。假定接口基地址为0xF4,则CR、ARR和CCR地址分别为0xF4、0xF5和0xF6。填写功能表:在这里插入图片描述
②试用Verilog语言实现该接口。

My answer
①填写功能表:
在这里插入图片描述

②Verilog实现
【问题分析】对一个接口的verilog实现,第一步是确定顶层模块的接口输入输出,整个大的模块是阴影部分,仅有一个输出是PWM,其他信号均为这个模块的输入。第二步是分析其中各个模块的输入输出以及模块的逻辑(组合or时序)
【My answer】

module port();
input CLK,nWR;
input [7:0] A,[7 :0]D;
output PWM;

reg [7:0]CR,ARR,CCR;

//地址读取,片选
always@(*)begin
if(!nWR)
case(A)
0xF4:CR<=D;
0xF5:ARR<=D;
0xF6:CCR<=D;
endcase
end

//减法计数器
always@(posedge CLK)begin
if(CR) begin
	if(Q>0)
	Q<=Q-1;
	else if(Q==0)
	Q<=ARR;
end
end

//PWM生成
always@(*)begin
if(Q>CCR)
PWM<=1'b1;
else
PWM<=1'b0;
end

endmodule

小结

  • 考虑卷面代码均为手书,无调试机会,上文所有代码均未经过调试验证。
  • 数电模拟题中,考虑到时长为2小时,分析时尽可能不要将问题复杂化
  • verilog实现是多种实现方式中较快捷的方式。
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿茶冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值