琉球大学情報工学科 和田 知久
ライブラリ宣言 |
library IEEE; |
いつもどおり |
ENTITY宣言 |
entity MULTIPLEXER4 is |
エンティティ宣言 |
port ( D : in std_logic_vector(3
downto 0); |
ポート宣言 |
|
end MULTIPLEXER4; |
エンティティ終了。";"忘れるな! |
|
回路の中味の記述 |
architecture DATAFLOW of MULTIPLEXER4 is |
アーキテクチャ宣言 |
begin |
|
ライブラリ宣言 |
library IEEE; |
いつもどおり |
ENTITY宣言 |
entity DECODER_2_4 is |
エンティティ宣言 |
port ( D : in std_logic_vector(1
downto 0); |
ポート宣言 |
|
end DECODER_2_4; |
エンティティ終了。";"忘れるな! |
|
回路の中味の記述 |
architecture DATAFLOW of DECODER_2_4 is |
アーキテクチャ宣言 |
begin |
|
ライブラリ宣言 |
library IEEE; |
いつもどおり |
ENTITY宣言 |
entity PARITY_CHECKER is |
エンティティ宣言 |
port ( A : in std_logic_vector(7
downto 0); |
ポート宣言 |
|
end PARITY_CHECKER; |
エンティティ終了。";"忘れるな! |
|
回路の中味の記述 |
architecture DATAFLOW of PARITY_CHECKER is |
アーキテクチャ宣言 |
begin |
|
Variable と Signal (代入が時間的に異なり、トラブリやすい)
architecture RTL of REI is process (X, Y, Z, C) begin C <= Z; end process; この例ではCにY,Zが代入されるが、それらは A <= X + Y B <= X + Y |
architecture RTL of REI is process (X, Y, Z) C := Z; end process; この例ではCはvariableであり、その行で A <= X + Z B <= X + Y |
あるarithmetic logic unit (ALU)の設計
S4 |
S3 |
S2 |
S1 |
S0 |
Cin |
動作 |
説明 |
実行ブロック |
0 |
0 |
0 |
0 |
0 |
0 |
Y <= A |
Aを転送 |
Arithmetic Unit |
0 |
0 |
0 |
0 |
0 |
1 |
Y <= A+1 |
Aをインクリメント |
Arithmetic Unit |
0 |
0 |
0 |
0 |
1 |
0 |
Y <= A + B |
加算 |
Arithmetic Unit |
0 |
0 |
0 |
0 |
1 |
1 |
Y <= A + B + 1 |
キャリー付加算 |
Arithmetic Unit |
0 |
0 |
0 |
1 |
0 |
0 |
Y <= A + Bbar |
AとBの1の補数をたす |
Arithmetic Unit |
0 |
0 |
0 |
1 |
0 |
1 |
Y <= A + Bbar + 1 |
減算 |
Arithmetic Unit |
0 |
0 |
0 |
1 |
1 |
0 |
Y <= A - 1 |
デクリメント |
Arithmetic Unit |
0 |
0 |
0 |
1 |
1 |
1 |
Y <= A |
Aを転送 |
Arithmetic Unit |
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
0 |
0 |
0 |
Y <= A and B |
論理積 |
Logic Unit |
0 |
0 |
1 |
0 |
1 |
0 |
Y <= A or B |
論理和 |
Logic Unit |
0 |
0 |
1 |
1 |
0 |
0 |
Y <= A xor B |
排他的論理和 |
Logic Unit |
0 |
0 |
1 |
1 |
1 |
0 |
Y <= Abar |
1の補数 |
Logic Unit |
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
0 |
0 |
0 |
Y <= A |
Aを転送 |
Shifter Unit |
0 |
1 |
0 |
0 |
0 |
0 |
Y <= shl A |
Aを左シフト |
Shifter Unit |
1 |
0 |
0 |
0 |
0 |
0 |
Y <= shr A |
Aを右シフト |
Shifter Unit |
1 |
1 |
0 |
0 |
0 |
0 |
Y <= 0 |
0を転送 |
Shifter Unit |
リスト alu.vhd comb_process\alu.vhd
テストベンチ test_alu.vhd comb_process\test_alu.vhd
ライブラリ宣言 |
library IEEE; |
IEEE.std_logic_unsignedは、std_logic_vector型で |
エンティティ |
entity ALU is |
エンティティ宣言 |
アーキテクチャ |
architecture COND_DATA_FLOW of ALU is |
内部で直ぐに後段の回路で用いる信号はVariableで宣言する。 |
--------------------------- |
LogicUnitは後段で用いるので、Variableとし、即値代入(:=)を使用する。 |
|
--------------------------- |
ArithUnitは後段で用いるので、Variableとし、即値代入(:=)を使用する。 |
|
--------------------------- |
ALU_NoShiftは後段で用いるので、Variableとし、即値代入(:=)を使用する。 |
|
--------------------------- |
出力YはSignalなので、遅延代入(<=)を用いる。 |
|
end process
ALU_AND_SHIFT; |
|
リスト alu.vhd comb_process\alu.vhd
テストベンチ test_alu.vhd comb_process\test_alu.vhd
1)正常動作を確認せよ!
2) 回路合成を行う。
以上