7. 时序逻辑的开始

您所在的位置:网站首页 寄存器结构图片大全 7. 时序逻辑的开始

7. 时序逻辑的开始

2024-07-17 00:40| 来源: 网络整理| 查看: 265

7.3.3. 程序设计¶ 7.3.3.1. 模块框图¶

我们先给模块取一个名字叫flip_flop,接下来是分析端口信号:D触发器能够正常工作一定有时钟,每当时钟的“沿(上升沿或下降沿)”来到时我们采集到稳定有效的数据;其次还需要的就是复位信号,用于让触发器的回到初始状态把数据清零;因为是用按键控制led灯的亮灭,所以输入端我们还需要一个按键控制信号;输 出就只有一个控制led灯的信号,这里我们的输入输出信号都是1bit的。根据上面的分析设计出的Visio框图如图 15‑4所示。

图 15‑4 模块框图

端口列表与功能总结如表格 15‑1所示。

表格 15‑1 输入输出信号描述

信号

位宽

类型

功能描述

sys_clk

1Bit

Input

工作时钟,频率50MHz

sys_rst_n

1Bit

Input

复位信号,低电平有效

key_in

1Bit

Input

按键信号输入

led_out

1Bit

Output

输出控制LED灯

7.3.3.2. 波形图绘制¶

D触发器根据复位的不同分为两种,一种是同步复位的D触发器,另一种时异步复位的D触发器,下面就是详细介绍这两种D触发器的异同,以及波形的设计。从本章开始,我们后面设计的工程项目都主要以时序逻辑为主,其中波形的设计尤为关键,希望大家能够认真体会其中的精妙之处。

同步复位的D触发器

同步复位的D触发器中的“同步”是和工作时钟同步的意思,也就是说,当时钟的上升沿(也可以是下降沿,一般习惯上为上升沿触发)来到时检测到按键的复位操作才有效,否则无效。如图 15‑5所示最右边的三根红色的竖线表达的就是这种效果,sys_rst_n被拉低后led_out没有立刻变为0,而是当syc_clk的上升沿到来的时候led_out才复位成功,在复位释放的时候也是相同原因。

图 15‑5 同步复位的D触发器波形图

异步复位的D触发器

异步复位的D触发器中的“异步”是和工作时钟不同步的意思,也就是说,寄存器的复位不关心时钟的上升沿来不来,只要有检测到按键被按下,就立刻执行复位操作。如图 15‑6所示最右边的两根红色的竖线表达了这种效果,sys_rst_n被拉低后led_out立刻变为0,而不是等待syc_clk的上升沿到来的时候l ed_out才复位,而在复位释放的时候led_out不会立刻变为key_in的值,因为还要等待时钟上升沿到来到时才能检测到key_in的值,此时才将key_in的值赋值给led_out。

图 15‑6 异步复位的D触发器波形图

同步复位的D触发器和异步复位的D触发器的不同点已经在上面已经进行了详细的讲解,主要就是复位有效的条件是“立刻”执行还是等待“沿”再执行的区别。但是他们也有很多相同点,相比于组合逻辑电路来讲,对于电路中产生的毛刺有着极好的屏蔽作用,如上图中间位置的一组红色竖线所示,是我们模拟在干扰情况下产生的毛刺现象 ,因为时序电路只有在沿到来时才检测信号是否有效,所以在两个上升沿之间的毛刺都会被自然的过滤掉,可以大大减少毛刺现象产生的干扰,提高了电路中数据的可靠性。

时序电路还有一个特点,就是“延一拍”的效果。上面两个图最左边的一组红色竖线所表达的就是这个现象。key_in在复位后的第一个时钟的上升沿来到时拉高,我们可以发现此时led_out并没有在同一时刻也跟着拉高,而在之前的组合逻辑中输出是在输入变化的同一时刻立刻变化的,这是什么原因呢?

因为我们所画的波形图都是基于前仿真的,没有加入门延时的信息,所以很多时候数据的变化都是和时钟直接对齐的。当表达时序逻辑时如果时钟和数据是对齐的,则默认当前时钟沿采集到的数据为在该时钟上升沿前一时刻的值;当表达组合逻辑时如果时钟和数据是对齐的,则默认当前时钟沿采集到的数据为在该时钟上升沿同一时刻的值。 而仿真工具在进行RTL代码的仿真时也遵循这个规则,我们也可以理解为仿真寄存器是按照建立时间Tsu(指触发器的时钟信号上升沿到来以前,数据稳定不变的最小时间)最大(一个时钟周期),保持时间Th(指触发器的时钟信号上升沿到来以后,数据稳定不变的最小时间)最小(为0)的理想环境下进行的;而在仿真组合逻辑时 因为没有时钟也就没有建立时间和保持时间的概念,所以数据只要有变化就立刻有效。这里我们在画波形图的时候一定要记住这个“延一拍”的效果,否则我们绘制的波形图就会和最后的仿真结果不符,也可能会导致最后的逻辑混乱。

7.3.3.3. 代码编写¶

同步复位的D触发器

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31module flip_flop ( input wire sys_clk , //系统时钟50Mh,后面我们都是设计的时序电路 //所以一定要有时钟,时序电路中几乎所有的信 //号都是伴随着时钟的沿(上升沿或下降沿,习 //惯上用上升沿)进行工作的 input wire sys_rst_n, //全局复位,复位信号的主要作用是在系统出现 //问题是能够回到初始状态,或一些信号的初始 //化时需要进行复位 input wire key_in , //输入按键 output reg led_out //输出控制led灯 ); //led_out:led灯输出的结果为key_in按键的输入值 always@(posedge sys_clk) //当always块中的敏感列表为检测到sys_clk上升沿时 //执行下面的语句 if(sys_rst_n == 1'b0) //sys_rst_n为低电平时复位,但是这个复位有个大前 //提,那就是当sys_clk的上升沿到来时,如果检测到 //sys_rst_n为低电平则复位有效 led_out


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3