實驗12:邊沿觸發(fā)的D觸發(fā)器
實驗?zāi)康?/h2>實驗任務(wù)
本實驗的任務(wù)是描述一個帶有邊沿觸發(fā)的同步D觸發(fā)器電路,并通過STEP FPGA開發(fā)板的12MHz晶振作為觸發(fā)器時鐘信號clk,撥碼開關(guān)的狀態(tài)作為觸發(fā)器輸入信號d,觸發(fā)器的輸出信號q和~q,用來分別驅(qū)動開發(fā)板上的LED,在clk上升沿的驅(qū)動下,當(dāng)撥碼開關(guān)狀態(tài)變化時LED狀態(tài)發(fā)生相應(yīng)變化。
本文引用地址:http://www.ex-cimer.com/article/202310/451323.htm實驗原理
從D觸發(fā)器的特性我們知道,它的狀態(tài)僅僅取決于時鐘信號達(dá)到之前瞬間的D信號。為了防止SR鎖存器的S、R被同時置1的情況,常采用維持阻塞結(jié)構(gòu)的D觸發(fā)器,其電路結(jié)構(gòu)如下,邊沿觸發(fā)器的次態(tài)僅僅取決于CLK信號上升沿(或下降沿)到達(dá)時刻輸入信號的狀態(tài)。
Verilog HDL建模描述
用行為描述方式實現(xiàn)的D觸發(fā)器
程序清單dff.v
module dff ( //模塊名及參數(shù)定義
input clk,rst,d,
output reg q,
output wire qb );
assign qb = ~q;
always @( posedge clk ) //只有clk上升沿時刻觸發(fā)
if(!rst) //復(fù)位信號判斷,低有效
q <= 1'b0; //復(fù)位有效時清零
else
q <= d; //觸發(fā)時輸出q值為輸入d
endmodule
仿真文件dff_tb.v
`timescale 1ns/100ps //仿真時間單位/時間精度
module dff_tb();
reg clk,rst,d; //需要產(chǎn)生的激勵信號定義
wire q,qb; //需要觀察的輸出信號定義
//初始化過程塊
initial
begin
clk = 0;
rst = 0;
d = 0;
#50
rst = 1;
end
always #10 clk = ~clk; //產(chǎn)生輸入clk,頻率50MHz
always #15 d = ~d;
//module調(diào)用例化格式
dff u1 ( //dff表示所要例化的module名稱,u1是我們定義的例化名稱
.clk(clk), //輸入輸出信號連接。
.rst(rst),
.d(d),
.q(q), //輸出信號連接
.qb(qb)
);
endmodule
實驗步驟
仿真結(jié)果和實驗現(xiàn)象
本實驗的任務(wù)是描述一個帶有邊沿觸發(fā)的同步D觸發(fā)器電路,并通過STEP FPGA開發(fā)板的12MHz晶振作為觸發(fā)器時鐘信號clk,撥碼開關(guān)的狀態(tài)作為觸發(fā)器輸入信號d,觸發(fā)器的輸出信號q和~q,用來分別驅(qū)動開發(fā)板上的LED,在clk上升沿的驅(qū)動下,當(dāng)撥碼開關(guān)狀態(tài)變化時LED狀態(tài)發(fā)生相應(yīng)變化。
本文引用地址:http://www.ex-cimer.com/article/202310/451323.htm從D觸發(fā)器的特性我們知道,它的狀態(tài)僅僅取決于時鐘信號達(dá)到之前瞬間的D信號。為了防止SR鎖存器的S、R被同時置1的情況,常采用維持阻塞結(jié)構(gòu)的D觸發(fā)器,其電路結(jié)構(gòu)如下,邊沿觸發(fā)器的次態(tài)僅僅取決于CLK信號上升沿(或下降沿)到達(dá)時刻輸入信號的狀態(tài)。
用行為描述方式實現(xiàn)的D觸發(fā)器
程序清單dff.v
module dff ( //模塊名及參數(shù)定義 input clk,rst,d, output reg q, output wire qb ); assign qb = ~q; always @( posedge clk ) //只有clk上升沿時刻觸發(fā) if(!rst) //復(fù)位信號判斷,低有效 q <= 1'b0; //復(fù)位有效時清零 else q <= d; //觸發(fā)時輸出q值為輸入d endmodule
仿真文件dff_tb.v
`timescale 1ns/100ps //仿真時間單位/時間精度 module dff_tb(); reg clk,rst,d; //需要產(chǎn)生的激勵信號定義 wire q,qb; //需要觀察的輸出信號定義 //初始化過程塊 initial begin clk = 0; rst = 0; d = 0; #50 rst = 1; end always #10 clk = ~clk; //產(chǎn)生輸入clk,頻率50MHz always #15 d = ~d; //module調(diào)用例化格式 dff u1 ( //dff表示所要例化的module名稱,u1是我們定義的例化名稱 .clk(clk), //輸入輸出信號連接。 .rst(rst), .d(d), .q(q), //輸出信號連接 .qb(qb) ); endmodule
評論