實(shí)驗(yàn)11:RS觸發(fā)器
實(shí)驗(yàn)?zāi)康?/h2>實(shí)驗(yàn)任務(wù)
本實(shí)驗(yàn)的任務(wù)是描述一個(gè)RS觸發(fā)器電路,并通過(guò)STEP FPGA開(kāi)發(fā)板的12MHz晶振作為觸發(fā)器時(shí)鐘信號(hào)clk,撥碼開(kāi)關(guān)的狀態(tài)作為觸發(fā)器輸入信號(hào)S,R,觸發(fā)器的輸出信號(hào)Q和非Q,用來(lái)分別驅(qū)動(dòng)開(kāi)發(fā)板上的LED,在clk上升沿的驅(qū)動(dòng)下,當(dāng)撥碼開(kāi)關(guān)狀態(tài)變化時(shí)LED狀態(tài)發(fā)生相應(yīng)變化。
本文引用地址:http://cafeforensic.com/article/202310/451322.htm實(shí)驗(yàn)原理
基本RS觸發(fā)器可以由兩個(gè)與非門(mén)按正反饋方式閉合構(gòu)成。通常將Q端的狀態(tài)定義為鎖存器的狀態(tài),即Q=1時(shí),稱(chēng)為鎖存器處于1的狀態(tài);Q=0時(shí),稱(chēng)鎖存器處于0的狀態(tài),電路具有兩個(gè)穩(wěn)態(tài)。電路要改變狀態(tài)必須加入觸發(fā)信號(hào),因是與非門(mén)構(gòu)成的基本RS觸發(fā)器,所以,觸發(fā)信號(hào)是低電平有效。非Rd和非Sd是一次信號(hào),只能一個(gè)個(gè)加,即它們不能同時(shí)為低電平,因?yàn)闀?huì)有邏輯矛盾(Q == 非Q)。
Verilog HDL建模描述
用數(shù)據(jù)流描述實(shí)現(xiàn)的RS觸發(fā)器
程序清單rsff.v
<code verilog> module rsff
(
input wire clk,r,s, //rs觸發(fā)器輸入信號(hào)
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同時(shí)為低電平,觸發(fā)器保持狀態(tài)不變
2'b01: q <= 1'b1; //觸發(fā)器置1狀態(tài)
2'b10: q <= 1'b0; //觸發(fā)器置0狀態(tài)
2'b11: q <= 1'bx; //r,s同時(shí)為高電平有效,邏輯矛盾,觸發(fā)器為不定態(tài)
endcase
end
endmodule
</code>
仿真文件rsfftb.v
`timescale 1ns/100ps //仿真時(shí)間單位/時(shí)間精度
module rs_ff_tb();
reg clk,r,s; //需要產(chǎn)生的激勵(lì)信號(hào)定義
wire q,qb; //需要觀(guān)察的輸出信號(hào)定義
//初始化過(guò)程塊
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; //產(chǎn)生輸入clk,頻率50MHz
//module調(diào)用例化格式
rs_ff u1 ( //rs_ff表示所要例化的module名稱(chēng),u1是我們定義的例化名稱(chēng)
.clk(clk), //輸入輸出信號(hào)連接。
.r(r),
.s(s),
.q(q), //輸出信號(hào)連接
.qb(qb)
);
endmodule
實(shí)驗(yàn)步驟
仿真結(jié)果和實(shí)驗(yàn)現(xiàn)象
本實(shí)驗(yàn)的任務(wù)是描述一個(gè)RS觸發(fā)器電路,并通過(guò)STEP FPGA開(kāi)發(fā)板的12MHz晶振作為觸發(fā)器時(shí)鐘信號(hào)clk,撥碼開(kāi)關(guān)的狀態(tài)作為觸發(fā)器輸入信號(hào)S,R,觸發(fā)器的輸出信號(hào)Q和非Q,用來(lái)分別驅(qū)動(dòng)開(kāi)發(fā)板上的LED,在clk上升沿的驅(qū)動(dòng)下,當(dāng)撥碼開(kāi)關(guān)狀態(tài)變化時(shí)LED狀態(tài)發(fā)生相應(yīng)變化。
本文引用地址:http://cafeforensic.com/article/202310/451322.htm基本RS觸發(fā)器可以由兩個(gè)與非門(mén)按正反饋方式閉合構(gòu)成。通常將Q端的狀態(tài)定義為鎖存器的狀態(tài),即Q=1時(shí),稱(chēng)為鎖存器處于1的狀態(tài);Q=0時(shí),稱(chēng)鎖存器處于0的狀態(tài),電路具有兩個(gè)穩(wěn)態(tài)。電路要改變狀態(tài)必須加入觸發(fā)信號(hào),因是與非門(mén)構(gòu)成的基本RS觸發(fā)器,所以,觸發(fā)信號(hào)是低電平有效。非Rd和非Sd是一次信號(hào),只能一個(gè)個(gè)加,即它們不能同時(shí)為低電平,因?yàn)闀?huì)有邏輯矛盾(Q == 非Q)。
用數(shù)據(jù)流描述實(shí)現(xiàn)的RS觸發(fā)器
程序清單rsff.v
<code verilog> module rsff
( input wire clk,r,s, //rs觸發(fā)器輸入信號(hào) 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同時(shí)為低電平,觸發(fā)器保持狀態(tài)不變 2'b01: q <= 1'b1; //觸發(fā)器置1狀態(tài) 2'b10: q <= 1'b0; //觸發(fā)器置0狀態(tài) 2'b11: q <= 1'bx; //r,s同時(shí)為高電平有效,邏輯矛盾,觸發(fā)器為不定態(tài) endcase end endmodule </code>
仿真文件rsfftb.v
`timescale 1ns/100ps //仿真時(shí)間單位/時(shí)間精度 module rs_ff_tb(); reg clk,r,s; //需要產(chǎn)生的激勵(lì)信號(hào)定義 wire q,qb; //需要觀(guān)察的輸出信號(hào)定義 //初始化過(guò)程塊 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; //產(chǎn)生輸入clk,頻率50MHz //module調(diào)用例化格式 rs_ff u1 ( //rs_ff表示所要例化的module名稱(chēng),u1是我們定義的例化名稱(chēng) .clk(clk), //輸入輸出信號(hào)連接。 .r(r), .s(s), .q(q), //輸出信號(hào)連接 .qb(qb) ); endmodule
評(píng)論