デジタル管ダイナミックスキャン表示ルーチンの説明
長年の実務経験に基づいて、FPGA の設計プロセスは上記の 12 ステップにまとめられていますが、プロジェクトの難易度に応じて一部のステップを省略することもできます。たとえば、非常に単純なプロジェクトの場合は、点線のボックス内のステップを省略できますが、入門コースでは、どんなに単純であっても、この 12 のステップに従って説明します。
1. 要件の解釈
1.1 要件
6桁デジタル管で123456を安定表示
1.2 知識の背景
デジタル管は、複数の LED 発光ダイオードで構成される「8」の字型のデバイスです。極性の違いに応じて、コモン アノードとコモン カソードに分かれています。当社の開発ボードはコモン アノード デジタル チューブを使用しています。デジタル管の内部構造は次のとおりです。
図からわかるように、コモンアノードとコモンカソードの違い。共通アノードの共通端子は電源の正端子に接続され、共通カソードの共通端子はグランドに接続される。共通陽極デジタル管を選択する場合、対応する abcdefgdq をローレベルに設定して、対応するデジタル管を点灯するだけです。逆に、共通陰極は、対応するデジタル管を点灯させるために、abcdefgdq を電源の正極に接続する必要があります。デジタル管の概略図は次のとおりです。
今回選んだ開発ボードはアノードコモンデジタル管を使用しているので、2を表示したい場合はA、B、G、E、DのLEDを点灯させなければなりません。5を表示したい場合、どのセグメントを点灯させるべきかを自分で解析することで、一般的な陽デジタル管の0から9までのコードを取得できます。皆さんの時間を節約するために、以下に示すように、直接呼び出すことができる一般的なヤン デジタル チューブに対応するコードを整理しました。一般的な陰極デジタル管のコーディングには、ビット単位の反転のみが必要です。
開発ボードの共通ヤンデジタルチューブセグメント選択コーディングテーブルは次のとおりです。
1.3 ハードウェア設計
開発ボードはPNPトランジスタを使用しており、トランジスタのベースにローレベルを入力すると、トランジスタのコレクタとエミッタが接続され、デジタル管のビット選択ピンに3.3Vの電圧が印加されます。最初のデジタル管を点灯するには、SMG_W0 にローレベルを入力し、デジタル管コーディングテーブルに従ってデジタル管のセグメント選択に値を割り当てる必要があります。原則をマスターしたので、コードを書き始めることができます
1.4 インターフェースの説明
信号名 | 方向 | FPGAのピン番号 | 説明する |
---|---|---|---|
SMG_W0 | 出力 | E12 | ビット選択制御信号、低レベルはトランジスタをオンにしてデジタル管のビット選択に電力を供給します |
SMG_W1 | 出力 | B15 | ビット選択制御信号、低レベルはトランジスタをオンにしてデジタル管のビット選択に電力を供給します |
SMG_W2 | 出力 | E15 | ビット選択制御信号、低レベルはトランジスタをオンにしてデジタル管のビット選択に電力を供給します |
SMG_W3 | 出力 | H11 | ビット選択制御信号、低レベルはトランジスタをオンにしてデジタル管のビット選択に電力を供給します |
SMG_W4 | 出力 | K16 | ビット選択制御信号、低レベルはトランジスタをオンにしてデジタル管のビット選択に電力を供給します |
SMG_W5 | 出力 | K14 | ビット選択制御信号、低レベルはトランジスタをオンにしてデジタル管のビット選択に電力を供給します |
SMG_A | 出力 | F13 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_B | 出力 | B16 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_C | 出力 | J16 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_D | 出力 | J13 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_E | 出力 | G14 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_F | 出力 | E13 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_G | 出力 | G12 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
SMG_DP | 出力 | J14 | デジタル管セグメント選択制御信号、ローレベルでセグメントが点灯 |
要約: 上記の説明により、要件は次のように解釈できます: 最初のデジタル チューブが点灯しているとき、ビット選択は 6'h1f であり、デジタル チューブ セグメントに対して選択されたコードは 8'h9f であり、2 番目のデジタル チューブが点灯しているときは、点灯、 、ビット選択は 6'h2f、デジタル チューブ セグメント用に選択されたコードは 8'h25、3 番目のデジタル チューブが点灯すると、ビット選択は 6'h37、デジタル チューブ セグメント用に選択されたコードは 8'h0d; 4 番目のデジタル チューブが点灯しているとき、5 番目のデジタル チューブが点灯しているとき、ビット選択は 6'h3b で、デジタル チューブ セグメントに選択されたコードは 8'h99 です。5 番目のデジタル チューブが点灯しているとき、ビット選択は 6'h3d、デジタル チューブ セグメント用に選択されたコードは 8'h49、6 番目のデジタル チューブが点灯している場合、ビット選択は 6'h3e、デジタル チューブ セグメント用に選択されたコードは 8 です。 'h41;
2. 理論上の波形図を描く
3. 新しいTDプロジェクト
プロジェクトをきれいに見せ、プロジェクトの移植を容易にするため。Project、Source、Sim、Doc という 4 つの新しいフォルダーを作成します。
Project — TD プロジェクトが含まれるプロジェクト フォルダー
Source — プロジェクトのソース コード (.v ファイルまたは .vhd ファイル) が含まれるソース コード フォルダー
Sim — シミュレーション関連ファイルが含まれるシミュレーション フォルダー
Doc — 関連するファイルが保存されますデータマニュアル、要件文書などの情報
4. コードを書く
///
//QQ:3181961725
//TEL/WX:13540738439
//工程师:Mr Wang
//模块介绍:数据管动态扫描,显示123456
module smg_drv(
input clk ,
input rst_n ,
output reg [5:0] smg_bit ,
output reg [7:0] smg_seg
);
parameter refresh_time=50000;
reg [3:0] cnt;
reg [19:0] refresh_cnt;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
refresh_cnt<=0;
else if(refresh_cnt==refresh_time-1)
refresh_cnt<=0;
else
refresh_cnt<=refresh_cnt+1;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
cnt<=4'hf;
else if(refresh_cnt==0)begin
if(cnt==5)
cnt<=0;
else
cnt<=cnt+1;
end else;
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
smg_bit<=0;
smg_seg<=0;
end else case(cnt)
0:begin smg_bit<=8'h3e; smg_seg<=8'h9f;end
1:begin smg_bit<=8'h3d; smg_seg<=8'h25;end
2:begin smg_bit<=8'h3b; smg_seg<=8'h0d;end
3:begin smg_bit<=8'h37; smg_seg<=8'h99;end
4:begin smg_bit<=8'h2f; smg_seg<=8'h49;end
5:begin smg_bit<=8'h1f; smg_seg<=8'h41;end
default:;
endcase
end
endmodule
5. シミュレーション テスト スティミュラス ファイルの書き込み
`timescale 1ns/1ns
module smg_drv_tb;
reg clk ;
reg rst_n ;
initial
begin
clk = 0;
rst_n=0;
#1000
rst_n=1;
end
always #10 clk=~clk;
smg_drv Usmg_drv(
.clk (clk),
.rst_n (rst_n),
.smg_bit (),
.smg_seg ()
);
endmodule
6.Modelsimシミュレーション
Modelsim シミュレーションには通常 2 つの方法があります。
-
グラフィカル インターフェイス シミュレーションとは、すべての操作が Modelsim ソフトウェア インターフェイス上で完了することを意味します。この方法の利点は、習得が容易で単純なプロジェクトに適していることです。欠点は、操作手順が煩雑であることです。
-
バッチ シミュレーションでは、シミュレーション前に対応するスクリプト ファイルを作成する必要があります。この方法の利点は、シミュレーションが 1 クリックで完了し、時間と労力を節約できることです。欠点は、初期段階でスクリプト ファイルを作成する必要があることです。最初の 2 つの講義ではグラフィカル インターフェイス シミュレーションを使用しましたが、エンジニアリングの現実に近づけるために、この講義からはバッチ処理シミュレーションを使用します。具体的な操作手順については、ビデオチュートリアルを参照してください。
シミュレートされた波形は次のとおりです。
7. 波形を比較する
2 番目のステップで作成した理論上の波形図と、6 番目のステップで Modelsim でシミュレーションした波形図を比較すると、結果は一致しており、論理設計が正しいことがわかります。比較結果が矛盾していることが判明した場合は、その矛盾の理由を見つけて、最終的には比較結果が一貫していることを確認する必要があります。比較すると、理論上の波形はシミュレートされた波形と一致しており、機能が設計要件を満たしていることを示しています。
8.vファイルを追加します
9 ピンをバインドし、制約ファイル (.adc) を保存します。
10 BIT ファイルをコンパイルおよび合成する
11.BITファイルをダウンロードする
ダウンロードが成功すると、開発ボード上の実験現象を観察できます。実験現象が設計要件と一致する場合、設計に問題がないことを意味し、構成ファイルを確定する次のステップに進むことができます。 。
12 固化設定ファイル
FPGAは停電するとコンフィグレーション情報が失われる特性があるため、コンフィグレーションチップ(FLASH)にコンフィグレーション情報を保存する必要があり、開発ボードの電源投入後、FPGAはコンフィグレーションチップ内のコンフィグレーション情報を読み取ります。 、そのため、開発 電源をオフにして再度オンにしても、ボードは引き続き正常に動作します。
硬化が成功したら、開発ボードの電源をオフにして、再度電源をオンにすると、開発ボードが今までの機能を引き続き実行できることがわかります。