当前课程知识点:IC设计与方法 > 4、电路设计实例 > c)电路设计实例3 > 讲课视频
前面我们讲了一些
组合逻辑电路和时序逻辑电路设计的例子
下面我们来讲一些
数据收发电路相关的一些实例
串行数据收发电路
在我们的各种电子系统里边都有着广泛的应用
下面我们来看一下几种常见的串行数据收发电路
第一种是I2C或者是SPI相关的串型数据收发电路
它主要用于芯片之间电路板上的
各个芯片之间进行数据传输
它的传输的典型数据速率大概在1M到10M bps量级
I2C和SPI的协议里边
数据传输的时候分为时钟线和数据线
大概用两到三根线
就可以完成两个芯片之间的数据传输
第二种常见的数据传输协议是RS232
这种协议广泛用于系统间的数据传输
早期的计算机上
每一个计算机的背后都有一个RS232的接口
下面这张图就是一个典型的RS232的
采用DB9
一共有9根针的这样的接口
它可以用于两台计算机
或者是一台计算机和一台设备之间的数据传输
RS232采用的异步数据传输方式
它的数据传输率相对比较低
大概在10到100Kbps这个量级
对于一些高速的RS232
大概也能到1Mbps左右
但总之它的数据传输率是相对比较低的
第三大类常见的
数据传递方式是计算机和外设之间的数据传输
最常见的就是USB
左下角这张图就是一个USB的接口
USB早期的数据传输率大概可以到480M左右
现在到USB的3.0和USB的3.1
数据传输率提升到5G和10G左右
另一种就是SATA
我们常见的SATA硬盘就是采用了SATA协议
SATA早期的一代协议是1.5G
后来到现在常见的三代协议是6G
目前新出的计算机已经可以达到12Gbps的
数据传输了
我们来设计一个简单的数据传输的电路
串行数据传输涉及到一个发送端和接受端
我们先来看一下发送端
假设我们设计一个具有奇校验功能的
串行发送电路
我们要设计电路呢
接收一个启动电路
或主控电路来的一个strobe信号
一个脉冲信号
这个脉冲信号是高电平有效的脉冲信号
在主控电路给我们脉冲信号的同时
通过八位的数据总线
送给我们一个数据
这样我们要设计电路
就可以利用这个strobe信号来检测数据有效
当数据有效的时候
我们把外部电路送给我们的八位数据锁存下来
并且把这八位数据按照从高到低的次序
依次的从数据输出端送出去
发送完八位数据以后
另外我们还要发送一位奇校验位
为什么要发送校验位呢
是因为在常见的数据通信系统里面
数据在传输的过程中
都有可能发生错误
我们通过在原始数据后面
再附加相应的校验位
可以让接收端进行校验
检查数据传输过程中是不是发生了错误
我们来看一下下面这张波形图
我们要设计的电路在strobe信号有效的时候
检测到数据5A
是一个8位的数据
然后我们通过一根数据线
把这个5A从一个并行的数据
转变成串行的数据发送出去
发送的时候呢
按照从高位在先
低位在后的次序发送
5A
十六进制的5A转变成串行数据
就是01011010
把这8位数据发送完以后
我们再发送一位校验位
那么这里面
我们定义的奇校验位
奇校验位的意思就是说
把前面的8位数据位里面1的个数
加上我们校验位的1
或者是0
总的9位数据里面
1的个数是奇数个叫奇校验位
1的个数是偶数个
就称之为叫偶校验位
那么在这里面
前面一共有四个1
所以我们要产生1这样一个校验位
总共是五个1
是奇数个1
对于这样的串形传送电路
我们设计的时候
按照设计流程
首先确定电路的外特性
外部输入的信号有
时钟 复位 八位数据输入以及一个strobe信号
我们输出的时候只有一位信号
输出一个dout信号
然后我们就要设计电路了
那么按照我们前面讲过的
我们是设计一个带有数据路径的
用有限状态机来控制的数据路径来实现
我们先设计数据路径
核心部分是数据路径
那么对于外部输入的数据din
通常要用一个锁存电路
或者是缓存电路
把din给存下来
那么当strobe信号有效的时候
我们把输入的din用一个D触发器把它存下来
这样
外部主控电路
只需要给出一个时钟周期的数据
它就可以去干别的事情
在后面数据发送期间
可以去干别的事情
所以采用这样一个结构
就可以把数据暂存下来
使外部主控电路能够去做别的事情
那么数据存下来以后
我们要按照从高到低的方式
把数据发送出去
所以
我们还要设计一个并串转换电路
并且要计算出奇校验位
那么这个转换电路是一个什么样的格式呢
我们可以用这样一个
简单的多路选择器来实现并串转换
那么在不同的节拍
或者说不同的时钟周期
我们把缓存下来的八位数据
分别选通
比如说在第一个时钟周期输出八位数据里面第七
然后第六 第五 第四 第三 第二 第一 第零
一直到第零位
把第零位输出完了以后
再输出了一个校验位
这里面一开始
因为数据还没有接收好
所以先输出一个零
所以这个多路选择器是一个由来自控制器的
有限状态机的一个状态信号来决定
在第几个状态输出第几位数据
校验位怎么计算呢
奇偶校验位前面我们已经说了它的定义
那么校验位的计算非常简单
只要把输入数据的所有位做一个异或运算
然后再求一个非
就是我们所需要的奇校验
如果是偶校验
只要把输入的数据求异或就可以了
这就是我们所要设计的数据路径
下面呢
我们就要设计一个有限状态机
来为数据路径产生控制信号
比如说在什么状态去把数据装载下来
在哪些状态把数据依次发送出去
并且把校验位也发送出去
针对我们需要的这样的时序图
我们要在输入数据来到之后
依次发送八位数据
然后产生一个校验位
我们把这些节拍定义成不同的状态
在初始的时候
我们是处于S0状态
那么当有效数据到来的时候
strobe信号有效的时候
我们要进入一个新的状态
开始逐步的往后发送出去
所以按照这样的波形图
我们可以划分出来
我们大概一共要10个状态
就可以画出电路的状态转移图了
假设初始状态是S0状态
对于这样的设计
我们通常对于工程电路里面
我们说过
为了让电路能够比较稳定
所以一般来说
我们用摩尔状态机来进行设计
初始状态是S0
当strobe信号有效的时候
我们进入到第一个状态
发送din[7]然后第二状态发送din[6]
第三状态发送第5位数据
然后逐次一直到S8
把第0位数据发送完
最后用一个9状态
去把奇偶校验位数据也发送出去
然后回到初始状态
等待下一次这样的工作流程
这就是我们要设计的状态机
然后状态机确定完了以后
验证没有问题
我们下面就要开始做代码的设计了
针对数据路径和有限状态机
我们分别把各部分的代码列出来
首先看一下数据路径
那么这个数据路径部分是用来缓存数据
用一个always进程来表示出来
在strobe信号有效的时候
我们把数据给它存进来
把din数据存到寄存器里面去
所以我们描述的是一个标准的D触发器的进程
在低电平有效的复位信号到来的时候
低电平复位信号有效的时候
我们把寄存器清零
然后判断
当strobe信号来的时候
把din打到寄存器里面去
其它时候有一个else分支没有写
表示在其它任何情况下
寄存器保持原来的值不变
这就是数据缓存电路
再来看一下
顺序的数据输出电路
以及奇偶校验位怎么计算
对于这样一个输出电路呢
我们其实用一个组合逻辑电路就可以实现了
那么我们设计的是一个组合逻辑电路
所以always@后面是一个*
表示的是组合逻辑电路
那么这个多路选择器收到的是状态机产生的
状态信号控制
在0状态的时候
我们输出的是0
然后依次1到8这几个状态的时候
我们分别把来自缓存器的数据从高位第7位
一直到第0位
依次送出去
在9状态的时候
就是最后一个状态
我们把缓存器里面的8位数据做异或
求出它的校验位
然后再求一个非
送出去
就是把奇校验位送出去了
在其它默认情况
输出的是0
注意
组合逻辑电路
一定要加default分支
那么这个default分支代表的是
这里面的第10 11 12 13等等这些其它状态
因为对于一个物理可以实现的多路选择器
它的选择端有2的N次方
所以后面的10 11 12 13代表的
是默认的输出0
这就是我们的一个基于组合逻辑电路的
多路选择器
注意
我们必须要有default分支
否则电路就会由多路选择器
变成一个时序逻辑电路
造成功能上的错误
我们再来看一下状态机
那么这是一个标准的有限状态机
状态机的代码我们通常分为两部分
第一个是状态转移部分
状态转移的寄存器
是一个标准的触发器类型的进程
在复位信号有效的时候
先把状态清零
然后在其它的状态时候
把下一个状态送到当前状态
状态计算逻辑是左边这段代码
表述了我们状态机的转移过程
我们稍微看一下左边这段代码
根据当前状态来判断
把这个右边状态机的
所有状态节点全部列一遍
如果是0状态的时候
S0状态
我们判断strobe有效的时候
进入到S1状态
进入1状态
否则还保持0状态不变
如果是1状态
无条件的进入2状态
2状态无条件进入3状态
如此往下都是标准的无条件的
状态转移的过程
最后呢
我们也加一个default分支
因为是组合逻辑
这里面是逻辑
所以default分支表示在其它所有情况下
都进入到了0状态
这样
顺带的就把状态转移图里面
没有表述的其它的控制状态也会进入到0状态
这就是一个标准的有限状态机
用两个进程来描述的一种分割
对于刚才这样的电路
然后代码写完了以后
我们就要去仿真验证我们代码是不是正确的
我们来看一下下面这个波形
在输入数据的时候
我们找一下输入的strobe
在strobe信号有效的时候
strobe信号来一个脉冲的时候
表示外部的数据输入进来了
所以我们把外部的数据给它锁存下来
锁存到一个缓冲区里面
锁存完了以后
然后用后续的状态机从S0状态进入到1状态
然后后续有若干个状态
把输入的数据5A
然后逐步的10110101这样给它发送出去了
就是一个标准的数据发送电路实现的波形
跟我们预期的好像看起来差不多
那么我刚才说了
只是看起来差不多
我们再仔细的分析一下这个电路工作的波形
我们来看一下
对于这个输入的信号
这个数据是5A
我们把输入数据首先缓存
给它存下来
对于输入的5A
我们按照现在的波形
在strobe信号来到的时候
我们原来设计的代码
是在strobe有效的时候
我们才把输入的数据din打到这个缓存器里边来
打到din的delay单元
缓存器里面来
但是看一下这个波形
在输入数据一来到以后
在下一个时钟上升沿
我们就把输入的数据5A打进来了
这时候strobe信号还没有到来
对不对
如果是按照我们左下角这个代码
应该是在strobe信号到来以后
在这个时钟沿
就红线标的这个时钟沿才会把输入的
数据打到这个地方来
所以我们就可以看出来
这段波形所对应的代码
一定不是这段代码
那么也就是说
作者在写代码的时候
肯定跟上级的代码不一样
那么有可能是什么呢
我们可以看到
只要数据信号有变化的时候
在时钟的沿上就会把输入数据5A给打过来了
所以从这块地方
这个红圈标出来的波形里面
我们可以判断出来
有可能代码是在每个时钟的有效沿
只要是在状态S0
都会把输入的数据给它打过来
这是一种可能性
那么我们再看一下后面这段地方
从这个地方我们还不能判断代码是不是这么写的
那么从这个地方我们再判断一下
从din的FE打到din_d的现象
跟前面是一样的
但是在S0状态期间
这里的输入数据00
并没有打过来
所以我们可以判断出来
代码里边并不是仅仅根据S0
或者说din就把数据给它打过来了
而是说
只在这个strobe信号期间才会把输入的
数据打过来
所以我们可以初步判断
它是利用了strobe信号的有效沿
strobe信号的上升沿
把输入数据打过来了
所以我们可以推断出代码大致是这么一种形式
原来我们期望的代码是一个全同步电路设计
用的是时钟信号的有效沿
那么在这里面
作者用的是strobe信号的有效沿
也就是说
这张波形代码是用的strobe信号的
有效沿去做数据缓冲
那么应该说
严格的来说
这种方法没有错误
只是在工程里面
我们尽可能的希望大家用全同步电路
也就是说所有的电路
全要用clock信号是作为电路的时钟沿
这样在后续的物理的
版图布局布线等等实现的时候
这种方法实现的电路会更有效
采用strobe不能说错误
但是在后端的电路设计
整体系统设计的时候
都会有一些新的要求
对于初学者来说
一般不建议使用这种方法
这种方法虽然仿真的波形是对的
但是有可能在后面的实际电路工作的时候
当系统的配合不太合理的时候
或者不太准确的时候
不太严格的时候
那么系统有可能不能稳定的工作
所以为了保证系统能够稳定工作
我们倾向于让大家用全通电路的方法来进行设计
刚才说的是发送电路
那么我们再来看一下接收电路
对于刚才的发送电路比较简单
只是把数据发送出去以后
再发送一个校验位
那么在实际的系统里面呢
在发送数据之前
通常还会发送一个数据的同步信号
因为在串行数据信号线上
只有一根信号线
我们怎么才能知道数据已经开始发送了呢
通常还要加一个同步标记
那么我们先来看一下同步检测器
我们举个例子
假设对于来自数据信号线上的串行数据
我们检测到四个
或者说四个以上的连续1的时候
我们认为数据开始了
帧头检测电路就输出一个1
否则
就输出0
对于这样的要求
我们电路非常简单
电路输入有clk、rstn和串行的输入数据din
当检测到有效数据位以后
有效的帧头以后
我们产生一个dout信号
对于这样的电路
我们就可以不用画它的数据路径部分了
因为非常简单
数据路径几乎可以忽略不计
我们直接用一个简单的
有限状态机就可以把它设计出来了
对于这样一个有限状态机
我们大概用五个状态就可以了
初始状态是S0
处于等待状态
当我们收到第一个数据1以后
我们进入到S1
表示已经收到一个1了
然后再收到第二个1的时候
进入到S2
收到第三个1的时候
进入S3
收到第四个1的时候
进入到了S4
表示我们已经收到了四个1了
这时候我们就会输出一个1
表示帧头检测到了
如果根据我们的提议
我们要做出特别明显的定义
如果收到四个及四个以上的1的时候
那我们就一直输出帧头检测到的有效标记
在整个过程中
在任何一个其它的状态
只要收到数据0
我们就回到初始状态
再重新开始检测帧头
那么这就是帧头检测电路
或者说数据串检测电路的有限状态机
那么下面我们来实现它
首先看一下对于这样的一个电路实现的
时候是一个什么结构
那么刚才说了
它是一个标准的有限状态机
所以电路实现的时候
是有限状态机实现的标准结构
中间是有限状态机的状态寄存器
左边是状态计算逻辑
右边是电路的输出逻辑
在电路只有是S4的时候
我们输出1
其它时刻都输出0
有一个时序逻辑
加两个组合逻辑
用代码描述的时候
我们用一个三段式代码表示出来
左上角是电路的外特性部分描述
这里面呢
我们增加了一个新的内容
以前我们在描述状态机的状态时候
我们都是用实际的数字来表述
这样
在我们看代码的时候
不是那么直观
在这里面
我们定义了一个参数
用S0到S4分别表示实际状态编码里面的
00001一直到10000
采用这种方式以后
我们在描述有限状态机的时候
就可以直接用这些助记符来表述状态
便于我们更直观的去看代码
在我们描述这个有限状态机的时候
我们采用了一种新的风格
把状态计算逻辑和状态寄存器用一个进程去表述
按照这种方式呢
我们就不再区分current_state和next_state
在信号上就只用一个state来表示
当state出现在赋值语句左边的时候
等效的表述是原来的next_state
state出现在赋值号的右边
或者说里边的case语句的条件语句的判断的时候
那么等效的就是current_state
我们看一下
复位的时候
把状态清成S0状态
然后判断
如果当前状态是S0
根据din信号来判断
当前状态S0
进来一个1
进入到下一个状态S1
否则
还保持S0不变
如果当前状态是S1
如果收到din是1
进入到下一个状态是S2
否则还回到S0
依次往下去把它全部描述出来
最后还是要有default分支
那么注意
这里面我把第一个分支的这一条分支
第一个case分支的这一条if语句的
判断分支标成红色
我们来看一下逻辑条件
如果当前状态是S0
条件满足
进入到新的状态
否则
还保持当前的S0不变
在verilog里边
既然这种保持动作是保持原来的值不变
我们这条语句就可以不用写了
如果不写
等效于保持原来不变
所以红色这条语句是可以省略掉的
那么这是状态计算及状态寄存器的代码
那么对应还有一个输出逻辑
输出逻辑是一个组合逻辑电路
所以我们always@(*)
那么组合逻辑电路判断的是state
只有当S4的时候
dout输出1
其它所有的情况我们用一个default表示
dout值是0
那么这就是串行数据检测电路的代码
我们看一下这个仿真结果的波形
当输入din
我们给了两种测试情况
一个是din只有持续的是两个高电平1
也就是输入了两位1
那么这时候从初始状态进入到了S0
S1
S2
然后接着又回到初始状态S0了
如果输入了连续有四个1
那么就能够检测到一个有效的帧头
产生一个帧头检测有效的输出信号
这就是证明我们电路是能够符合要求的
前面讲了一个帧头检测电路
那么下面我们来看一个真实的串形接收电路
假设是一个遥控器的接收解码电路
对于一个真实的串形电路呢
它接收到的数据
通常包含三部分
最前面一部分是同步码
我们举个例子
是一个四位的同步码
1010
也就是说
我们对于来自串行信号线上的数据
一旦检测到这么一个标记
表示我们后面数据马上就要来了
然后紧跟着是四位数据
我们定义是高位在前
实际系统里面也有可能是低位在前的
这是我们这儿给出的定义
然后最后是一位奇偶校验码
这是一个奇校验码
对前面的数据去进行校验
当然
实际的串行通信系统里面
整个协议格式
可能完全不太一样
以我们刚才前面讲的RS232最常用的格式来说
通常同步码只有一位
一个比特1
然后数据是一个8位的
校验位有可能是1位或者是2位的
那么当我们的解码电路检测到校验位正确以后
我们就输出一个数据有效位
并且把这个数据给它送出去
所以我们电路应该是这样一个结构
输入信号有clk
rst
以及串行的输入的din信号
那么我们一旦接收到正确的数据以后
我们就把四位数据送出去
并且给出一个数据有效的信号
我们先来设计这个电路的数据路径部分
对于复杂的电路
我们都要先考虑数据路径
那么这里呢
我们只给出一个数据路径的简图
画的不是特别的规范
对于外部输入的串行数据
对于这样电路呢
其实有多种设计方法
我们这只给出了其中的一种方法
我们首先要检测四位的同步码
按照刚才举的一个小例子
检测帧头电路的例子
我们可以用一个有限状态机去完成同步码的检测
那么当同步码检测完了以后
我们要把四位串行输入进来的数据给它保存下来
所以
我们可以用一个缓冲器
用一个buffer把输入的数据给它保存下来
这个buffer需要的是一个四位的buffer
那么根据输入的数据不同
比如说
先进来的是高位
再进来的是低位
在四个时钟周期里面会连续进来这四位数据
所以呢
我们把这四个时期周期进来的这四位数据
当帧头已经检测完了以后
把这四位数据分别送到buffer相应的四位里面去
然后我们把这四位数据就可以在合适的
时候送出去了
什么是合适的时候呢
是要当这四位数据和后续的奇校验位
我们去做一个校验
当后续的校验位
也就是当四位数据收完以后
进来的第9位数据
和我们这个数据产生的校验位去判断一下
如果校验合适
我们就可以把缓存的
这个buffer里面数据给它送出去了
这就是大致的数据路径
按照这样的一个数据路径
我们来设计状态机
那么状态机要完成这么多共9位数据的接收
所以我们大致可以猜测出
我们可能要用大约九个状态来进行数据的接收
假设初始状态是S0
我们前面要判断同步码
同步码是1010
如果收到一位数据1
我们进入到一个S1状态
表示同步码第一位收到的
如果收到0
1完以后就是0
如果收到0
表示同步码的第二位收到了
我们进入到S2
然后再收到一个1
表示同步码的第三位收到了
再收到一个0
就是1010
表示同步码的第四位
也收到了
我们进入到这个同步码的完全收齐的这个状态
然后再往下呢
我们就用四个状态
S5 S6 S7 S8接收四位数据
收完四位数据以后
我们就可以去判断
进入到S0
我们也可以在这里面加一个S9
专门去收奇偶校验码
然后去判断奇偶校验码和这个前面的
数据的和(有多少位是1)是不是一致
如果是一致
就输出数据
那么我们也可以在S8收完了以后
直接去判断
再回到S0的过程中去判断
当校验位是对的
我们就输出数据
校验位不对
那么我们就不输出数据
这样就更紧凑
只要用9个状态就能够完成了
那么注意
在这里边
如果收到数据1
第一个1收到以后
如果下一个是0
我们进入到S2状态
那么在这个地方S1状态
如果下一个数据是1
我们没有必要回到S0状态
因为相当于说我们连续收到两个1的时候
我们把第一个1丢弃掉
相当于是同步码的第一位
我们认为已经看的到
已经收到了
所以在S1的时候
我们是保持S1不动
在S2的时候
如果错
我们是需要回到S0
在S3错的时候
我们是要回到S1
这是需要注意的一个细节的地方
下面我们用代码来描述我们电路的
状态机和数据路径部分
首先看状态机
应该说状态机跟标准的
状态机描述方式是一样的
代码也是一样的
我们用了一个把状态计算逻辑
跟状态转移合在一起的一个进程来表述
那么初始状态的时候
复位信号的时候
清到状态0
然后在0状态
如果收到1
我们进入到1状态
1状态收到0
进入到2状态
2状态收入到1
进入到3状态
所以刚才我们说
特别要注意的这些细节地方
否则
我们回到0状态
在3状态的时候
我们会进入到4状态
或者回到1状态
注意
在0状态的时候
我们有可能会进入到1状态
也有可能回到0状态
那么由于回到0状态
刚才已经说了
回到原来不动的状态
所以我们就把第二次分支给它省略掉了
在1状态也是一样
它有可能进入到新的状态
或者保持在1状态不变
我们把else分支也省略掉
这就是状态转移的代码
我们再来看一下数据路径
数据路径分为两部分
一个是buffer部分
我们看一下buffer
在复位的时候
buffer先清零
然后在状态4 5 6 7
分别把输入的数据din
在状态4的时候
把din送给buffer[3]
然后buffer[2] buffer[1] buffer[0]
所以在这四个状态
分别把串形输入的
数据送到从高到低这四位数据里边来
也就是说这四个状态完成数据的
四位数据的接收
在输出电路
注意输出电路是一个时序逻辑电路
因为我们需要保持输出在一个时钟状态内不变
首先在复位的时候
我们要输出的数据和strobe信号都清零
然后判断在状态8的时候
在状态8
并且我们计算出来的
奇偶校验和输入进来的奇偶校验位
这两者是一致
我们就输出一个strobe脉冲
并且把buffer内的数据送出去
否则
不输出数据
那么在这两部分代码里边
特别容易犯错的是什么呢
是关于到底在第几个状态去判断数据的接收
初学者的时候
或者说考虑不周到的时候
有时候状态会错一位
比如也有可能把状态4 5 6 7
写成了5 6 7 8
然后在这里面到底是用八状态
还是九状态
还是零状态
还是七状态
这个地方非常容易犯错误
我们看一下仿真的波形
我们对照着原始的有限状态机的
期望值和波形来看一下
我们输入的数据
举个例子
输入的数据是10101100
前四位是同步码
后四位是数据1100
然后是一个校验位
一个奇校验位是1
那么这是我们电路的状态机
初始状态是S0
在时钟的有效沿
如果我们检测到了1
我们进入到S1状态
也就是说S0状态
如果检测到一个输入信号1
我们进入到S1状态
在S1状态这个沿
我们检测到输入数据0
进入到了S2状态
在S2状态检测到输入数据1
进入到S3状态
在S3状态能检测到输入数据0
我们进入到S4状态
在S4状态
我们检测到输入数据1
我们把输入数据1
在S4状态
然后在有效沿到来的时候
检测到输入数据1
我们就要把这个1存到buffer的最高位
然后在S5状态
我们又检测到数据1
把这个数据1存到buffer第二位
这是buffer的[3]
这是buffer的[2]
然后依次
在S6状态
把输入数据的0存到buffer的倒数第二位
在7状态
把输入数据0存到buffer的最后一位
所以用了4 5 6 7这四个状态
把buffer给它填满了
然后在状态8的有效沿检测到这个校验位
校验位是1
然后我们把这个校验位和buffer计算出来的
校验值去计算
当这两者相等的时候
我们认为数据是收到了
并且校验位是正确的
所以在state=8输出的时候
产生一个strobe信号
并且把数据送出来
从状态图上来看
我们可以看出
输出strobe信号和data的时候
对应的相当于是我们电路已经回到0状态
回到我们状态图上
前面结构图可以看出
因为我们输出电路本身就是一个时序逻辑电路
所以输出电路在输出这两个型号的时候
实际上对应状态机已经回到了S0状态
这就是我们的一个数据接收电路
以及它的仿真结果
那么今天的这几个例子
实际上代表了我们传统的
或者是非常常用的数据收发电路
包括发送端怎么设计
接收端怎么设计
同步电路怎么设计
-软件下载说明
-a) 集成电路的应用及市场
-a) 集成电路的应用及市场--作业
-b)集成电路的制造过程
-b)集成电路的制造过程--作业
-c)从CPU的发展看IC的进展
-c)从CPU的发展看IC的进展--作业
-d)从行业的发展看IC的进展
--Video
-d)从行业的发展看IC的进展--作业
-e)从ISSCC看IC的发展方向
--讲课视频
-e)从ISSCC看IC的发展方向--作业
-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)
--讲课视频
-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)
-b)组合逻辑电路
--Video
-2、数字集成电路设计方法--b)组合逻辑电路
-c)时序逻辑电路(1)
-d)时序逻辑电路(2)
-2、数字集成电路设计方法--d)时序逻辑电路(2)
-a)Verilog的历史和学习要点
--讲课视频
-b)端口、信号及数据类型
--讲课视频
-b)端口、信号及数据类型--作业
-c)逻辑电平及数据操作
--讲课视频
-3、Verilog语法--c)逻辑电平及数据操作
-d)Assign 语句
-e)Assign 举例
-f)Always
-f)Always--作业
-g)阻塞与非阻塞赋值
--Video
-3、Verilog语法--g)阻塞与非阻塞赋值
-h)D触发器的描述
--Video
-i)时序电路的设计
--Video
-i)时序电路的设计--作业
-j) 面向测试的Verilog语法(1)
-k) 面向测试的Verilog语法(2)
-k) 面向测试的Verilog语法(2)--作业
-a)电路设计实例1
--Video
-b)电路设计实例2
--讲课视频
-b)电路设计实例2--作业
-c)电路设计实例3
--讲课视频
-Modelsim仿真
-a)综合及相关基本概念
--Video
-a)综合及相关基本概念--作业
-b)综合及优化
--Video
-c)门级仿真
--门级仿真
-d)Quartus综合及分析(1)
--讲课视频
-e)Quartus综合及分析(2)
--讲课视频
-e)Quartus综合及分析(2)--作业
-f)Quartus综合及分析(3)
--Video
-g)Quartus综合及分析(4)
--Video
-g)Quartus综合及分析(4)--作业