-## 一,简答题
1.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、时序逻辑电路特点:任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。
举例:
组合:数据选择器
时序:存储器,移位寄存器等
描述方法
组合:逻辑表达式,真值表,卡诺图
时序:状态转换表,状态转换图,时序图,状态机流程图
2.2.化简下列逻辑方程。要求画出卡诺图,化简为最简或与式。(10 分)
F ( a , b , c , d ) = ∏ M ( 0 , 2 , 4 , 8 , 10 , 14 ) F(a,b,c,d)= \prod M(0,2,4,8,10,14) F(a,b,c,d)=∏M(0,2,4,8,10,14)
【My answer】
step1 做出卡诺图
可以知道一共有0000,0010,0100,1000,1010,1110为0
step 2 由卡诺图可知,最简或与式共有三项如图,一种化简结果为
F
(
a
,
b
,
c
,
d
)
=
(
b
+
d
)
(
a
+
c
+
d
)
(
a
ˉ
+
c
ˉ
+
d
)
F(a,b,c,d)=(b+d)(a+c+d)(\bar{a}+\bar{c}+d)
F(a,b,c,d)=(b+d)(a+c+d)(aˉ+cˉ+d)
3.3.构建一个从 0 到 9(含)计数的十进制计数器,周期为 10。复位输入是同步复位,将计数器复位至 0。参考波形如下图,试补充 Verilog 语言(10 分)
module top_module ( input clk,
input reset, // 高电平同步复位
output [3:0] q);
//代码补充在这里
endmodule
【思路分析】
复位输入是同步复位
【My Answer】
module top_module ( input clk,
input reset, // 高电平同步复位
output [3:0] q);
//代码补充在这里
always@(posedge clk) begin
if(rst) q<=0;
else begin
if(q==9) q<=0;
else q<=q+1;
end
end
endmodule
二,分析设计题
1.组合电路设计(20分)
网络路由器将多台计算机连接在一起,并允许它们相互发送消息。如果两台或多台计算机同时发送消息,则消息"冲突",并且必须重新发送消息。使用组合设计过程,为连接 4 台计算机的路由器创建冲突检测电路。该电路有 4 个标记为 M0 至 M3 的输入,当相应的计算机发送消息时为 1,否则为 0。该电路有一个标记为 C 的输出,当检测到碰撞时为 1,否则为 0。
①写出真值表及逻辑方程
C
=
M
0
M
1
+
M
0
M
1
+
M
0
M
2
+
M
0
M
3
+
M
1
M
2
+
M
1
M
3
+
M
2
M
3
C=M_0M_1+M_0M_1+M_0M_2+M_0M_3+\\M_1M_2+M_1M_3+M_2M_3
C=M0M1+M0M1+M0M2+M0M3+M1M2+M1M3+M2M3 (凭逻辑直观写出来有点冗杂,画卡诺图化简可能效果稍好)
②仅使用门电路实现该系统,请标明输入输出信号。
③使用 1 位 8x1 多路选择器实现该函数(仅使用一个,说明设计思路,用框图实现)
【思路分析】1位8x1多路选择器,有一个三线选择信号sel,和8条输入信号,对第一问的真值表进行改写,可以得到选通信号与输入信号的关系,进而得到实现方法
2.时序电路设计(20分)
某时序电路有两个输入 w1 和 w2,一个输出 z,功能是比较输入两个序列。如果在连续 4 个周期内,w1 和 w2 的输入都相同,则 z 输出 1,否则 z 输出 0。
例如:
①试画出模块图,并标注输入输出信号。
②试给出完整状态转移图,该电路是 Mealy 型电路还是 Moore 型电路。
【思路分析】由给出的表格知道输出z与输入w1w2之间并无延后一拍,可以知道应该用Mealy型电路实现,下面画出Mealy型的状态转移图
修正:
③实现该时序电路(电路图与 Verilog HDL 描述都可以)
module comp();
input clk,w1,w2;
output z;
reg [2:0]state,[2:0]nstate;
parameter idle=0,s0=1,s1=2,s2=3,s3=4;
always@(posedge clk) state<=nstate;
always@(*) begin
if(w1==w2)
case(state)
idle:begin nstate<=s0;z<=0 end
s0:begin nstate<=s1;z<=0 end
s1:begin nstate<=s2;z<=0 end
s2:begin nstate<=s3;z<=0 end
s3:begin nstate<=s3;z<=1 end
endcase
else
begin nstate<=idle;z<=0; end
end
endmodule
三,应用设计题
1.键盘控制单元设计
键盘需要与计算机连接。键盘具有一个 4 位输出 K 表示发送按下的键的编码,以及一个一位输出 E,当按下某个键时,该输出 E 从 0 变为 1。计算机具有相应的4 位输入 CK 和一位输入 CE。但是,有时计算机忙于其他任务,并且需要一些时间来接收密钥,因此它具有一个输出 Crec,当收到按键值时,它将该 Crec 设置为 1 一个时钟周期。在键盘和计算机之间设计一个系统,可以在计算机繁忙时缓冲多个键值。
①下图显示本系统构成模块,由两个处理器和一个队列组成的系统框图,以及键盘和计算机的接口。试根据上文描述确定括号中的连接信号,标明信号名和位宽。(5 分)
【My Answer】
②试给出按键处理模块的设计思路及 SDL 图。(5 分)
【思路分析】
1.SDL图的考察,和设计思路的考察
SDL图简介
SDL图绘制方法示例
2.审清题意,是按键处理模块这一模块的设计而非整个按键控制单元
【My Answer】
设计思路:按键处理模块在使能信号E为高电平时存入键值K,并立即将键值传出data_in,并设置写信号wr为高电平
【疑惑 :没读懂题意】
实际上按上述思路设计的按键处理模块与队列的配合并不能保证不因为信息丢失而漏掉按键值
- 需要队列回传确received信号,
- 写信号的使能不能过长或者过短,可能需要边沿触发而不是电平触发
而这两点都没有在题目中的框图中体现?
2、CPU相关
假定 ALU 只支持 8 位二进制数的加、减、与、或、非、左移 1 位、右移 1 位、赋值等操作,如图所示。两个 8 位输入 S1 和 S2,一个 8 位输出 DT,另一个输出为进位标志位 FLG。
① 根据题意,补充功能表:
My answer
修正:
② 试用Verilog实现该电路
【思路分析】
- 与模拟卷一题目一样,答案做一些修正
- 考虑到8位数运算结果的复杂程度和应用,与或非采用按位与或非而不采用逻辑与或非,二者区别可参见下面博客总结【HDLbits刷题笔记 】01-verilog语法-基础部分
- 对于进位标志位,其只在加法和减法运算中表示进位或者借位,其他运算中置为0(修正:移位运算中,通常置为移出的最高位)
【My 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};
3'b000:{flg,dst}<={1'b0,s1};
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
小结
- 考虑卷面代码均为手书,无调试机会,上文所有代码均未经过调试验证。
- 时间比较充裕,尽可能在代码或者主观回答的部分留出可以完善和修改的地方
- 对于简单的手写代码注意书写整洁,而对于较多的考察框图设计的绘图用铅笔