實(shí)驗(yàn)12:邊沿觸發(fā)的D觸發(fā)器

 行業(yè)動態(tài)     |      2023-10-11 10:16:42    |      作者

本實(shí)驗(yàn)的任務(wù)是描述一個(gè)帶有邊沿觸發(fā)的同步D觸發(fā)器電路,并通過STEP FPGA開發(fā)板的12MHz晶振作為觸發(fā)器時(shí)鐘信號clk,撥碼開關(guān)的狀態(tài)作為觸發(fā)器輸入信號d,觸發(fā)器的輸出信號q和~q,用來分別驅(qū)動開發(fā)板上的LED,在clk上升沿的驅(qū)動下,當(dāng)撥碼開關(guān)狀態(tài)變化時(shí)LED狀態(tài)發(fā)生相應(yīng)變化。

從D觸發(fā)器的特性我們知道,它的狀態(tài)僅僅取決于時(shí)鐘信號達(dá)到之前瞬間的D信號。為了防止SR鎖存器的S、R被同時(shí)置1的情況,常采用維持阻塞結(jié)構(gòu)的D觸發(fā)器,其電路結(jié)構(gòu)如下,邊沿觸發(fā)器的次態(tài)僅僅取決于CLK信號上升沿(或下降沿)到達(dá)時(shí)刻輸入信號的狀態(tài)。

用行為描述方式實(shí)現(xiàn)的D觸發(fā)器程序清單dff.v

moduledff( //模塊名及參數(shù)定義 inputclk,rst,d, outputregq, outputwireqb); assignqb=~q; always@(posedgeclk)//只有clk上升沿時(shí)刻觸發(fā) if(!rst) //復(fù)位信號判斷,低有效 q<=1'b0;//復(fù)位有效時(shí)清零 else q<=d;//觸發(fā)時(shí)輸出q值為輸入d endmodule

仿真文件dff_tb.v

`timescale1ns/100ps//仿真時(shí)間單位/時(shí)間精度 moduledff_tb(); regclk,rst,d; //需要產(chǎn)生的激勵信號定義 wireq,qb; //需要觀察的輸出信號定義 //初始化過程塊 initial begin clk=0; rst=0; d=0; #50 rst=1; end always#10clk=~clk;//產(chǎn)生輸入clk,頻率50MHz always#15d=~d; //module調(diào)用例化格式 dffu1(//dff表示所要例化的module名稱,u1是我們定義的例化名稱 .clk(clk),//輸入輸出信號連接。 .rst(rst), .d(d), .q(q),//輸出信號連接 .qb(qb) ); endmodule

  1. 打開Lattice Diamond,建立工程。
  2. 新建Verilog HDL設(shè)計(jì)文件,并鍵入設(shè)計(jì)代碼。
  3. 根據(jù)邏輯綜合并分配管腳。clk/C1,rst_n/L14,d/M7,q/N13,qb/M12
  4. 根據(jù)仿真教程,實(shí)現(xiàn)對本工程的仿真,驗(yàn)證仿真結(jié)果是否與預(yù)期相符。
  5. 如果仿真無誤,構(gòu)建并輸出編程文件,燒寫至FPGA的Flash之中。
  6. 觀察輸出結(jié)果。
  1. 仿真結(jié)果如下圖所示:
  2. 實(shí)驗(yàn)現(xiàn)象:撥動撥碼開關(guān)的第1位到ON,給D觸發(fā)器輸入1,則LED1滅,LED2亮輸出q=1,notq輸出0;撥到OFF時(shí)LED1亮,LED2滅,即q輸出0,notq輸出1(注意LED上拉到3.3V,所以LED管腳為0時(shí)亮)。