实验12:边沿触发的D触发器

2023-10-10  
  • (1)熟悉和掌握开发流程和软件使用方法;
  • (2)通过实验理解和掌握原理;
  • (3)学习用语言行为机描述方法描述电路。

本实验的任务是描述一个带有边沿触发的同步电路,并通过STEP 开发板的12MHz晶振作为触发器时钟信号clk,拨码开关的状态作为触发器输入信号d,触发器的输出信号q和~q,用来分别驱动开发板上的LED,在clk上升沿的驱动下,当拨码开关状态变化时LED状态发生相应变化。

本文引用地址:

从D触发器的特性我们知道,它的状态仅仅取决于时钟信号达到之前瞬间的D信号。为了防止SR锁存器的S、R被同时置1的情况,常采用维持阻塞结构的D触发器,其电路结构如下,边沿触发器的次态仅仅取决于CLK信号上升沿(或下降沿)到达时刻输入信号的状态。


用行为描述方式实现的D触发器
程序清单dff.v

   module dff   (						//模块名及参数定义
    input clk,rst,d,	
    output reg q,
    output wire qb   );
   assign qb = ~q;
   always @( posedge clk )   //只有clk上升沿时刻触发
	if(!rst)				  //复位信号判断,低有效
		q <= 1'b0;        //复位有效时清零
	else
		q <= d;           //触发时输出q值为输入d
  endmodule

仿真文件dff_tb.v

   `timescale 1ns/100ps    //仿真时间单位/时间精度
  module dff_tb();       
   reg    clk,rst,d;         	//需要产生的激励信号定义
   wire   q,qb;      	  //需要观察的输出信号定义 
   //初始化过程块
   initial
   begin
	 clk = 0;
	 rst = 0;
	 d = 0;
	 #50
	 rst = 1;
   end
   always #10 clk = ~clk;      //产生输入clk,频率50MHz
   always #15 d = ~d;
   //module调用例化格式
   dff  u1 (      //dff表示所要例化的module名称,u1是我们定义的例化名称
		.clk(clk),     //输入输出信号连接。
		.rst(rst),
		.d(d),
		.q(q),    //输出信号连接
		.qb(qb)   
           );
  endmodule
  1. 打开,建立工程。
  2. 新建设计文件,并键入设计代码。
  3. 根据逻辑综合并分配管脚。clk/C1,rst_n/L14,d/M7,q/N13,qb/M12
  4. 根据仿真教程,实现对本工程的仿真,验证仿真结果是否与预期相符。
  5. 如果仿真无误,构建并输出编程文件,烧写至的Flash之中。
  6. 观察输出结果。
  1. 仿真结果如下图所示:
  2. 实验现象:拨动拨码开关的第1位到ON,给D触发器输入1,则LED1灭,LED2亮输出q=1,notq输出0;拨到OFF时LED1亮,LED2灭,即q输出0,notq输出1(注意LED上拉到3.3V,所以LED管脚为0时亮)。
文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。