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