基礎編:②フリップフロップを作る

フリップフロップ回路とは

フリップフロップは回路図で書くと下のようになる回路です。機能としては、SをONにすると出力の q がONになります。

そして q がONの状態で S をON / OFFしても q の状態は変化しません。 R をONにすることで、 q をOFFにすることができます。

フリップフロップ回路はこの特性を使って、チャタリング防止回路として役立てていきます。

チャタリングとは、スイッチをON / OFFにしたときの電圧の立ち上がりで生じるバタつきのことです。

参考:https://www.marutsu.co.jp/pc/static/large_order/1405_311_ph


これをFPGA評価ボードで確認していきます。下記の回路図をverilog HDLで記述し、S と R をプッシュスイッチに割り当てます。

q をLEDに割り当てることで、スイッチのON / OFFに応じてLEDがON/ OFFする様子を確認していきます。


プログラム

TopModule.v

module TopModule(
	//////////// CLOCK //////////
	input 		          		CLK1,
	input 		          		CLK2,
	//////////// SEG7 //////////
	output		     [7:0]		HEX0,
	output		     [7:0]		HEX1,
	output		     [7:0]		HEX2,
	output		     [7:0]		HEX3,
	output		     [7:0]		HEX4,
	output		     [7:0]		HEX5,
	//////////// Push Button //////////
	input 		     [1:0]		BTN,
	//////////// LED //////////
	output		     [9:0]		LED,
	//////////// SW //////////
	input 		     [9:0]		SW

	);
	
	wire wq, nwq;
	
	m_rs_flipflop u1(BTN[0], BTN[1], wq, nwq);

	assign LED={9'h0,wq};
	
	
	
	assign HEX0=8'hff;
	assign HEX1=8'hff;
	assign HEX2=8'hff;
	assign HEX3=8'hff;
	assign HEX4=8'hff;
	assign HEX5=8'hff;
	
endmodule


RS_FlipFlop.v

module m_rs_flipflop(input set, input reset, output q, output nq);
	assign q =~ (set & nq);
	assign nq =~ (reset & q);
endmodule

出力q は、set(プッシュスイッチ)とnq(もう一つのNAND回路の出力)を比較するNAND回路の出力となっています。

またnq は reset(プッシュスイッチ)とq のNAND出力になっています。

そして今回、フリップフロップの回路はメインプログラムと別のファイルで記述しています。





この記事が気に入ったらサポートをしてみませんか?