カウンターを作る


音響浮揚装置では、超音波のトランスデューサーを40kHzでON/OFFさせます。今回は40kHzをカウントする機能の基本的な部分を実装してみたいと思います。

今回作るプログラムは、スイッチを押すと押した回数をカウントする機能です。

コード

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 clk, wnq;
	wire [3:0] wq;
	
	m_rs_flipflop u1(BTN[0], BTN[1], clk, wnq);
	m_dec_counter(clk, wq);

	assign LED={6'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

DecCounter.v

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


module m_dec_counter(input clk, output [3:0] q);
	reg [3:0] counter;
	
	always @(posedge clk) begin
		if(counter==4'h9) begin
			counter=0;
		end
		else begin
			counter = counter + 1;
		end
	end
	
	assign q = counter;
endmodule



動作

基本的な動作は、まずsw0を押すとledが点灯します。次にsw1を押してリセット→sw0を押すとledのカウントが上がって行きます。

これを繰返して、10進数で9(2進数で1001)までいくと0に戻ります。



2, 10, 16進数の表示

hの意味は、hのあとに続く数字が16進数であることを表しています。今回はh9となっているので、あとの数字はそのまま10進数で9を表しています。

15を表したいときは f と書けばよいです。

16進数はhですが、10進数はd、2進数はbと書きます。

なので、同じ128という数字を表現したい場合には、16進数だと「8h80」、10進数だと「8d128」、2進数だと「8d10000000」となります。

2,10,16進数の変換は下記のサイトがおすすめです。

2進数、8進数、10進数、16進数相互変換ツールhttps://hogehoge.tk/tool/number.html


ただ、sw1で毎回リセットするのが大変なので、これを簡単にしたプログラムを次で作って行きます。


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