【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现


0x00 JK 触发器

JK 触发器是 RS 触发器和 T 触发器的组合,有两个输入端 J 和 K,如果两个输入端都等于 1,则将当前值反转。

|---------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| 行为表 ||
| | |
| 状态图 ||
| ||
| Timing Diagram ||
| ||
| Circuit ||
| ||

JK 触发器的设计目的是防止 RS 触发器在输入 S 和 R 均等于 1 的值时被浪费,因为该值被认为是非法输入。它与 RS 触发器相同,不同之处在于如果输入值为 1,1,它不会作为非法值被接受,而是作为当前存储值的反相值被接受。

0x01 D 触发器

D 型触发器是触发器中最简单的一种。D 型触发器的名称来源于 "延迟"(Delay)一词,因为输出是输入的延迟值,直到下一个有效时钟转换为止。换句话说,D 型触发器的下一个状态是在有效时钟转换发生之前 D 的输入值。触发器有两种类型:跟踪边沿触发和前沿触发。

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| 行为表 ||
| |-------|-------|---------| | D | q | q* | | 0 | 0 | 0 | | 0 | 1 | 0 | | 1 | 0 | 1 | | 1 | 1 | 1 | | |-------|---------| | D | q* | | 0 | 0 | | 1 | 1 | |
| 状态图 ||
| ||
| Timing Diagram ||
| ||
| Circuit ||
| ||

0x02 D 触发器的实现

真值表:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| D Flip Flop Truth Table |
| |-------|---|---|-----| | Input || Output || | 입력 순서 | D | Q | ~Q | | 1 | 0 | 0 | 1 | | 2 | 0 | 0 | 1 | | 3 | 1 | 1 | 0 | | 4 | 0 | 0 | 1 | | 5 | 1 | 1 | 0 | | 6 | 1 | 1 | 0 | |

💬 Design source:

cpp 复制代码
`timescale 1ns / 1ps

module DFF(
    input clk,
    input D,
    input CLR,
    output Q,
    output Qp
);

reg Q;

// falling edge triggered
always @(posedge !clk) begin
    if(CLR) Q<=1'b0;
    else begin
        if((D==1'b0)) Q<=1'b0;
        else if((D==1'b1)) Q<=1'b1;
    end
end

assign Qp = ~Q;

endmodule

💬 Testbench:

cpp 复制代码
`timescale 1ns / 1ps

module DFF_tb;
reg clk, D, CLR;
wire Q, Qp;

DFF u_DFF(
    .clk(clk ),
    .D(D ),
    .CLR(CLR ),
    .Q(Q ),
    .Qp(Qp ) 
);

initial clk = 1'b0;
initial CLR = 1'b1;
initial D = 1'b0;

always clk = #50 ~clk;

always@(CLR) begin
    CLR = #125 ~CLR;
end

always@(D) begin
    D = #375 ~D;
    D = #50 ~D;
end

always@(D) begin
    D = #575 ~D;
    D = #50 ~D;
end

always@(D) begin
    D = #675 ~D;
    D = #50 ~D;
end

initial begin
    #800
    $finish;
end

endmodule

🚩 运行结果如下:

Schematic:

D 触发器在时钟的上升沿或下降沿将其输入端 D 的值直接传递到输出端 Q。设计了一个具有下降沿触发器的 D 触发器,并编写了代码来检查 D 的值和时钟的值,以确保当时钟的值从 1 下降到 0 时,存储在 D 中的值被存储到 Q 中。

cpp 复制代码
📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2023.11.28
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 📜 参考资料 Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008 Microsoft. MSDN(Microsoft Developer Network)EB/OL. \[\]. . 百度百科EB/OL. \[\]. https://baike.baidu.com/. |

相关推荐
仲南音2 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner2 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20202 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia3 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20203 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子3 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安4 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun4 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun4 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议