首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)

  • 23-10-05 03:22
  • 2457
  • 13155
blog.csdn.net

目录

前言

硬件语言描述

测试文件

仿真图

综合工具综合后的原理图

综合介绍D触发器

维基百科介绍:

其他来源(课本):

8位的D触发器

Verilog HDL程序设计

测试文件:

仿真波形:

综合工具综合后的电路:

内部电路图(Technology Schematic)为:


前言

D触发器虽然基础,但很重要,扎实地掌握对于硬件电路学习者必不可少,传统地认识D触发器的过程大概是给出电路图,分析电路图,写出真值表,然后硬件语言描述,功能仿真,用综合工具综合出电路。

这对于直观的认识D触发器还是有点儿困难,个人觉得这种简单的电路,用Verilog HDL硬件语言描述可以直观地认识到它的功能,然后在观察其仿真波形,之后在用综合工具综合出相应的电路图来查看,再对其进行分析,会更符合至少是个人的认识规律。

分析电路原理图虽然不难,但是这个过程还是很繁琐,这里不打算进行这种分析。

下面直接给出1位D触发器的Verilog HDL硬件语言描述和测试文件;(包括异步清零和同步复位)

硬件语言描述

下面的硬件语言描述的是一个1为的D触发器,其功能为,当时钟上升沿到来时,输入信号d传输到输出端q,清零信号在always的敏感列表中,使得该触发器还具有异步清零的功能,rst为同步复位信号。

  1. //1位D触发器Verilog HDL程序代码
  2. module dff(clk,clr,rst,d,q);
  3. input clk;
  4. input clr,rst;
  5. input d;
  6. output q;
  7. reg q;
  8. always@(posedge clk or posedge clr) //敏感源为时钟上升沿或清零信号的上升沿(异步清零)
  9. begin
  10. if(clr == 1'b1) //清零信号有效时(高电平),输出清零
  11. q <= 1'b0;
  12. else if(rst == 1'b1) //复位信号有效时(高电平),输出置1(同步置1)
  13. q <= 1'b1;
  14. else //二者都无效时,输出保持当前状态
  15. q <= d;
  16. end
  17. endmodule

测试文件

  1. `timescale 1ns/1ps
  2. module dff_tb;
  3. wire q;
  4. reg clk,clr,rst,d;
  5. //时钟信号
  6. always
  7. begin
  8. # 10 clk = ~clk;
  9. end
  10. //初始化
  11. initial
  12. begin
  13. clk = 1'b0;
  14. clr = 1'b0;
  15. rst = 1'b0;
  16. d =1'b0;
  17. #10 rst = 1'b1; //10ns后复位信号有效,此刻应该输出置1
  18. #10 clr = 1'b1; d = 1'b1; //又过10ns,清零信号有效,且复位信号也继续有效,但清零信号优先级高,所以,此刻输出应该清零
  19. #10 clr = 1'b0; rst = 1'b0; //又过了10ns,此刻复位和清零信号均无效,此刻输出应该保持当且输入的状态,也就是高电平
  20. #20 d = 1'b0;
  21. #20 d = 1'b1;
  22. end
  23. //实例化
  24. dff u1(.clk(clk), .clr(clr), .rst(rst), .d(d), .q(q));
  25. endmodule

仿真图

综合工具综合后的原理图

简单的分析下这个电路,与rst相连的是一个二选一的选择器的选择端,当rst为1的时候,也就是高电平时候,选择Data1有效,此刻选择器的输出结果result为1,选择器的输出又接到D触发器的数据输入端,这就意味着时钟上升沿到来时,结果为1。这不就是说明rst高电平有效,有效时,置1。

当rst为0时,选择器的输入Data0被选中作为D触发器的输入,这不就意味着rst无效时,D触发器的输出取决于输入信号的当前状态吗!

当然,优先级别更高的是clr,也就是说当clr有效时,输出清零,而不管rst以及输入的值是什么。这点在硬件语言描述中有体现出来,这里综合出来的电路也体现出来了。


综合介绍D触发器

维基百科介绍:

The D flip-flop captures the value of the D-input at a definite portion of the clock cycle (such as the rising edge of the clock). That captured value becomes the Q output. At other times, the output Q does not change.

这段话来自于维基百科。来说说这句经典的话是什么意思吧。

D触发器在时钟周期的某一部分(例如时钟的上升沿)捕获D输入的值。 捕获的值成为Q输出。 在其他时候,输出Q不会改变。

它表达了一个十分普遍的意思,就是D触发器通常在时钟上升沿时,此刻会捕获D输入的值,然后保持这一值不变,直到下一个上升沿到来时,重新捕获D输入的值。


其他来源(课本):

在数字电路或数字系统中,触发器是时序逻辑电路用来存储1位二进制信息的基本单元电路,它靠双稳态电路来保存信息,具有存储记忆功能。触发器属于边沿敏感的存储器件,数据存储的动作由时钟信号的上升沿或下降沿进行同步。

所存储的数值取决于时钟在其有效沿(上升沿或下降沿)发生跳变时数据输入端当时的数据,在其他所有时间上数据值及其跳变均被忽略,输出保持跳变沿时刻捕获的值。

注意:

D触发器是一种最简单的触发器,它在每个时钟的有效边沿存储输入端的当前值,该值与当前存储的数据值无关。虽然在clk的两个有效边沿之间的D数据的跳变,但是,在clk有效沿到来之前,D必须稳定足够的时间,否则器件可能工作不正常。



8位的D触发器

本想到此结束的,但还是附送一个礼包吧。

上面仿真的是一个1位的D触发器,下面用硬件语言描述一个简单的8位D触发器,信号的输出q由clk的上升沿和输入信号d决定,当时钟上升沿到来时,输入端信号d传输到输出端q,不含清零和复位信号。(清零和复位信号,随便一加就好了,这里为了通用性不加了。)

Verilog HDL程序设计

  1. //1位D触发器Verilog HDL程序代码
  2. module dff(clk,d,q);
  3. input clk;
  4. input[7:0] d;
  5. output[7:0] q;
  6. reg [7:0]q;
  7. always@(posedge clk) //敏感源为时钟上升沿
  8. begin
  9. q <= d;
  10. end
  11. endmodule

测试文件:

  1. `timescale 1ns/1ps
  2. module dff_tb;
  3. wire[7:0] q;
  4. reg clk;
  5. reg[7:0] d;
  6. //时钟信号
  7. always
  8. begin
  9. # 10 clk = ~clk;
  10. end
  11. //初始化
  12. initial
  13. begin
  14. clk = 1'b0;
  15. d =8'b00000000;
  16. #10 d = 8'b00000011;
  17. #10 d = 8'b00000000;
  18. #10 d = 8'b00000111;
  19. #40 d = 8'b00001111;
  20. end
  21. //实例化
  22. dff u1(.clk(clk), .d(d), .q(q));
  23. endmodule

仿真波形:

综合工具综合后的电路:

内部电路图(Technology Schematic)为:

可见,它是由8个1位的D触发器组成的。

注:本文转载自blog.csdn.net的李锐博恩的文章"https://blog.csdn.net/Reborn_Lee/article/details/81322548"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top