ここでは、最も単純なプログラムから始めて、最も単純なシミュレーションファイルの作成方法を見ていきます。
同期クリア機能を備えたD型フリップフロップをテストします。
まず、トリガーコードは次のとおりです。
module SyncResetFF(
D, Clock, Reset,Q
);
input D, Clock, Reset;
output reg Q;
//时钟正边沿触发的前提下, reset仍然是低电平触发
always@(posedge Clock)
if(!Reset)
Q<= 0;
else
Q<= D;
endmodule
次に、このデバイスのシミュレーションプログラムを作成します。他のチュートリアルを参照して、シミュレーションファイルを正しい場所に追加できます。
次に、シミュレーションプログラムを開き、編集を開始します。
最初にこの部分について話させてください:
reg data, clk, reset;
wire q;
SyncResetFF srf1(data, clk, reset, q);
ここでは、元のトリガーの入力をregタイプに設定し、出力をワイヤータイプに設定します。次に、トリガーをインスタンス化し、指定された場所に変数を入力します(モジュールをインスタンス化したのと同じように)。
次の部分:
//设置时钟 每50ns修改一次,也就是100ns为一个周期
initial begin
clk=1;
forever #50 clk = ~clk;
end
ここで時計を宣言します。vivadoテスト自体にはクロックがあります。ここでは、vivadoテストクロックに応じて使用するクロックを定義します。
#50は、vivadoテストの時間軸が50ns進むたびに、clkが反転することを意味します。つまり、100nsの周期でクロックを定義します。
vivadoクロックは上の時間軸であり、定義したclkは赤いものです。それらの間には違いがあります。
次のパートで説明するように、vivado軸は#の後に値を渡し、それに応じて変数が変更されます。
//设置输入信号
initial begin//初始状态的值
reset= 0; data=0;
#100 reset=1; data=1;//100ns时修改这些值
#100 data=0;//过了100ns再作修改
#110 data=1;//再过110ns
#90 data=1;//再过90ns
#200 reset=0;data=1;//...
end
シミュレーションの実行後、これが最終結果になります(トランスクリプトのみを出力するように求められた場合は、デジタルロジックセクションの別のブログ投稿を参照してください。この問題は1週間悩みました)
一般に、順序回路のclk設定は、vivadoテストクロックに依存する必要があり、異なる時間での入力データの変更もvivadoクロックによってマークされます。入力データとclk自体は独立しているように見えますが、それらはvivadoクロックを介して接続されており(調和と差異の効果を実現するため)、シミュレーションテストの機能も実現しています。
このブログ投稿の説明方法や文言は専門的かつ正確ではない可能性があり、操作方法は非常に単純で失礼であることに注意してください。しかし、最初のシミュレーションを実現するためには、それが役立つと思います。ありがとうございました。