当前课程知识点:IC设计与方法 > 3、Verilog语法 > h)D触发器的描述 > Video
前面我们讲了组合逻辑电路设计所需要用到的
一些Verilog语法知识以及Verilog语法要素
下面我们再来看一下时序逻辑电路的设计
时序逻辑电路设计所用到的Verilog语法要素
和组合逻辑电路设计的几乎完全一样
所需要的唯一不同的
就是赋值语句上稍微有一些差异
以及always语句敏感表的写法有一点点差异
我们来看一下幻灯片
在用always块来设计时序逻辑电路的时候
右边这两段代码
上面这段代码是组合逻辑电路设计
它的敏感表都是直接用各个信号去或一下
在时序逻辑电路设计的时候
always块的敏感表变成是posedge
或者是negedge的某个信号
表示由某一个信号
通常就是时钟信号的有效沿来触发always块
对于这样的描述就是一个时序逻辑电路设计
组合逻辑电路的特点
是敏感表里面可能有一大堆信号
对于复杂的组合逻辑电路可能会有几个
十几个甚至几十个信号
时序逻辑电路的敏感表里面
通常只有一个或是两个信号。一个是时钟信号
另外一个是复位信号
在讲具体的时序逻辑电路设计之前
我们又要回过头来看一下D触发器
因为D触发器是时序逻辑电路设计的基础
我们来看一下D触发器
通常D触发器有时钟端、数据输入端
异步的置位或者是复位端以及数据输出
同向输出及反向输出
D触发器的工作时序
大家应该还记得
我们可以用大约三句话
来描述D触发器的功能
第一个是当异步的置位信号
或者是复位信号有效的时候
D触发器被强制设置成固定的0或者是1状态
完成一个置位或者是复位
当置位、复位信号无效
或者说置位复位信号被释放(release)以后
在时钟的有效沿到来的时候
D触发器会把输入的数据打到输出端去
送到输出端去
这是第二个功能
第三个是在时钟信号的有效沿之后的其他时候
异步和复位信号也是无效的时候
D触发器的输出保持原来的值不变
这是D触发器的功能
我们时序逻辑电路的设计
都是在D触发器的模型上进行的
所以
我们可以先来看一下
描述最简单的D触发器
我们用什么样的代码来描述?
上面这段代码是一段Verilog代码
描述的D触发器
下面这段代码
是VHDL的语言描述的D触发器代码
仅供大家参考
或者说对比
可以看出来
Verilog语言描述D触发器的代码
看起来更简洁一些
always块后面@的是posedge的clock
表示这个D触发器
是在时钟信号的上升沿有效(动作)的D触发器
是一个上升沿
上升沿(触发的)D触发器
在时钟上升沿来到的时候
把输入的数据信号D打到Q端
所以
它描述的是
D触发器的数据输入端的信号叫D
D触发器的输出叫做Q
这段代码
三行代码表述了这个D触发器
我们来看一下
我们来看一下
这段代码和D触发器的
刚才的功能上的3个要素去对比一下
因为这里面
描述的是最简单的D触发器
没有异步的置位端和复位端
所以
这里面就没有异步置位和复位信号了
对D触发器功能的描述也只剩两句话
第一个是时钟的有效沿
时钟的有效沿来到的时候
这是always块的敏感表
就是说只有当这个条件满足的时候
才会把数据D送给Q
隐含的就是说有效沿不存在的时候
没有到来的其它时刻
输出信号Q保持原来的值不变
所以这段代码完美的跟D触发器的功能
能够一致起来
下面我们再来看一个完整的D触发器
一个带有低电平
复位端的D触发器
对于异步复位信号
我们对它命名的时候
异步复位信号通常有两类
一类是高电平有效
一类是低电平有效
如果复位信号是低电平有效的话
我们在信号命名的时候
后面会加一个N
方便我们在看到代码的时候
就知道它的电平的有效性
到底是高电平还是低电平
其它部分都是类似的
我们来看一下实际的代码
首先always的敏感表里面发生了一点点变化
以前
只有一个关于时钟沿的判断
现在
增加了一个复位信号(reset信号)的判断
如果是低电平有效
如果信号是低电平有效的话
对于复位信号的判断
我们就要换成是negedge
如果是高电平有效的话
这个地方就是posedge
第二个,对于代码的描述
原来只有一个把D赋给Q的过程
表示只要时钟沿到来
就把D赋给Q
现在
发生了一点点变化
因为复位信号的优先级更高
复位信号的优先级更高
所以
我们要首先判断是不是复位信号有效
因为reset是低电平
所以
这里我们加一个感叹号
表示是一个低电平信号
或者说是reset的非
当这个条件有效的时候
把D触发器清零
否则
把D送给Q
什么意思呢
首先在敏感表执行的过程中
不管是时钟的有效沿来到了
还是reset的有效沿(来到了)
因为是低电平信号
也就是说
当reset进入低电平的时候
一定是它的下降沿
会导致这个进程被激活
对吧
这两个信号都有可能触发进程内部的运行
进入到(进程)内部以后
我们判断一下到底是哪个条件触发的
如果是reset触发的
我们就清零
如果是时钟沿触发的
我们执行下面一句话
所以这样的进程
对应的就是我们D触发器的三句话
低电平的reset信号到来的时候把它清零
其它情况我们看一下
如果是时钟沿到来了
数据被送到输出端
其它情况输出保持不变
这样的进程
正好对应了我们的标准的D触发器
我们在写代码的时候
要适当的检查一下
如果是低电平的reset信号
这里是negedge对应的这个地方
有一个感叹号
判断低电平信号
如果是高电平的信号的话
这个地方是posedge对应的地方
就没有感叹号了
下面我们还要再看一下复位信号
在电路里,复位号是一个很重要的问题
复位信号有刚才所说的
低电平或高电平
还有同步和异位等等各种区别
对于D触发器而言
比如当低电平的reset信号到来的时候
触发器的输出端被强制置零
不管这时候是不是有时钟沿到来
输出都是被置零
当reset信号不存在的时候
在这些时刻
从这儿到这儿的这些时刻
每一个时钟沿到来的时候
时钟沿到来的时候
输入的数据信号就会被送到输入端
也就是说D触发器的状态会发生变化
在这个时钟沿输入信号1会被送到输出端
也就是D触发器会被从0反转到1
反转到1以后
在下一个时钟上升沿之前
整个这一段
我们说整个时钟周期内
D触发器的输出都是保持不变
不管输入信号是不是发生了变化
在这个时钟沿输入信号又被打到输出端
D触发器又从1反转到了0
然后一直保持不变
在工程设计里
通常置位信号跟复位信号
这两个信号不会被同时使用
只会使用其中的一个
刚才我们看的是
我们称之为异步复位的D触发器
带有异步复位的D触发器
实际上我们电路设计的时候
有时候还会用同步复位的方式来进行复位
就像右边这段电路
右边这段代码所对应的电路
首先在敏感表里
只有时钟信号,表示D触发器本身
没有异步复位信号
在代码里面
我们又判断了复位信号
如果有复位信号的话
D触发器的值被清零
否则
是把输入信号送给reset
从这段代码和敏感表的结合
我们就可以判断出来
只有在时钟上升沿到来的时候
电路才会去检查复位信号是不是有效
从而去改变D触发器的输出值,是不是清零
这种方式
这种复位方式
我们称之为同步复位
其实从某个角度来说
这个复位
已经是D触发器内部电路中的一部分了
并不一定是D触发器本身
自己具备的复位功能叫同步复位
为什么我在这里花这么长时间
去强调异步复位或者是同步复位呢
这跟我们实际电子产品的结构
是有很大的关系的
异步复位
我们有什么要求呢?
我们是要求异步复位的
整个异步复位电平期间
或者说异步复位电平释放时刻
跟时钟的上升沿是要错开的
对吧
因为在D触发器的功能定义里
如果异步复位信号的释放和时钟上升沿
同时到达的时候
电路的行为没有定义
这时候是什么情况?
就会导致电路的内部状态不确定
对吧
所以为了解决实际电子产品的可靠性问题
我们就要采用各种技术
来解决同步复位和异步复位的问题
我们的一些低端电子产品
通常会采用异步复位的方式
因为这样比较简单
在电路上只要接一个外置的电阻或者电容
就能够完成异步复位的功能了
但是这种简单的异步复位电路
通常没法保证异步复位端
和时钟信号之间的时序关系
就有极小的可能性
造成复位不可靠
具体表现就是一些低端电子产品
有可能你塞上电池
它不能正常工作
屏幕花了
或者是类似的情况
把电池、电源关掉重开就好了
或者说把电池拔掉重新加上就好了
这时候
我们通常就可以猜测出
复位电路设计的不是很可靠
怎么增加可靠性
要么就是把复位方式
从异步复位改成同步复位
要么就是要做一个特殊的复位同步电路
让异步复位信号的时序
跟时钟信号的有效沿能够错开
这是工程产品或者工业产品里面
必须要做的一件事
-软件下载说明
-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)--作业