当前课程知识点:IC设计与方法 >  4、电路设计实例 >  c)电路设计实例3 >  讲课视频

返回《IC设计与方法》慕课在线视频课程列表

讲课视频在线视频

讲课视频

下一节:Modelsim仿真

返回《IC设计与方法》慕课在线视频列表

讲课视频课程教案、知识点、字幕

前面我们讲了一些

组合逻辑电路和时序逻辑电路设计的例子

下面我们来讲一些

数据收发电路相关的一些实例

串行数据收发电路

在我们的各种电子系统里边都有着广泛的应用

下面我们来看一下几种常见的串行数据收发电路

第一种是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状态

这就是我们的一个数据接收电路

以及它的仿真结果

那么今天的这几个例子

实际上代表了我们传统的

或者是非常常用的数据收发电路

包括发送端怎么设计

接收端怎么设计

同步电路怎么设计

IC设计与方法课程列表:

课程准备:Quartus II软件的下载

-软件下载说明

--Quartus II软件下载教程

1、集成电路的发展

-a) 集成电路的应用及市场

--1-1集成电路应用及市场

-a) 集成电路的应用及市场--作业

-b)集成电路的制造过程

--1-2 集成电路的制造过程

-b)集成电路的制造过程--作业

-c)从CPU的发展看IC的进展

--1-3从CPU的发展看IC的进展

-c)从CPU的发展看IC的进展--作业

-d)从行业的发展看IC的进展

--Video

-d)从行业的发展看IC的进展--作业

-e)从ISSCC看IC的发展方向

--讲课视频

-e)从ISSCC看IC的发展方向--作业

2、数字集成电路设计方法

-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)

--讲课视频

-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)

-b)组合逻辑电路

--Video

-2、数字集成电路设计方法--b)组合逻辑电路

-c)时序逻辑电路(1)

--2-3时序逻辑电路的设计方法 (一)

-d)时序逻辑电路(2)

--2-3时序逻辑电路的设计方法 (二)

-2、数字集成电路设计方法--d)时序逻辑电路(2)

3、Verilog语法

-a)Verilog的历史和学习要点

--讲课视频

-b)端口、信号及数据类型

--讲课视频

-b)端口、信号及数据类型--作业

-c)逻辑电平及数据操作

--讲课视频

-3、Verilog语法--c)逻辑电平及数据操作

-d)Assign 语句

--3-1-4assign语句

-e)Assign 举例

--3-1-5 Assign 举例

-f)Always

--3-1-6 Always

-f)Always--作业

-g)阻塞与非阻塞赋值

--Video

-3、Verilog语法--g)阻塞与非阻塞赋值

-h)D触发器的描述

--Video

-i)时序电路的设计

--Video

-i)时序电路的设计--作业

-j) 面向测试的Verilog语法(1)

--3-3-1面向测试的Verilog语法(1)

-k) 面向测试的Verilog语法(2)

--3-3-2 面向测试的Verilog语法(2)

-k) 面向测试的Verilog语法(2)--作业

4、电路设计实例

-a)电路设计实例1

--Video

-b)电路设计实例2

--讲课视频

-b)电路设计实例2--作业

-c)电路设计实例3

--讲课视频

5、Modelsim仿真工具

-Modelsim仿真

--Modelsim仿真

6、Quartus工具

-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)--作业

讲课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。