本文旨在總結(jié)近期復(fù)習(xí)的數(shù)字電路D觸發(fā)器(邊沿觸發(fā))的內(nèi)容。
D觸發(fā)器是一個(gè)具有 記憶功能 ,持有 兩個(gè)穩(wěn)定狀態(tài)(0和1) 的信息存儲(chǔ)器件,是數(shù)字電路初學(xué)者所能接觸到最簡(jiǎn)單的 時(shí)序邏輯電路 , 也是多種時(shí)序邏輯的電路的基本邏輯單元。
邊沿觸發(fā)D觸發(fā)器特點(diǎn)是可以在時(shí)鐘脈沖到來時(shí)刻從一個(gè)狀態(tài)翻轉(zhuǎn)到另一個(gè)狀態(tài),其具有的存儲(chǔ)特性也是時(shí)序邏輯的基本特征。
其內(nèi)部結(jié)構(gòu)可以由3個(gè)RS鎖存器構(gòu)成
將其繪制成一個(gè)模型,最簡(jiǎn)單的如下圖表示,D為數(shù)據(jù)輸入端,clk為時(shí)鐘輸入端,Q為數(shù)據(jù)輸出端口。
這種D觸發(fā)器的功能也是相當(dāng)簡(jiǎn)單的,就是當(dāng)CLK上升沿到來時(shí),Q的輸出等于D,特征方程寫為 Q=D* (沒有任何控制輸入的情況下)。 波形圖如下所示:
為了進(jìn)一步具體得知其作用,接下來在FPGA開發(fā)板上展示其功能,使用的辦卡為德致倫的genesys2,芯片為kintex-7系列的xc7k325tffg900-2。
為了更加全面一些,在此為D觸發(fā)器增加復(fù)位功能(按下按鈕回到初始狀態(tài)),此時(shí)可以有兩種復(fù)位D觸發(fā)器,一種是同步復(fù)位,一種是異步復(fù)位。
同步復(fù)位:按鈕按下,上升沿到來時(shí)刻復(fù)位,復(fù)位動(dòng)作和系統(tǒng)時(shí)鐘同步。
異步復(fù)位:按鈕按下立刻復(fù)位,復(fù)位無需看系統(tǒng)時(shí)鐘的臉色。
下面給出本設(shè)計(jì)的模塊框圖:
說明一下各個(gè)端口的作用,sys_clk為時(shí)鐘,sys_rst_n為復(fù)位,key_in為按鍵輸入,即為觸發(fā)器的D,led_out為輸出,本demo會(huì)將其接到開發(fā)板的燈上,用燈的亮滅展示D觸發(fā)器的效果。
首先展示同步D觸發(fā)器的verilog代碼和testbench以及仿真結(jié)果。
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; //時(shí)鐘信號(hào)初始化為1
sys_rst_n <= 1'b0; //復(fù)位信號(hào)初始化,因?yàn)榈碗娖接行В詾?
key_in <= 1'b0; //輸入信號(hào)的初始化
#20
sys_rst_n <= 1'b1; //20ns后,復(fù)位信號(hào)釋放,因?yàn)榈碗娖綇?fù)位,所以變成高電平開始工作。
#210
sys_rst_n <= 1'b0;
#40
sys_rst_n <= 1'b1; //復(fù)位40ns再次釋放
end
always #10 sys_clk = ~sys_clk;
always #20 key_in <= {$random}%2; //20ns產(chǎn)生一次隨機(jī)數(shù),比時(shí)鐘周期大,利于波形觀察
flip_flop flip_flop_inst
(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.key_in(key_in),
.led_out(led_out)
);
endmodule
仿真結(jié)果跑500ns:
可以發(fā)現(xiàn),盡管系統(tǒng)已經(jīng)處于復(fù)位釋放的狀態(tài)(復(fù)位鍵為高電平),時(shí)鐘,數(shù)據(jù)和上升沿也都到來,但是輸出會(huì)在時(shí)鐘的下一拍進(jìn)行變化。 **即:當(dāng)時(shí)鐘和信號(hào)在同一時(shí)刻變化時(shí),我們以時(shí)鐘的上升沿前一時(shí)刻采集的輸入信號(hào)為依據(jù)來產(chǎn)生輸出信號(hào)。 **
下面是異步D觸發(fā)器的代碼,區(qū)別是增加了復(fù)位下降沿到來時(shí)刻的敏感性(always語句),testbench和同步D觸發(fā)器的一致。
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
可以觀察到復(fù)位下降沿到來時(shí)刻,輸出即刻置為0,經(jīng)過綜合之后的RTL電路如圖所示,和設(shè)計(jì)(異步D觸發(fā)器電路,同步D觸發(fā)器電路多一個(gè)MUX模塊)的差不多。
然后分配管腳。
此次實(shí)驗(yàn)中出現(xiàn)的一個(gè)問題是,此次使用的FPGA已經(jīng)沒有單端口時(shí)鐘輸出,所以需要調(diào)用PLL的IP核合成輸出一個(gè)單端口的時(shí)鐘信號(hào),這個(gè)準(zhǔn)備下一篇再說。
實(shí)驗(yàn)設(shè)備(謝謝老板買的高級(jí)貨,可惜許可證快到期了):
-
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1901瀏覽量
133226 -
D觸發(fā)器
+關(guān)注
關(guān)注
3文章
173瀏覽量
48758 -
數(shù)字電路
+關(guān)注
關(guān)注
193文章
1639瀏覽量
81910 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2039瀏覽量
62141 -
時(shí)序邏輯電路
+關(guān)注
關(guān)注
2文章
94瀏覽量
16851
發(fā)布評(píng)論請(qǐng)先 登錄
時(shí)序邏輯電路設(shè)計(jì)
時(shí)序邏輯電路的概述和觸發(fā)器
請(qǐng)問怎樣去設(shè)計(jì)多輸入時(shí)序邏輯電路?
觸發(fā)器與時(shí)序邏輯電路
時(shí)序邏輯電路實(shí)例解析
基于D觸發(fā)器和數(shù)據(jù)選擇器的多輸入時(shí)序網(wǎng)絡(luò)的電路設(shè)計(jì)

時(shí)序邏輯電路的分析方法
時(shí)序邏輯電路設(shè)計(jì)之同步計(jì)數(shù)器

時(shí)序邏輯電路的分析方法

評(píng)論