Downcodes のエディターでは、Verilog コードの作成方法と、シリアル出力に統合されている 8 ビット シフト レジスタのシミュレーション テスト方法を理解できます。この記事では、モジュール定義、内部レジスタとロジック設計、制御ロジックの実装、シミュレーション モジュールの作成など、パラレル ロードとシリアル出力を備えた 8 ビット シフト レジスタの設計方法について詳しく説明します。明確な手順とサンプル コードを通じて、デジタル回路設計における Verilog HDL のアプリケーションを理解して習得し、最終的に完全に機能する 8 ビット シフト レジスタを実現するのに役立ちます。
パラレルインシリアルアウト8ビットシフトレジスタは、データをパラレルにロードし、データをシリアルに出力できるレジスタです。このタイプのレジスタの Verilog コードを作成するには、クロック エッジ トリガ プロセスを定義し、8 ビット幅のレジスタ変数を使用して状態を保存し、パラレル ロードとシリアル出力を制御する制御信号を定義します。コードを記述するときは、さまざまな動作モードを考慮し、適切な制御およびデータ インターフェイスを提供する必要があります。
以下に、並列ロード機能の設計方法を詳しく説明します。
パラレルロード機能を実装するには、ロードなどの制御信号を定義できます。ロードがハイレベルの場合、レジスタの状態はシーケンス入力ではなく、入力端のパラレルデータに基づいて即座に更新されます。 Verilog コードでは、このロジックはクロック エッジ トリガーの Always ブロックに実装できます。ロード信号を検出することで、外部から与えられたパラレルデータをレジスタにロードするか、シリアル入力に基づいてシフトするかを決定できます。
モジュール ShiftRegister_8bit(
入力ワイヤークロック、
まず入力線、
入力ワイヤ負荷、
入力ワイヤのserial_in、
入力ワイヤ [7:0] 並列入力、
出力レジスタ [7:0] data_out
);
reg [7:0] シフトレジスタ;
常に @(posedge clk または posedge rst) begin
(最初に) 始まったら
シフトレジスタ <= 8'b0;
データアウト <= 8'b0;
end else if (load) begin
SHIFT_REG <= Parallel_IN; // 並列ロード
終了、そうでない場合は開始
SHIFT_REG <= SHIFT_REG << 1; // 左にシフトします。
SHIFT_REG[0] <= Serial_in //シリアル入力データが最下位ビットに入る
終わり
終わり
常に @(*) で始まります
data_out = SHIFT_REG; // 出力データを常に更新します
終わり
上記alwaysブロックでは、リセット信号rstを検出してレジスタを初期化し、ロード信号を用いてパラレルロードするかシリアルシフトするかを制御します。シリアル シフト操作では、データ ビットの移動を実現するためにレジスタ全体を左にシフトすることに加えて、serial_in 信号を通じて新しいシリアル入力を受け入れる必要もあります。
モジュール ShiftRegister_8bit_tb;
// 入力ポート
reg clk_tb;
登録 rst_tb;
regロード_tb;
登録シリアル_in_tb;
reg [7:0] パラレルイン_tb;
//出力ポート
ワイヤー [7:0] data_out_tb;
// テスト対象のモジュールをインスタンス化します。
ShiftRegister_8bit uut (
.clk(clk_tb)、
.rst(rst_tb)、
.load(load_tb)、
.serial_in(serial_in_tb)、
.Parallel_in(Parallel_in_tb),
.data_out(data_out_tb)
);
//クロック信号の生成
最初の始まり
clk_tb = 0;
永遠 #10 clk_tb = ~clk_tb; // 20 単位時間のクロック信号を作成します
終わり
//テストスティミュラスシーケンス
最初の始まり
//信号を初期化する
rst_tb = 1; ロード_tb = 0; パラレル_in_tb = 0;
#25 rst_tb = 0; // リセット信号を解除
#20 load_tb = 1;Parallel_in_tb = 8'b10101010; // テストデータを並列にロードします
#20 load_tb = 0; // 並列ロードをオフにしてシリアルシフトを開始します。
serial_in_tb = 1; //シリアル入力データを開始し、出力を観察します。
#(8 * 20)serial_in_tb = 0; //複数クロックサイクルのシリアルデータを入力し、出力を確認します
// テスト完了、リセットリセット
#40 rst_tb = 1;
#20 rst_tb = 0;
終わり
エンドモジュール
シミュレーション モジュールでは、シフト レジスタ全体の動作を駆動するためにクロック信号が最初に生成されます。次に、最初のリセット信号、ロード パラレル ロード制御信号、serial_in シリアル入力信号など、特定の時点でのテスト スティミュラスの値を変更することにより、外部入力がシミュレートされます。シミュレーション中に、data_out 出力の変化が、さまざまな信号励起下でのシフト レジスタの予期される動作に適合するかどうかを確認します。シミュレーション波形またはシミュレーション ログを観察して、レジスタの機能が正しいことを確認します。
要約すると、合理的な Verilog コード設計と事実検証テストは、パラレル入力およびシリアル出力の 8 ビット シフト レジスタの正しい動作を保証するための重要な手順です。
Q: 1. 8 ビット シフト レジスタの Verilog コードを作成して実行するにはどうすればよいですか? A: 8 ビット シフト レジスタの Verilog コードを作成して実行するには、次の手順に従う必要があります。
Verilog 言語を使用してシフト レジスタ モジュールのコードを記述し、入力ポートと出力ポートを定義します。シフト レジスタ モジュールのシミュレーション テスト用のテストベンチ コードを作成します。 ModelSim や Vivado などの Verilog シミュレーション ツールを使用して、デザイン ファイルとテスト ファイルをロードしてコンパイルします。シミュレーションを実行し、シフト レジスタの出力を観察し、波形解析を実行してその機能を検証します。Q: 2. 8 ビット シフト レジスタの Verilog コードをシミュレートおよびテストするにはどうすればよいですか? A: 8 ビット シフト レジスタの Verilog コード シミュレーション テストを実行するには、次の手順に従います。
シフト レジスタ モジュールの入力信号に値を割り当てるテスト ベクトルや出力結果を検証するステートメントなどのテストベンチ コードを作成します。テストベンチ コードでは、Verilog の $monitor または $display コマンドを使用して、モジュールの入力信号と出力信号の値をリアルタイムで表示します。シミュレーション中に、適切なクロック信号を生成してシフト レジスタの動作を制御し、その出力結果を観察します。シミュレーションを実行し、シミュレーション波形を観察および分析して、シフト レジスタが正しく機能していることを確認します。Q: 3. 8 ビット シフト レジスタの Verilog コード シミュレーションを実行するために推奨できる Verilog シミュレーション ツールはありますか? A: 8 ビット シフト レジスタの Verilog コード シミュレーションを実行する場合、ModelSim、Vivado、ISE、Quartus など、いくつかの一般的な Verilog シミュレーション ツールから選択できます。
ModelSim は、強力なシミュレーションおよびデバッグ機能を提供する一般的に使用される Verilog シミュレーション ツールであり、Verilog コードのシミュレーション テストを実行するために使用できます。 Vivado はザイリンクスが開発した包括的なツール スイートで、シミュレーション機能も備えており、Verilog コードのシミュレーション テストの実行に適しています。 ISE および Quartus は、Xilinx および Altera FPGA デバイス用の包括的なツール スイートであり、Verilog コードのシミュレーション テストを実行するために使用できるシミュレーション機能も提供します。 Verilog シミュレーション ツールを選択するときは、個人の好みやプロジェクトのニーズに基づいて選択し、それぞれの特性に基づいて決定を下すことができます。この記事が、Verilog コードの作成方法と 8 ビット シフト レジスタのシミュレーション テスト方法をよりよく理解し、習得するのに役立つことを願っています。ご質問がございましたら、お気軽にお問い合わせください。