Verilogで半加算器、Icarusでシミュレート


このエントリーをはてなブックマークに追加
  • Icarus VerilogでシミュレートとVerilogの勉強
  • Full Adderってのが出てきてそもそもなんなのか調べてた
    • 日本語だと全加算器のことらしい
  • その前に、半加算器というのがあるっぽい
    • が、単純すぎて例がなかったのでコード書いてみた
    • できた、よかった


Full Adder

  • Full Adder in Digital Logic - GeeksforGeeks
  • 全加算器のこと
  • 半加算器と全加算器 Chap9
  • セレクタ
    • マルチプレクサとも呼ばれる
    • 多数の入力から、1つの入力を選択して出力する回路
    • 入力の選択は、通常2進数に対応するセレクト入力により決定される
    • 下記が視覚的にわかりやすい
    • データを選ぶ(セレクトする)からデータセレクタかなるほど
    • 状態によって、選べるデータが変えられるということだから・・・
      • たとえばAに値する部分を、暗闇センサーとかにしておいて
      • 入力信号を、エアコンのスイッチとかにしておけば
      • IoTが作れるのかなぁ~
    • あれか、キーボードの英語入力と日本語入力切り替えるみたいなイメージもかな
    • 反対に、一つの入力に対して複数の出力があって、制御信号によって1つの出力が選択されるやつはデマルチプレクサと呼ばれる
  • というか本題の半加算器と全加算器
    • 半加算器
      • 1bit と 1bit の加算を行う回路
      • 入力は2つ、出力はそのビット出力(Sum)と桁上り(Carry)の2つ
    • 全加算器
      • 1bit と 1bit の加算を行うのは一緒
      • ただし、入力が3つある
  • ふむ・・・
    • 半加算器
    • part10.pdf
    • 半加算器は、2つの入力で2つの出力
      • 繰り上がり
      • 加算結果
    • が出力可能
    • しかし、これだと何桁もの計算というのはできない
      • 何桁もやろうとすると、それぞれで生じた繰り上がりを再び処理する必要があるため
  • 半加算器をVerilogで実装してみる, さらにicarus verilogでシミュレートしてみる
  • Verilog HDLによる組合せ論理回路の設計(授業用) - Qiita
    • carryは英語で桁上りのことをあらわす
    • 桁上り部分の出力なので carry out, cout
    • あとは加算結果なので A (answer?)


halfadder.v

1
2
3
4
5
6
7
8
9
10
11
module halfadder(
input x,
input y,
output A,
output cout
);
assign cout = x & y;
assign A = x ^ y;
endmodule // halfadder


halfadder_test.v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
`timescale 1ns/1ns
module halfadder_test();
reg input1;
reg input2;
wire out;
wire carryout;
halfadder uut(
.x(input1),
.y(input2),
.A(out),
.cout(carryout)
);
initial begin
input1 = 0;
input2 = 0;
end
initial begin
forever begin
#5 input1 = $random;
end
end
initial begin
forever begin
#5 input2 = $random;
end
end
initial begin
#100 $finish();
end
initial begin
$monitor("time=%2d, IN1=%1b, IN2=%1b, CarryOut=%1b, OUT=%1b", $time, input1, input2, carryout, out);
$dumpfile("halfadder.vcd");
$dumpvars(0, halfadder_test);
end
endmodule

このエントリーをはてなブックマークに追加