本文旨在總結近期復習的數字電路D觸發器(邊沿觸發)的內容。
D觸發器是一個具有 記憶功能 ,持有 兩個穩定狀態(0和1) 的信息存儲器件,是數字電路初學者所能接觸到最簡單的 時序邏輯電路 , 也是多種時序邏輯的電路的基本邏輯單元。
邊沿觸發D觸發器特點是可以在時鐘脈沖到來時刻從一個狀態翻轉到另一個狀態,其具有的存儲特性也是時序邏輯的基本特征。
其內部結構可以由3個RS鎖存器構成
將其繪制成一個模型,最簡單的如下圖表示,D為數據輸入端,clk為時鐘輸入端,Q為數據輸出端口。
這種D觸發器的功能也是相當簡單的,就是當CLK上升沿到來時,Q的輸出等于D,特征方程寫為 Q=D* (沒有任何控制輸入的情況下)。 波形圖如下所示:
為了進一步具體得知其作用,接下來在FPGA開發板上展示其功能,使用的辦卡為德致倫的genesys2,芯片為kintex-7系列的xc7k325tffg900-2。
為了更加全面一些,在此為D觸發器增加復位功能(按下按鈕回到初始狀態),此時可以有兩種復位D觸發器,一種是同步復位,一種是異步復位。
同步復位:按鈕按下,上升沿到來時刻復位,復位動作和系統時鐘同步。
異步復位:按鈕按下立刻復位,復位無需看系統時鐘的臉色。
下面給出本設計的模塊框圖:
說明一下各個端口的作用,sys_clk為時鐘,sys_rst_n為復位,key_in為按鍵輸入,即為觸發器的D,led_out為輸出,本demo會將其接到開發板的燈上,用燈的亮滅展示D觸發器的效果。
首先展示同步D觸發器的verilog代碼和testbench以及仿真結果。
module flip_flop(
input wire sys_clk,
input wire sys_rst_n,
input wire key_in,
output reg led_out
);
always@(posedge sys_clk)
if (sys_rst_n == 1'b0)
led_out <= 1'b0;
else
led_out <= key_in;
endmodule
————————————————————testbench——————————————————————————————————
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2023/01/21 20:02:21
// Design Name:
// Module Name: tb_flip_flop
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module tb_flip_flop(
);
reg sys_clk;
reg sys_rst_n;
reg key_in;
wire led_out;
initial begin
sys_clk = 1'b1; //時鐘信號初始化為1
sys_rst_n <= 1'b0; //復位信號初始化,因為低電平有效,所以為0
key_in <= 1'b0; //輸入信號的初始化
#20
sys_rst_n <= 1'b1; //20ns后,復位信號釋放,因為低電平復位,所以變成高電平開始工作。
#210
sys_rst_n <= 1'b0;
#40
sys_rst_n <= 1'b1; //復位40ns再次釋放
end
always #10 sys_clk = ~sys_clk;
always #20 key_in <= {$random}%2; //20ns產生一次隨機數,比時鐘周期大,利于波形觀察
flip_flop flip_flop_inst
(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.key_in(key_in),
.led_out(led_out)
);
endmodule
仿真結果跑500ns:
可以發現,盡管系統已經處于復位釋放的狀態(復位鍵為高電平),時鐘,數據和上升沿也都到來,但是輸出會在時鐘的下一拍進行變化。 **即:當時鐘和信號在同一時刻變化時,我們以時鐘的上升沿前一時刻采集的輸入信號為依據來產生輸出信號。 **
下面是異步D觸發器的代碼,區別是增加了復位下降沿到來時刻的敏感性(always語句),testbench和同步D觸發器的一致。
module flip_flop(
input wire sys_clk,
input wire sys_rst_n,
input wire key_in,
output reg led_out
);
always@(posedge sys_clk or negedge sys_rst_n)
if (sys_rst_n == 1'b0)
led_out <= 1'b0;
else
led_out <= key_in;
endmodule
可以觀察到復位下降沿到來時刻,輸出即刻置為0,經過綜合之后的RTL電路如圖所示,和設計(異步D觸發器電路,同步D觸發器電路多一個MUX模塊)的差不多。
然后分配管腳。
此次實驗中出現的一個問題是,此次使用的FPGA已經沒有單端口時鐘輸出,所以需要調用PLL的IP核合成輸出一個單端口的時鐘信號,這個準備下一篇再說。
實驗設備(謝謝老板買的高級貨,可惜許可證快到期了):
-
時鐘
+關注
關注
11文章
1759瀏覽量
132202 -
D觸發器
+關注
關注
3文章
164瀏覽量
48175 -
數字電路
+關注
關注
193文章
1633瀏覽量
81084 -
觸發器
+關注
關注
14文章
2024瀏覽量
61506 -
時序邏輯電路
+關注
關注
2文章
94瀏覽量
16634
發布評論請先 登錄
相關推薦
時序邏輯電路的概述和觸發器
基于D觸發器和數據選擇器的多輸入時序網絡的電路設計

評論