實驗11:RS觸發器
實驗目的
實驗任務
本實驗的任務是描述一個RS觸發器電路,并通過STEP FPGA開發板的12MHz晶振作為觸發器時鐘信號clk,撥碼開關的狀態作為觸發器輸入信號S,R,觸發器的輸出信號Q和非Q,用來分別驅動開發板上的LED,在clk上升沿的驅動下,當撥碼開關狀態變化時LED狀態發生相應變化。
本文引用地址:http://www.104case.com/article/202310/451322.htm實驗原理
基本RS觸發器可以由兩個與非門按正反饋方式閉合構成。通常將Q端的狀態定義為鎖存器的狀態,即Q=1時,稱為鎖存器處于1的狀態;Q=0時,稱鎖存器處于0的狀態,電路具有兩個穩態。電路要改變狀態必須加入觸發信號,因是與非門構成的基本RS觸發器,所以,觸發信號是低電平有效。非Rd和非Sd是一次信號,只能一個個加,即它們不能同時為低電平,因為會有邏輯矛盾(Q == 非Q)。
Verilog HDL建模描述
用數據流描述實現的RS觸發器
程序清單rsff.v
<code verilog> module rsff
( input wire clk,r,s, //rs觸發器輸入信號 output reg q, //輸出端口q,在always塊里賦值,定義為reg型 output wire qb //輸出端口非q ); assign qb = ~q; always@(posedge clk) begin case({r,s}) 2'b00: q <= q; //r,s同時為低電平,觸發器保持狀態不變 2'b01: q <= 1'b1; //觸發器置1狀態 2'b10: q <= 1'b0; //觸發器置0狀態 2'b11: q <= 1'bx; //r,s同時為高電平有效,邏輯矛盾,觸發器為不定態 endcase end endmodule </code>
仿真文件rsfftb.v
`timescale 1ns/100ps //仿真時間單位/時間精度 module rs_ff_tb(); reg clk,r,s; //需要產生的激勵信號定義 wire q,qb; //需要觀察的輸出信號定義 //初始化過程塊 initial begin clk = 0; r = 0; s = 0; #50 r = 0; s = 1; #50 r = 1; s = 0; #50 r = 1; s = 1; #50 r = 0; s = 1; end always #10 clk = ~clk; //產生輸入clk,頻率50MHz //module調用例化格式 rs_ff u1 ( //rs_ff表示所要例化的module名稱,u1是我們定義的例化名稱 .clk(clk), //輸入輸出信號連接。 .r(r), .s(s), .q(q), //輸出信號連接 .qb(qb) ); endmodule
評論