前言
资料本应在期末考前发布,但因为考前繁忙遗忘,故现在补发,供补缓考和来年学习参考。
部分内容引用老师提供的学习资料。感谢胡红平老师、凌纯清老师一学期的辛勤付出。
本资料不得与错误信息混合后二次传播。
本资料纯属个人整理,若有错误,欢迎在评论区或私信指出。
在复习过程中有疑问的,建议积极寻求授课老师的帮助。
最后,祝大家在本门课程中取得理想的成绩。
复习建议
建议分两轮复习。
第一轮:回顾数电部分的全部知识点,浏览PPT和课堂活动、课堂测试、课后作业、小班课题,作条目式知识点总结。
第二轮:根据考纲分类总结归类题目,以历年期末考试题和小班课题目为主,课堂测试题目为辅。本资料满足第二轮复习的需要,若看不懂,请移步学习通课程中心回顾PPT讲义。
若时间紧张,可以只进行第二轮复习,根据不懂的知识点回顾对应的PPT讲义,节约时间。
考纲分析和例题解说
1) CT1:电路题。电路、模电理论、方法,以及功能电路。
2) CT1:时序电路分析。对时序电路进行分析的,强调同步的重要性。
3) CT1:寄存器设计。设计可靠的计数器、移位寄存器。
4) CT2:组合电路设计。列真值表化简或用组合器件设计组合电路。
5) CT2:紧凑真值表与分层、迭代设计。抽象表达与运用分层、迭代设计解决复杂问题。
6) CT2:时序电路设计。通过做状态图或状态机图,设计复杂时序电路。
7) CT2:FPGA 应用。对 FPGA 进行配置,实现组合或时序电路。
8) CT3:HDL 程序设计。模型机设计中的关键问题。
第一题:模拟电路
例1:[2023第二次小班课 7.1]
解:
知识点:复指数分析法。
常考点另有:运放(同相反相加法器减法器);滤波器(求激励方程幅频响应相频响应截止频率通带增益)等。请自查是否熟知这些概念。
第二题:时序电路分析
例2:[2020期末 6]
注:第三小问答案务必牢记。
例3:[2023第四次小班 6]
解:
解决方法同上。
例4:[2021期末 5]
知识点总结:时序电路的分析(状态方程和输出方程、状态表和状态图、异常的分析)
概念解析:建立时间和保持时间、异常及解决方法。
第三题:寄存器和移位计数器
例5:[2023第四次小班 8]
题目分析:可靠的移位计数器要求尽快自恢复。若进入了冗余状态,就接入Load恢复到最初的状态。若绘制电路比较复杂,可以用逻辑表达式表示。
左侧输入D接初始状态,若Load有效则输入D。
知识点总结:移位计数器、冗余状态、自恢复。
常考点另有:设计跳过某些数的计数器。
例6:[2022年课堂测试第28讲第3题]
解:
例7:[2020 期末 8]
第四题:组合电路设计
例8:[2021期末 3]
注:需 特别留意 “d”也就是无关项在电路化简中的处理。
第五题:紧凑真值表与抽象迭代设计
例9:[第三次小班课 4]
例10:利用2个3-8译码器和逻辑元件设计1个4-16译码器。
https://blog.csdn.net/Python_banana/article/details/102585209
例11:[第四次小班课 1]
注:本节知识考察综合性较强,需要掌握各种常见的元件和设计方法。
第六题:时序电路设计
例12:[2020 期末 4]
例13:[2021 期末4]
注:务必注意区分状态图及对应的状态表和状态机图及对应的状态表,两者在外观上差别很大。请自行整理它们的区别。两个例题都考察状态机图,请自行复习状态图。
状态机图务必记得左上角的input X,Y;output Z; default Z=0。
第七题:FPGA设计
例14:[2021期末 6]
概念解释:
配置位对于一个2-LUT,表示两个选择输入的数据输入。例如,对左上角的2-LUT,配置0111,则输出=ab'+a'b+ab=a+b。若配置0110则输出=a'b+ab'=a异或b。
配置位对于一个MUX,表示输出上面还是下面,配置0则输出上面,配置1则输出下面。
解题方法:对于需求先列出真值表画卡诺图,写输出方程;若存在两个输入关系紧密,出现在两个不同的逻辑表达式(特别注意异或)中,则考虑把它们配置在ab,用2-LUT输出对应的逻辑表达式;可编程逻辑块中自带了异或门、与门、或门,根据需要取用。
注:很多时候这类题目有不止一种解法。
第八题:HDL程序设计与模型机
例15:
module reg_group(we,clk,sr,dr,i,s,d);
input wire we,clk;
input wire [1:0] sr,dr;
input wire [7:0] i;
output wire [7:0] s,d;
reg [7:0] R0,R1,R2,R3;
initial
begin
{R1,R2}=8'b00000000;
R0=8'b00000001;
R3=8'b00000111;
end
assign s=(sr==2'b00)?R0:
(sr==2'b01)?R1:
(sr==2'b10)?R2:
(sr==2'b11)?R3:8'b00000000;
assign d=(dr==2'b00)?R0:
(dr==2'b01)?R1:
(dr==2'b10)?R2:
(dr==2'b11)?R3:8'b00000000;
always@ (negedge clk)
begin
if(we==1'b1)
case(dr)
2'b00: R0<=i;
2'b01: R1<=i;
2'b10: R2<=i;
2'b11: R3<=i;
default;
endcase
end
endmodule//注意:if else 和switch 不可以混合使用,同一.v文件只能使用一种。
//对于任意的if-else语句必须出现else,任意的switch语句必须出现default,否则会出现锁存器。