⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL言语学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与规划,对状况机FSM进行剖析与建模。

文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或许重视大众号【AIShareLab】,回复 FPGA 也可获取。

锁存器和触发器的根本特性

锁存器和触发器是构成时序逻辑电路的根本逻辑单元,它们具有存储数据的功用。 每个锁存器或触发器都能存储1位二值信息,所以又称为存储单元或回忆单元。 若输入信号不发生改变,锁存器和触发器必定处于其间一种状况,且一旦状况被确定,就能自行坚持不变,即长期存储1位二进制数。 电路在输入信号的效果下,会从一种稳定状况转换成为另一种稳定状况。

锁存器(Latch)与触发器(Flip Flop)的差异

锁存器(Latch)—— 没有时钟输入端,对脉冲电平灵敏的存储电路,在特定输入脉冲电平效果下改动状况。

SR锁存器与D锁存器设计与建模

触发器(Flip Flop)——每一个触发器有一个时钟输入端。对脉冲边沿灵敏的存储电路,在时钟脉冲的上升沿或下降沿的改变瞬间改动状况。

SR锁存器与D锁存器设计与建模

根本SR锁存器

用与非门构成的根本SR锁存器

SR锁存器与D锁存器设计与建模

方框外侧输入端的小圆圈和信号称号上面的小横线均表明输入信号是低电平有用的,同时为了差异,这种锁存器有时也称为根本 SR 锁存器。

现态: R\bar{R}, S\bar{S} 信号效果前Q端的状况, 现态用 QnQ^{n} 表明。

次态: R \bar{R}S\bar{S} 信号效果后Q端的状况, 次态用 Qn+1Q^{n+1} 表明。

a.电路图

SR锁存器与D锁存器设计与建模

b.功用表

SR锁存器与D锁存器设计与建模

约束条件:

S+R=1\bar{S}+\bar{R}=1

例 当S、R的波形如下图虚线上边所示,试画出Q和 Q对应的波形(假定原始状况Q=0 )。

SR锁存器与D锁存器设计与建模

SR锁存器与D锁存器设计与建模

门控D锁存器

1.电路结构

SR锁存器与D锁存器设计与建模

国标逻辑符号

SR锁存器与D锁存器设计与建模

E=0E=0 时, S=R=1\bar{S}=\bar{R}=1 ,不管 D 取什么值, Q 坚持不变。 当 E=1E=\mathbf{1} 时,使能信号有用

  • D=1D=\mathbf{1} 时, S=0\bar{S}=\mathbf{0}R=1\bar{R}=\mathbf{1} , Q 被置 1 ;
  • D=0D=\mathbf{0} 时, S=1\bar{S}=1R=0\bar{R}=\mathbf{0} , Q 被置 0 。

E=1E=\mathbf{1} 期间, D 值将被传输到输出端 Q ,而当 E 由 1 跳变为 0 时,锁存器将坚持跳变之前瞬间 D 的值。因此, D\mathrm{D} 锁存器常 被称为通明锁存器 (Transparent Latch)。

门控D锁存器特性表和特性方程

D锁存器的特性表

SR锁存器与D锁存器设计与建模

卡诺图

SR锁存器与D锁存器设计与建模

Qn+1=E⋅Q+E⋅DQ^{n+1}=\bar{E} \cdot Q+E \cdot D

门控D锁存器波形图

初始状况为Q =1

SR锁存器与D锁存器设计与建模

SR锁存器与D锁存器设计与建模

门控D 锁存器的Verilog HDL建模

试对图所示的D锁存器进行建模。

SR锁存器与D锁存器设计与建模

SR锁存器与D锁存器设计与建模

//版别1: Structural description of a D latch
module Dlatch_Structural (E, D, Q, Q_);
    	input  E,  D ;
    	output Q,  Q_;
    	wire   R_, S_;
		nand N1(S_, D, E);
		nand N2(R_,~D, E);
		SRlatch_1 N3(S_, R_, Q, Q_);
endmodule

SR锁存器与D锁存器设计与建模

//Structural description of a SR-latch
module SRlatch_1 (S_, R_, Q, Q_);
    	input  S_,R_;
    	output Q, Q_;
  	nand N1(Q, S_,Q_);
	nand N2(Q_,R_,Q );
endmodule

版别1的特色:

第一个版别依据图4.1.3运用根本的逻辑门元件,选用结构描述风格,编写了两个模块,这两个模块可以放在一个文件中,文件名为Dlatch_Structural.v。

在一个文件中可以写多个模块,其间有一个是主模块(或许称为顶层模块)。

文件名有必要运用顶层模块名。本例中Dlatch_Structural是主模块,它调用SRlatch_1模块。

//版别2: Behavioral description of a D latch
module Dlatch_bh (E, D, Q, Q_);
    input  E, D;
    output Q, Q_;
    reg Q;
    assign Q_ = ~Q;
    always @(E or D)
	  if (E)  
		Q <= D; //当使能有用E=1时,输出跟随输入改变
	  else 
		Q <= Q; //当E=0时, Q坚持不变
endmodule

版别2的特色:

第二个版别选用功用描述风格的代码,不涉及到完成电路的具体结构,靠“算法”完成电路操作。对于不太喜爱低层次硬件逻辑图的人来说,功用描述风格的Verilog HDL是一种最佳挑选。其间“<=”为非阻塞赋值符,将在下一节介绍。

留意:

  • always内部不能运用assign。
  • 在写可综合的代码时,建议明确地界说if-else中所有可能的条件分支,否则,就会在电路的输出部分增加一个电平灵敏型锁存器。

参考文献:

  1. Verilog HDL与FPGA数字体系规划,罗杰,机械工业出版社,2015年04月
  2. Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
  3. Verilog HDL数字规划与综合(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
  4. Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月

欢迎重视大众号【AIShareLab】,一同沟通更多相关常识,前沿算法,Paper解读,项目源码,面经总结。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。