工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilog 全加算器

加算器は、2 つの数値の加算を実行するデジタル コンポーネントです。プロセッサの ALU 内の主要なコンポーネントであり、アドレス、テーブル インデックス、バッファ ポインタをインクリメントするために使用され、追加が必要な他の多くの場所で使用されます。

全加算器は、桁上げ入力を他の入力 2 進数と加算して、合計と桁上げ出力を生成します。

真理値表

A B シン カウト 合計
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

デザイン

4 ビット加算器の例を以下に示します。これは、両方とも 4 ビット幅の信号 a と b を介して 2 つの 2 進数を受け入れます。加算器は組み合わせ回路であるため、Verilog で assign の連続代入を使用してモデル化できます。 または always すべての入力で構成される機密リストを含むブロック。以下に示すコードは、前者のアプローチのコードです。

  
  
module fulladd (  input [3:0] a,
                  input [3:0] b,
                  input c_in,
                  output c_out,
                  output [3:0] sum);

   assign {c_out, sum} = a + b + c_in;
endmodule

  

以下に示すコードは always を使用しています 入力のいずれかが値を変更するたびに実行されるブロック。

  
  
module fulladd (  input [3:0] a,
                  input [3:0] b,
                  input c_in,
                  output reg c_out,
                  output reg [3:0] sum);

	always @ (a or b or c_in) begin
  	{c_out, sum} = a + b + c_in; 	
  end
endmodule

  

ハードウェア回路図

テストベンチ

  
  
module tb_fulladd;
	// 1. Declare testbench variables
   reg [3:0] a;
   reg [3:0] b;
   reg c_in;
   wire [3:0] sum;
   integer i;

	// 2. Instantiate the design and connect to testbench variables
   fulladd  fa0 ( .a (a),
                  .b (b),
                  .c_in (c_in),
                  .c_out (c_out),
                  .sum (sum));

	// 3. Provide stimulus to test the design
   initial begin
      a <= 0;
      b <= 0;
      c_in <= 0;
      
      $monitor ("a=0x%0h b=0x%0h c_in=0x%0h c_out=0x%0h sum=0x%0h", a, b, c_in, c_out, sum);

		// Use a for loop to apply random values to the input
      for (i = 0; i < 5; i = i+1) begin
         #10 a <= $random;
             b <= $random;
         		 c_in <= $random;
      end
   end
endmodule

  

a と b を合計して 4 ビット幅を超える数値が得られる場合、合計はゼロにロールオーバーし、c_out が 1 になることに注意してください。たとえば、黄色で強調表示された行を合計すると 0x11 になり、下位 4 ビットが割り当てられますsum と bit#4 を c_out に。

シミュレーションログ
ncsim> run
a=0x0 b=0x0 c_in=0x0 c_out=0x0 sum=0x0
a=0x4 b=0x1 c_in=0x1 c_out=0x0 sum=0x6
a=0x3 b=0xd c_in=0x1 c_out=0x1 sum=0x1
a=0x5 b=0x2 c_in=0x1 c_out=0x0 sum=0x8
a=0xd b=0x6 c_in=0x1 c_out=0x1 sum=0x4
a=0xd b=0xc c_in=0x1 c_out=0x1 sum=0xa
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. Verilog チュートリアル
  2. Verilog 連結
  3. Verilog 割り当て
  4. Verilog ブロッキング &ノンブロッキング
  5. Verilog 関数
  6. Verilog タスク
  7. Verilog クロック ジェネレーター
  8. Verilog 数学関数
  9. Verilog タイムフォーマット
  10. Verilog タイムスケール スコープ
  11. Verilog ファイルの IO 操作