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

一,简答题

1.组合逻辑电路与时序逻辑电路有什么区别?是判断下列波形是组合电路还是时序电路,确定输入量和输出量,简要给出理由。 (10 分)

在这里插入图片描述

My answer:

组合逻辑电路和时序逻辑电路的区别

比较项目组合逻辑电路时序逻辑电路(状态机)(同步)
输入输出关系 任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关 不仅仅取决于当前的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关
有无存储单元 无(不能包含) 包含
结构特点 只包含门电路 组合逻辑电路+存储电路
输出状态必须反馈到组合电路的输入端,与输入信号共同决定组合逻辑的输出
分析方法 从电路的输入到输出逐级写出逻辑函数式,最后得到表示输出与输入关系的逻辑函数式。
然后用公式化简法或者卡诺图化简法得到函数式的化简或变换,以使逻辑关系简单明了。
有时还可以将逻辑函数式转换为真值表的形式
组合逻辑电路+存储电路,输出状态必须反馈到组合电路的输入端,与输入信号共同决定组合逻辑的输出

1、写出每个触发器的驱动方程
2、将驱动方程带入触发器的特性方程得到状态方程组
3、根据逻辑图写出电路的输出方程状态转换过程描述:状态转换表、状态转换图、状态机流程图、时序图
设计方法 1、逻辑抽象
2、写出逻辑函数式
3、选定器件类型
4、将逻辑函数式化简或者变换成适当的形式
5、画出逻辑电路的连接图
6、工艺设计
1、逻辑抽象得到状态转换图或者状态转换表
2、状态化简
3、状态分配(状态编码)
4、选触发器求出状态方程、驱动方程和输出方程
5、根据方程式画出逻辑图
6、检查设计的电路能否自启动
常用逻辑电路 编码器
译码器
数据选择器
加法器
数值比较器
锁存器
触发器
寄存器
移位寄存器
存储器
verilog描述 逻辑中不牵涉跳变沿信号的处理,组合逻辑的verilog描述方式有两种:

always @(电平敏感信号列表)
(1):always模块的敏感列表为所有判断条件信号和输入信号,但一定要注意敏感列表的完整性。在always 模块中可以使用if、case 和for 等各种RTL 关键字结构。由于赋值语句有阻塞赋值和非阻塞赋值两类,建议读者使用阻塞赋值语句“=”。always 模块中的信号必须定义为reg 型,不过最终的实现结果中并没有寄存器。这是由于在组合逻辑电路描述中,将信号定义为reg型,只是为了满足语法要求。
(2):assign描述的赋值语句。
信号只能被定义为wire型。
电路里面有存储元件(各类触发器,在FPGA 芯片结构中只有D 触发器)用于记忆信息,从电路行为上讲,不管输入如何变化,仅当时钟的沿(上升沿或下降沿)到达时,才有可能使输出发生变化。
与组合逻辑不同的是:

(1)在描述时序电路的always块中的reg型信号都会被综合成寄存器,这是和组合逻辑电路所不同的。
(2)时序逻辑中推荐使用非阻塞赋值“<=”。
(3)时序逻辑的敏感信号列表只需要加入所用的时钟触发沿即可,其余所有的输入和条件判断信号都不用加入,这是因为时序逻辑是通过时钟信号的跳变沿来控制的。
上表整理自博客

组合逻辑电路和时序逻辑电路区别

【考场作答省流版】

1、组合逻辑电路特点:任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。

2、时序逻辑电路特点:任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。

判断下列波形式组合电路还是时序电路

假设该电路为组合电路,依据组合电路的当前输入确定,可以唯一确定输出,而与系统之前的状态无关的特性的特性,做如下分析

在这里插入图片描述

  基于该电路式是组合逻辑电路的假设:

    1. 若X,Y为输入,Z为输出,如上图1中所示,同一输入下输出不同,矛盾(若X,Y分别单独为输入,另两信号为输出的 情况同理)
   2. 若Y,Z为输入,X为输出,如上图2中所示,同一输入下输出不同,矛盾(若Y,Z分别单独为输入,另两信号为输出的情况同理)
   3. 若X,Z为输入,Y为输出,如上图3中所示,同一输入下输出不同,矛盾(若X,Z分别单独为输入,另两信号为输出的情况同理)

综上所述,假设不成立,该电路为时序逻辑电路。

确定输入量和输出量

  认为X是输出量,Y和Z是输入量,理由如下

    1. XY不变时,Z有变化,故Z不是输出
    2. XZ不变时,Y有变化,故Y不是输出
    3. X变化时Y和Z必然变化,故X是输出

2.将下列逻辑函数化简为最简或与式。式中 a’表示 a 的非。(10 分)

F(a,b,c,d)=ab′c′d + a′bc + abc + abd′ + a′bd + abd + acd′

My answer:

step1 做出卡诺图

在这里插入图片描述

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

3.简述摩尔型时序电路与米里型时序电路的区别(10 分)

米里型状态机和摩尔型状态机的区别
【考场作答省流版】
输出与现态和输入都有关的时序电路称为米里型时序电路,输出仅与现态有关的时序电路称为摩尔型时序电路。

二,分析设计题

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

①试设计 1 位全加器,并给出模块图,标注输入输出信号。

全加器的逻辑表达式
S = A ⊕ B ⊕ C i C o = A ⋅ B + A ⋅ C i + B ⋅ C i S= A \oplus B \oplus Ci \\Co=A\cdot B+A\cdot Ci+B\cdot Ci S=ABCiCo=AB+ACi+BCi
在这里插入图片描述

在这里插入图片描述

②给出 3 位全加器设计。

在这里插入图片描述

③使用 3 位全加器和逻辑门实现 3 位全减器电路(电路图与 Verilog HDL 语言)

【思路分析】列写出加法器和减法器的表达式
{ C o , S [ 2 : 0 ] } = A + B + C i { C o , D [ 2 : 0 ] } = A − B − C i \{Co,S [2:0]\}=A+B+Ci \\ \{Co,D[2:0]\}=A-B-Ci {Co,S[2:0]}=A+B+Ci{Co,D[2:0]}=ABCi
【电路图】
在这里插入图片描述
关于我认为比较注意的点:

  1. 由于是全减器,可能作为更高位的减法器的组成部分,故给更高位的借位Co和给更低位的借位Ci必须保留,而不能直接置位为1
  2. 计算2-4来验证设计,不难得到 C o = 1 , D = 6 [ 110 ] 2 C_o=1,D=6[110]_2 Co=1,D=6[110]2 C o = 1 C_o=1 Co=1表示2-4的过程中需要向更高位借位。为什么 2 [ 010 ] 2 − 4 [ 100 ] 2 = 6 [ 110 ] 2 2[010]_2-4[100]_2=6[110]_2 2[010]24[100]2=6[110]2而不是-2的模值 [ 010 ] 2 [010]_2 [010]2?实际上是因为这里由于全减器可以向高位借位,故计算结果一定是正数

也可以将3位全减器作为一个8位减法器的零部件去考虑就能明白,考虑40-24在这里插入图片描述
其中红框部分是三位全减器承担的工作,正是 2 [ 010 ] 2 − 4 [ 100 ] 2 2[010]_2-4[100]_2 2[010]24[100]2,实际上它的计算结果是 6 [ 110 ] 2 6[110]_2 6[110]2才能使得两个八位数相减的结果是正确的。

【verilog语言】

module sub3();
input [2:0]A,[2:0]B;
input Ci;
output [2:0]D;
sadd3 add3(S,Co,A,!B,Ci);
assign D=!S;
endmodule

module sadd3();
input [2:0]A,[2:0]B;
input Ci;
output Co;
output [2:0]S
assign {Co,S}=A+B+Ci;
endmodule

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

2.试设计一流水灯控制电路,灯循环变化规律为:从左到右点亮 4个灯,具体如图所示,每秒变化一次。此过程不断重复。

在这里插入图片描述

①试画出模块图,并标注输入输出信号。
②试给出状态转移图。

在这里插入图片描述
一般rst一般不作为输入信号,规范的写法可能是下面这种
在这里插入图片描述

③实现该时序电路(电路图与Verilog HDL描述都可以)
module LED();
input clk,rst;
output [3:0]LED;
parameter idle=0,s01,s1=2,s2=3,s3=4,s4=5;

always@(posedge clk)
if(rst)state<=idle;
else
state<=nstate;

always@(*) begin
case(state)
idle:begin nstate<=s0; LED<=4'b0000 end
s0:    begin nstate<=s1; LED<=4'b0000 end
s1:    begin nstate<=s2; LED<=4'b1000 end
s2:    begin nstate<=s3; LED<=4'b1100 end
s3:    begin nstate<=s4; LED<=4'b1110 end
s4:    begin nstate<=s0; LED<=4'b1111 end
endcase
end

三,应用设计题

1.自动保温杯控制单元设计

某保温杯已经配有温度/电压转换器,温度采用摄氏度,其输出电压值=温度值/100(V),大于 100°C 输出 1V,小于 0°C 输出 0V。设计要求温度保持在 70°C 左右,采用 PWM 信号控制电热丝加热。

① 采用 ADC 对温度值进行测量,ADC 参考电压为 1V,温度测量精度可达 0.1°C。拟采用并行输出的 ADC,试确定输出位数,给出必要理由。(5 分)

【My Answer】

测量精度(分辨率) Δ = 0. 1 ∘ C \Delta=0.1 ^\circ C Δ=0.1C,又由于需要区分的满量程为 F S R = 10 0 ∘ C FSR=100^\circ C FSR=100C,从ADC分辨率理论上讲
Δ = F S R / 2 n \Delta=FSR/2^n Δ=FSR/2n
可以计算出输出位数n至少为10

②PWM 产生单元提供 3 种不同脉宽的 PWM 信号,脉宽分别为 0.2s、0.5s、0.8s,周期均为 1s。已知输入时钟为 1kHz,给出 PWM 产生单元的 Verilog HDL 描述,并进行必要的注释。(5 分)

【思路分析】

  1. 由时钟频率知1秒内1000个时钟周期
  2. 控制计数器翻转比较的数值CCR实现三种脉宽的切换

【顶层代码(My Answer)】

module pwm_gen();
input clk,rst;//时钟和复位,时钟为1KHz
input [10:0]ccr;
output pwm;//脉冲信号

reg[10:0]m;//时间计数

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

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

endmodule

2、CPU相关

将 8 位数据D 保存至通用寄存器 R0、R1、R2、R3 之一。2 位信号 LS 用来选择目标寄存器,信号 LE 为锁存使能。所要保存的数据有两个来源,一个是运算结果 DT,另一个是存储器总线上的数据 DI。当保存存储器总线上的数据时,此时存储器读取控制信号 nRD 必为低电平,利用该信号来进行数据源选择。选择后的数据也可以用来更新 PC 值,数据 D 重定义为 PPC。其电路结构如图所示。

在这里插入图片描述

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

在这里插入图片描述
My Answer
在这里插入图片描述

② 试用Verilog实现该电路

【顶层代码(My answer)】

module RF();
	input clk,LE,nRD;
	input [7:0]DI,DT;
	input [1:0]LS;
	output [7:0]R0,[7:0]R1,[7:0]R2,[7:0]R3;

	always@(posedge clk)begin
	if(LE)
		case({nRD,LS})
			3'b000:R0<=DI;
			3'b001:R0<=DT;
			3'b010:R1<=DI;
			3'b011:R1<=DT;
			3'b100:R2<=DI;
			3'b101:R2<=DT;
			3'b110:R3<=DI;
			3'b111:R3<=DT;
		endcase
	end
endmodule

3、片上系统

GPIO设备主要完成二进制量的输入与输出。GPIO接口电路有8位地址输入端A0- A7,1位数据输入输出端D0,读控制线nRD、写控制线nWR,GPIO端口P0。

在这里插入图片描述

① 1.假定GPIO端口基地址为0xF0,CR的地址为0xF0,ODR和IDR的片内地址皆为0x01。外部输入地址A7-A0,其中A0用于片内地址来选择寄存器,A7-A1则用来选择 GPIO接口,生成片选信号。填写功能表:

在这里插入图片描述

② 试用Verilog语言实现该接口。

【思路分析】
三态门的verilog实现是难点,可以采用inout双向端口实现
Verilog 双向端口

module dinout(din,z,clk,dout,dinout)
	input [7:0] din;
	input z;
	input clk;
	output [7:0] dout;
	inout [7:0] dinout;
	
	reg [7:0] dout;
	reg [7:0] din_reg;
 
	assign dinout = (!z)?din_reg:8’bz;
	
	always @(posedge clk)
		begin
			if(!z)
			 din_reg=din;
			else
			 dout=dinout;
		end
endmodule

【My Answer】

module GPIO();
input D0;
nWR,nRD;
input A0;//位选
inout P0;

reg CR,IFR,ODR;
reg nCRE,nDRE;
assign P0=CR?ODR:1'bz;//三态门描述

always@(*) begin//位选译码器
case(A0)
1'b1:nCRE=0;
1'b0:nDRE=0;
endcase
end

always@(*)  begin//CR寄存器
if{nRD,nCRE}==0)
CR<=D;
end

always@(*)  begin//ODR寄存器
if{nRD,nDRE}==0)
ODR<=D;
end

always@(*)begin//IDR寄存器
if{nWR,nDRE}==0)
IDR<=P0;
end

endmodule

小结

  • 考虑卷面代码均为手书,无调试机会,上文所有代码均未经过调试验证。
  • 片上系统的题型一般会有正确合理的框图描述,verilog实现时尽量忠实地描述框图而少去做简化和改动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

绿茶冰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值