1. ISSPとは何ですか?ISSPとは何ですか?
Quartus IIソフトウェアは、In-System Sources and Probes Editorデバッグツールを提供します。このツールを使用して、JTAGインターフェイスを介して内部ノードのロジック値を駆動およびサンプリングできます。つまり、fpgaの内部信号はSources関数によって駆動され、内部ノードのロジック値はProbes関数によって検出されます。このツールは、システム設計が完了する前に、多数の入力刺激をシミュレートするために使用できます。たとえば、一部の内部レジスタの値は、コードを再変更し、完全にコンパイルしてからダウンロードしてデバッグすることなく、IPコアを介してリアルタイムで変更できます。
一般的に、ISSP IPコアを使用すると、テスト対象のモジュールに入力を提供でき、この入力をオンラインで変更できます。同時に、テスト対象のモジュールの出力値を検出することもできます(Signaltapと同様)。
2.ISSPの使用
ニキシー管の静的表示の章(FPGAの非常に簡単な入門チュートリアル----ニキシー管の章(1)静的表示)では、動的ドライバーコードを記述し、タイミングデータ生成の方法を使用してドライバーコードをテストしました。このテスト方法はカバレッジが高いですが、十分な柔軟性がありません。ISSP IPコアを使用してテストする場合、入力をオンラインで直接変更して、特定のデバッグの役割を果たすことができます。
1.最初に新しいプロジェクトissp_testを作成します
2.新しいデジタルチューブドライバーファイルを作成し、プロジェクトに追加します
//6位8段式数码管静态显示驱动
//端口定义
module dis_sta_dri (
input sys_clk , //时钟信号
input sys_rst_n , //复位信号(低有效)
input [3:0] num, //数码管显示的十进制数
output reg [5:0] dis_sel, //数码管位选
output reg [6:0] dis_seg, //数码管段选
output dis_dp //数码管小数点
);
assign dis_dp = 1'b1; //小数点,我们暂时不同,使其无效即可
//控制数码管位选信号(低电平有效),选中所有的数码管
always @ (posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
dis_sel <= 6'b111111; //复位熄灭所有数码管
else
dis_sel <= 6'b000000; //复位完成后给所有数码管供电
end
//根据数码管显示的数值,控制段选信号(低电平有效)
always @ (posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
dis_seg <= 7'b111_1111; //复位时熄灭数码管(这一条用处不大,因为复位时数码管也不供电)
else begin
case (num)
4'h0 : dis_seg <= 7'b000_0001; //显示数字“0”,则数码管的段选编码为7'b000_0001
4'h1 : dis_seg <= 7'b100_1111;
4'h2 : dis_seg <= 7'b001_0010;
4'h3 : dis_seg <= 7'b000_0110;
4'h4 : dis_seg <= 7'b100_1100;
4'h5 : dis_seg <= 7'b010_0100;
4'h6 : dis_seg <= 7'b010_0000;
4'h7 : dis_seg <= 7'b000_1111;
4'h8 : dis_seg <= 7'b000_0000;
4'h9 : dis_seg <= 7'b000_0100; //显示数字“9”,则数码管的段选编码为7'b000_0100
default : dis_seg <= 7'b111_1111; //其他数字(16进制的数字相对10进制无效)则熄灭数码管
endcase
end
end
endmodule
3.IP選択インターフェースに入ります
4. In-System Sources and Probes Editor IPコアをインスタンス化します。名前(選択した方)はSou_Proです。[次へ]をクリックして、IPパラメーター設定インターフェイスに入ります。
5.次のようにIPパラメータを設定します
(1)インスタンス化されたIPの番号(デフォルト設定)を変更する必要がないかどうかを選択します
(2)IPコアのID番号を設定するかどうか。プロジェクトでは、複数のインシステムソースおよびプローブエディタのIPコアをインスタンス化でき、ID番号を使用してさまざまなIPコアを区別できるためです。
(3)プローブ(プローブ)ポートの設定に使用します。プローブ機能を使用して、デジタルチューブのセグメント選択値を検出し、入力値が対応する正しい出力を得ることができるかどうかを確認します。ビット幅は7に設定します。
(4)ドライバー(ソース)ポートの設定に使用され、ソースビット幅は20に設定されます(画像が矛盾していることに注意してください)。これは、デジタルチューブドライバー番号のビット幅と一致します。
(5)詳細設定オプション。ドライブ信号の初期値と、送信ドライブ信号がソースクロックと同期しているかどうかを設定するために使用できます。(通常はデフォルトのままにします)
6.終了するまで[次へ]をクリックして、IPの作成を完了します。
7.最上位ファイルを作成してプロジェクトに追加し、次のようにニキシー管ドライバーとISSPIPコアをインスタンス化します。
//ISSP IP 测试文件
module issp_test(
input sys_clk , //时钟信号
input sys_rst_n , //复位信号(低有效)
output [5:0] dis_sel , //数码管位选
output [6:0] dis_seg , //数码管段选
output dis_dp //数码管小数点
);
wire [3:0] num; //数码管显示的十进制数,10进制,范围0-9
//例化数码管驱动
dis_sta_dri dis_sta_dri_inst(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n ),
.num (num ),
.dis_sel (dis_sel ),
.dis_seg (dis_seg ),
.dis_dp (dis_dp )
);
//例化ISSP IP核
Sou_Pro Sou_Pro_inst (
.probe (dis_seg ), //探测数码管段选
.source (num ) //生成数码管显示数据
);
endmodule
8.プロジェクトを完全にコンパイルし、生成されたファイルをFPGAにダウンロードします
この時点で、IPコアの作成が完了し、オンラインデバッグツールを使用してテスト対象のモジュールをデバッグします。
3.テストプロセスと結果
1.次のように、オンラインデバッグツールを開きます。
2.ウィンドウの右側で独自のJTAGインターフェイスを選択します
3.インターフェースは次のとおりです。
4.プローブとソースを右クリックして、データのベースを選択し、プローブを2進数に、ソースを10進数に設定します。
5.ソースウィンドウに1を入力し、検出データを読み取ります。この時点で読み取られるデジタルチューブセグメントの選択値は10011111であり、予想と一致しています。
同時に、私たちの開発ボード上のデジタルチューブは111111を示していることがわかりました。これは予想と一致しています。
6.ソースウィンドウに7を入力し、検出データを読み取ります。この時点で読み取られたデジタルチューブセグメントの選択された値は00011111であり、これは予想と一致しています。
同時に、私たちの開発ボードのデジタルチューブは777777を示していることがわかりました。これは期待と一致しています
4.その他
- 作成するのは簡単ではありません。この記事が役に立ったら、いいね、コメント、ブックマークを付けてください。あなたのサポートは私が更新し続ける最大の動機です!
- この記事について何か考えがあれば、コメント欄にメッセージを残すことができます。プロジェクト全体が必要な場合は、コメントにメールを残すか、私のメールにプライベートメッセージを送信してください(プライバシーの保護に注意してください)。
- 自分の能力が足りないので、間違いがあればたくさん指摘してください!
バージョン情報
ファイル:V1.0
番号:0003
Quartus II:Quartus II 13.1(64ビット)