《课程设计串行数据检测器.ppt》由会员分享,可在线阅读,更多相关《课程设计串行数据检测器.ppt(18页珍藏版)》请在三一办公上搜索。
1、,数字电子技术课程设计,串行数据检测器的电路设计,一.设计内容与设计要求1、设计内容设计一个串行数据检测器。要求:连续输入3个或3个以上的1时输出为1,其他输入情况下输出为0。2、设计要求:a.设计思路清晰,给出整体设计框图;b 程序编写简洁,要求给出关键的注释;c 写出设计报告;3、主要设计条件开发环境;b.FPGA开发板。,1.基本原理:a.JK触发器的基本原理:,二.设计总体思路、基本原理和框图,a.JK触发器的基本原理,主从JK触发器的逻辑功能表,2、设计方法a、逻辑抽象,得出电路的状态转换图或状态转换表1.分析给定的逻辑问题,确定输入变量、输出变量以及电路的状态数。通常取原因(或条件
2、)作为输入逻辑变量,取结果作输出逻辑变量;2.定义输入、输出逻辑状态和每个电路状态的含义,并将电路状态顺序编号;3.按照题意列出电路的状态转换表或画出电路的状态转换图。b、状态化简 若两个电路状态在相同的输入下有相同的输出,并且转换到同样的一个状态去,则称这两个状态为等价状态。等价状态可以合并,这样设计的电路状态数少,电路越简。c、状态分配状态分配也叫状态编码1.确定触发器的数目n;2.确定电路的状态数M,应满足2n1M2n;3.进行状态编码,即将电路的状态和触发器状态组合对应起来。,d、选定触发器的类型,求出电路的状态方程、驱动方程和输出方程1.选定触发器的类型;2.由状态转换图(或状态转换
3、表)和选定的状态编码、触发器的类型,写出电路的状态方程、驱动方程和输出方程。e、根据得到的方程式画出逻辑图f、检查设计的电路能否自启动若电路不能自启动,则应采取下面措施:1.通过预置数将电路状态置成有效循环状态中;2.通过修改逻辑设计加以解决3.时序电路设计步骤:,4、总体设计思路a、首先进行逻辑抽像:取输入数据为输入变量,用X表示;取检测结果为输出变量,用Y表示。设电路在没有输入1以前的状态为S0,输入一个1以后的状态为S1,连续输入二个1以后的状态为S2,连续输入3个或三个以上1以后的状态为S3。若以S表示电路的现态,以S*表示电路的次态依据设计要求便可得到表a-1状态转化表和a-2状态转
4、化图。,b.进行状态化简:比较一下S2和S3这两个状态便可发现,他们在同样的输入状态下有同样的输出,而且转换后得到同样的状态。因此S2和S3是等价状态,可以合并为一个。从物理概念上也不难理解,当电路处于S2状态时表明已经输入了二个1。如果在电路转换到S2状态的同时输入也改换为下一位输入数据(当输入数据来自移位寄存器的串行输出,而且移位寄存器和数据检测器由同一时钟信号操作时,就工作在这种情况),那么只要下个输入为1,就表明连续输入3个1了,因而无需再设置一个电路状态,于是就得到了图a-3所示化简后的状态转换图。,c.状态分配:在电路状态M=3的情况下,根据式:2n1M2n可知,应取触发器的位数n
5、=2。d.选定触发器的类型,求出电路的状态方程、驱动方程和输出方程:如果取触发器状态Q1Q0的00、01和10分别代表S0、S1和S2,并选定JK触发器组成这个检测电路,则可从状态转换图画出电路次态和和输出的卡诺图:,将图a-4所示的卡诺图分解为分别表示Q1*,Q0*和Y的三个卡诺图:,经过化简后得到电路的状态方程:由JK触发器的驱动方程可得上式的驱动方程:输出方程:,JK触发器的特性方程:Q*=JQ+KQ,e.根据得到的方程式设计出电路逻辑图f.检查设计的电路能否自启动:将状态“11”代入状态方程和输出方程,分别求X=0/1下的次态和现态下的输出,得到:由状态转换图a-6可知,此电路可以自启
6、动。由于电路有输入信号,故为米利型时序逻辑电路。,三.单元电路设计(各单元电路图)本设计中中用到的单元电路为JK触发器,其电路逻辑图如下图所示:电路结构:逻辑符号:,四.总电路设计(总电路图)根据得到的方程式设计总电路图如下图:,输出方程:,由JK触发器的驱动方程可得上式的驱动方程:,经过化简后得到电路的状态方程:,五、电路的调试a、QuartusII文本输入调试程序代码:,16,波形图:,在原总电路图(左)中增加一个D触发器(特性方程:Q*=D)使电 路状态信息的输出与输入数据的改换同步。改进后的电路如图(右),六、电路改进,module cxsj(x,clk,r,cout,y);/*x数据输入变量,clk时钟信号,r重置检测器,cout加法计数,y检测结果输出变量*/input x,r,clk;output y;output 4:0cout;reg y;reg 4:0cout;always(negedge clk)beginif(r|!x)/重置检测器begincout=0;y=0;endelse if(x)/计数begincout=cout+1;if(cout!=5b00000 endendendendmodule,