カウンターを作る
音響浮揚装置では、超音波のトランスデューサーを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進数の変換は下記のサイトがおすすめです。
ただ、sw1で毎回リセットするのが大変なので、これを簡単にしたプログラムを次で作って行きます。
この記事が気に入ったらサポートをしてみませんか?