数字IC笔面基础之触发器——DFF、TFF、JKFF(附Verilog实现)

该文章已生成可运行项目,

写在前面的话

触发器是数字IC最基础的知识点,区别于锁存器,触发器是只有在时钟信号触发时才能动作的存储单元,每个触发器可以存储1位二值信号。触发器有两个基本特点:
(1)具有自行保持稳定状态,包含逻辑0和逻辑1。
(2)可以根据输入信号置为1或0状态。

关键点:

笔面时常考的知识点是区分锁存器(Latch)和触发器(Flip-Flop),了解哪些代码风格可能会被综合成Latch,尽量避免。(在实际项目中有时需要故意生成Latch)

锁存器(Latch):电平触发,数据存储取决于信号的电平值。电平有效时,输出信号被锁存。
锁存器如下:
在这里插入图片描述

触发器(Flip-Flop):边沿触发,数据存储取决于信号的上升沿或下降沿。
触发器如下:
在这里插入图片描述
寄存器(Register): Verilog中用来暂时存放数据的变量。变量被声明为寄存器时,可能被综合成Latch或者Fliop-Flop。

锁存器和触发器优缺点:
锁存器优点:
(1)面积比触发器小
门电路时构建组合逻辑电路的基础,而锁存器和触发器是构成时序逻辑电路的基础。
晶体管>>门电路>>锁存器>>触发器
Latch完成同一个功能所需的门较触发器要少,在ASIC中用的比较多。

(2)速度比触发器快
用来地址锁存是很合适,不过一定要保证所有的Latch信号源的质量,锁存器在CPU设计中很常见,锁存器使得CPU的速度比外部IO部件逻辑快很多。

锁存器缺点:
(1)电平触发,非同步设计,受布线延迟影响较大,很难保证输出没有毛刺。
(2)Latch将静态时序分析变得极其复杂。

触发器优点:
(1)边沿触发,同步设计,不容易受毛刺的影响。
(2)时序分析简单

触发器缺点:
(1)面积比Latch大,消耗的门电路比latch多。
(2)过多的触发器使得数据逻辑变得复杂。

D触发器

D触发器的次态取决于触发之前D端口的状态。
在这里插入图片描述

基本正边沿触发D触发器

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT904  1320343336@qq.com
// File   : dff.v
// Create : 2022-11-01 11:10:05
// Revise : 2022-11-01 11:10:05
// Editor : HFUT Integrated Circuit Design & Research Center
// Verdion: v1.0
// Description: 正边沿触发 DFF
// -----------------------------------------------------------------------------
module dff (
	input 		clk  		,   // Clock
	input  		d			, 	// input
	output reg 	q  			  	// output	
);


always @(posedge clk ) begin 		//上升沿触发
		q <= d ;
end

endmodule 

异步复位D触发器

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT904  1320343336@qq.com
// File   : asdff.v
// Create : 2022-11-01 11:14:23
// Revise : 2022-11-01 11:14:23
// Editor : HFUT Integrated Circuit Design & Research Center
// Verdion: v1.0
// Description: 异步复位 DFF
// -----------------------------------------------------------------------------
module asdff (
	input 			clk 		,   // Clock
	input 			rst_n 		, 	// Asynchronous reset active low
	input 			d  			,  	// input
	output 	reg 	q 				//output
);

always @(posedge clk or negedge rst_n) begin 
	if(~rst_n) begin
		 q <= 1'b0 	;
	end 
	else begin
		q  <=  d  ;
	end
end
endmodule 

带清零和置一的D触发器

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author :HFUT904   1320343336@qq.com
// File   : csdff.v
// Create : 2022-11-01 15:23:49
// Revise : 2022-11-01 15:23:49
// Editor : HFUT Integrated Circuit Design & Research Center
// Verdion: v1.0
// Description: 带清零和置位 DFF
// -----------------------------------------------------------------------------
module csdff (
	input 		clk  	,   // Clock
	input 		set 	, 	// set
	input 		rst_n 	, 	// Asynchronous reset active low
	input 		d 		,	//input 
	output 	reg q 			//output 	
);

always @(posedge clk , negedge rst_n , posedge set) begin 
	if(~rst_n) begin
		 q <= 1'b0 	;
	end 
	else if(set) begin
		 q <=  1'b1 ;
	end
	else begin
		 q <=  d 	;
	end
end

endmodule 

T触发器

T触发器是在数字电路中,凡在CP时钟脉冲控制下,根据输入信号T取值的不同,具有保持和翻转功能的触发器,即当T=0时能保持状态不变,当T=1时一定翻转的电路。
在这里插入图片描述

// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT904  1320343336@qq.com
// File   : tff.v
// Create : 2022-11-01 15:31:04
// Revise : 2022-11-01 15:31:04
// Editor : HFUT Integrated Circuit Design & Research Center
// Verdion: v1.0
// Description:TFF
// -----------------------------------------------------------------------------
module tff (	
			input 		clk 		,
			input 		rst_n 		,
			input 		T  			,
			output reg 	Q 			

	);

	//特征方程写法
		always @(posedge clk or negedge rst_n) begin
			if(~rst_n) begin
				 Q 	<= 0;
			end 
			else begin
				 Q <= (T&~Q)|(~T&Q) ;
			end
		end

	//查找表写法
	/*
	always@(posedge clk) begin
		if(T==1'b1)
			Q <= ~Q ;
		else
			Q <= Q ;
	end
	*/

endmodule 

JK触发器

JK触发器是数字电路触发器中的一种基本电路单元。JK触发器具有置0、置1、保持和翻转功能。在各类集成触发器中,JK触发器的功能最为齐全。在实际应用中,它不仅有很强的通用性,而且能灵活地转换其他类型的触发器。由JK触发器可以构成D触发器和T触发器。
在这里插入图片描述

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT904  1320343336@qq.com
// File   : jkff.v
// Create : 2022-11-01 15:33:16
// Revise : 2022-11-01 15:33:16
// Editor : HFUT Integrated Circuit Design & Research Center
// Verdion:
// Description:
// -----------------------------------------------------------------------------
module jkff (
		input 			clk	 	,
		input 			rst_n	,
		input 			J		,
		input 			K		,
		output 	reg 	Q
);

	//状态方程写法

	always @(posedge clk or negedge rst_n) begin
		if(~rst_n) begin
			 Q	<= 1'b0;
		end 
		else begin
			 Q <= (J&~Q)|(~K&Q) ;
		end
	end

	//查找表写法
	/*
	always@(posedge clk ) begin
		case({J,K})
			2'b00:  Q <= Q 		;
			2'b01:  Q <= 1'b0 	;
			2'b10:  Q <= 1'b1 	;
			2'b11:  Q <= ~Q 	;
		endcase 
	end
	*/
	
endmodule

总结

触发器作为数字IC最基础的内容,常常会考手撕代码、门级电路组成、与锁存器的优缺点、代码风格避免生成latch等内容。在跨时钟域中也会用两级DFF避免亚稳态的产生,我在笔面中遇见最多的是DFF和TFF,会结合建立时间、保持时间、跨时钟域、代码风格等一起考。建议各位同学注意触发器的底层电路,切实体会触发器和锁存器的区别。

本文章已经生成可运行项目
### 数字IC设计开发工具及相关资料 数字集成电路(Digital IC)的设计流程是一个复杂而精细的过程,涉及多个阶段和多种专用工具。以下是关于数字IC设计开发工具及其相关资料的详细介绍。 #### 1. **数字IC设计的主要流程** 数字IC设计通常分为以下几个关键阶段[^1]: - 行为级描述与仿真:通过硬件描述语言(如Verilog或VHDL)实现功能模块的行为建模并进行初步验证。 - 综合:将高级抽象的功能模型转化为门级网表。 - 物理设计:包括布局规划、标准单元放置、时钟树综合、布线等操作。 - 验证:执行静态时序分析(STA)、形式化验证以及其他功能性测试以确保设计满足规格书的要求。 #### 2. **常用的EDA工具介绍** 为了支持上述各环节的工作,电子设计自动化(Electronic Design Automation, EDA)领域提供了丰富的软件解决方案[^2]: - **Synopsys Primetime**: 主要用于静态时序分析,帮助工程师评估电路性能指标是否达到预期目标。 - **HSPICE (由Synopsys提供)**: 是一种精确度极高的晶体管级别模拟器,在混合信号系统中尤其重要。 - **Design Compiler**: 提供逻辑综合能力,能够把RTL代码转换成优化后的门级表示形式。 - **Cadence ICFB (Innovus Custom Floorplan Blockset)**: 支持全定制芯片设计工作流中的版图编辑等功能。 - **Siemens Calibre DRC & LVS Tools**: 执行设计规则检查(Design Rule Check) 和电气特性一致性校验(Layout Versus Schematic),保障制造可行性。 这些工具各自具备独特优势,并广泛应用于行业实践中成为事实上的标准配置之一。 #### 3. **学习资源推荐** 对于希望深入理解数字IC设计的同学来说,可以从以下几方入手获取更多专业知识[^3]: - 官方文档和技术白皮书——各大厂商都会为其产品准备详尽的手册说明; - 在线课程平台——Coursera、edX 上开设有针对半导体技术的基础入门到高阶应用系列讲座; - 社区论坛交流——像Stack Overflow 或者 Reddit 的 r/AskElectronics 子板块都是不错的选择可以提问解惑; - 实践项目积累经验——参与开源硬件计划或者自己动手完成小型实验板制作均有助于巩固理论知识向实际技能转化。 ```python # 示例Python脚本展示如何调用外部API查询特定EDA工具版本信息 import requests def get_tool_version(tool_name): url = f"https://api.example.com/tools/{tool_name}/version" response = requests.get(url) if response.status_code == 200: return response.json()["version"] else: raise Exception("Failed to retrieve tool version.") print(get_tool_version("primetime")) # 输出 Synopsys PrimeTime 当前最新稳定发行号 ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值