黒羽音響技研の実験室

黒羽音響技研のブログになります。 日常のことを書いていきます

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

弾速測定装置のVHDLソースコード

年明けてしまいました。
いまさらですが、電磁投射装置の合葬実験で用いたVHDLソースコードを公開します。

以下、ワイヤー間隔を100mmに設定した際のVHDLソースコードです。



タイマモジュール(DE0に内蔵されているクロックで1kHzを作ります)
module Timer(clk,oclk);
parameter scale=100; //oclk=1kHz/scale
input clk;
output oclk;
reg [15:0] cnt1;
reg [11:0] cnt2;
reg [3:0] dcnt;
wire iclk; //1kHz clock
reg rclk;

//1/5000000 PreScaler
assign iclk=(cnt1==16'd499) ? 1'b1 : 1'b0;
always @(posedge clk) begin
if(iclk==1'b1)
cnt1=0;
else
cnt1=cnt1+1;
end
//clock out FF
always @(posedge clk)
rclk=iclk;
assign oclk=rclk;
endmodule


クロックストッパーモジュール(停止条件でクロック送出を停止します)
module ClockStopper(din,cin,reset,iclk);
input din;
input cin;
input reset;
output iclk;
wire dffo; //D-FF Output
reg dff_cs; //D-FF
always @(posedge cin or negedge reset) begin
if(!reset) begin
dff_cs = 1;
end
else if (!cin) begin
dff_cs = 1;
end
else begin
dff_cs = 0; //D-FF preset=0
end
end
assign dffo = dff_cs;
assign iclk = din & dffo;
endmodule


ワンタイム0(入力がたち下がった瞬間にトグルし以降入力を受け付けない)
module OneTime0(din,reset,dout);
input din;
input reset;
output dout;
wire dfo; //D-FF Output
reg dff_os; //D-FF
assign dout = dfo;
always @(negedge din or negedge reset) begin
if(!reset) begin
dff_os = 1;
end
else begin
dff_os = 0; //D-FF Preset=1
end
end
assign dfo = ~dff_os;
endmodule


ワンタイム1(入力がたち下がった瞬間にトグルし以降入力を受け付けない)
module OneTime(din,reset,dout);
input din;
input reset;
output dout;
wire dfo; //D-FF Output
reg dff_os; //D-FF
assign dout = dfo;
always @(negedge din or negedge reset) begin
if(!reset) begin
dff_os = 1;
end
else begin
dff_os = 0; //D-FF Preset=1
end
end
assign dfo = dff_os;
endmodule


ユニバーサルカウンタ(10進カウンタ)
module uconter(clk,nclr,cin,cout,q);
parameter maxcnt=15; //default =HEX counter
input clk;
input nclr;
input cin;
output cout;
output [3:0] q;
reg [3:0] cnt;
assign q=cnt;
always @(posedge clk or negedge nclr) begin
if(nclr==1'b0) begin
cnt=4'h0;
end
else begin
if(cin==1'b1) begin
if(cnt==maxcnt)
cnt=4'h0;
else
cnt=cnt+1;
end
end
end
assign cout=((cnt==maxcnt) && (cin==1'b1)) ? 1'b1 : 1'b0;
endmodule


7セグデコーダー(7セグに表示させるためのデコーダー)
module HexSegDec(dat,q);
input [3:0] dat;
output [7:0] q;

//7segment decoder
function [7:0] LedDec;
input [3:0] num;
begin
case (num)
4'h0: LedDec = 8'b11000000; // 0
4'h1: LedDec = 8'b11111001; // 1
4'h2: LedDec = 8'b10100100; // 2
4'h3: LedDec = 8'b10110000; // 3
4'h4: LedDec = 8'b10011001; // 4
4'h5: LedDec = 8'b10010010; // 5
4'h6: LedDec = 8'b10000010; // 6
4'h7: LedDec = 8'b11111000; // 7
4'h8: LedDec = 8'b10000000; // 8
4'h9: LedDec = 8'b10011000; // 9
4'ha: LedDec = 8'b10001000; // A
4'hb: LedDec = 8'b10000011; // B
4'hc: LedDec = 8'b10100111; // C
4'hd: LedDec = 8'b10100001; // D
4'he: LedDec = 8'b10000110; // E
4'hf: LedDec = 8'b10001110; // F
default: LedDec = 8'b11111101; // -
endcase
end
endfunction
assign q=LedDec(dat);
endmodule



上記の6個のモジュールが主体と成っており、全体のモジュール数は12個となっています。
ブログの仕様上インデントが表示されないのがいたいですね・・・

それでわ!


スポンサーサイト
  1. 2014/01/01(水) 00:14:05|
  2. エンベデッド
  3. | トラックバック:0
  4. | コメント:0
<<合同実験の結果 | ホーム | あーと研>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://kstlab.blog90.fc2.com/tb.php/131-e86ddfaf
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

黒羽トア

Author:黒羽トア
初めましての方初めまして!
こんにちわの方こんにちわ!
コミケでヘッドフォンアンプのキットを頒布していたりする黒羽音響技研のトアです。

こちらの方はブログになります。
日常のこと、ちょっと気になった技術ネタ等を書いていこうと思っています。

よろしくお願いします!

■黒羽音響技研ホームページ

リンク

このブログをリンクに追加する

RSSリンクの表示

最新記事

最新コメント

カテゴリ

未分類 (0)
日記 (90)
PCB (2)
電子回路基礎 (3)
製作 (13)
緊急 (3)
連絡 (18)
設計 (5)
エンベデッド (3)
工具マニアックス (1)
部品マニアックス (3)
遠征 (1)
測定 (1)

検索フォーム

月別アーカイブ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。