• 検索結果がありません。

コーディング

ドキュメント内 vhdl #vhdl (ページ 41-45)

のりのきなは、VHDLエンティティのポートとポートをす3つのでしています。

1.

ブロックダイアグラムには、とリネーミングブロックの2つのラウンドコンビナトリアルブ ロックと、レジスタの1つのスクエアブロックがあります。

2.

エッジトリガレジスタのみをします。

3.

というのclockは1つしかなく、 clockちがりエッジのみをします。

4.

ブロックダイアグラムには5つのがあり、1つにはフォークがあります。これらは2つの、

2つのポートと1つのポートにしています。

5.

すべてのには、2つのりをつSumというのをき、1つのと1つのがあります。

6.

Data_inとClockは2つのポートです。らはたちのブロックのではありません。

7.

Data_outはポートです。 2008のバージョンのVHDLとをたせるために、 SumとData_outにのめ

ブロックをしました。したがって、 Data_outはに1つのと1つのがあります。

8.

SumとNext_sumは、2つのです。

9.

グラフにはに1つのサイクルがあり、それは1つのブロックをむ。

10.

たちのブロックダイアグラムは10のルールにいます。 コーディングでは、このタイプのブロック ダイアグラムをVHDLでどのようにするかをしくします。

のVHDLモデルは、2つのコンパイルでされています。

のとそのインタフェースポート、、タイプをするエンティティ。これは、ブロックダイアグ ラムののきなをしたものです。データがで、 clockがVHDLタイプのbit

2つののみ

'0'と'1'

をするとすると、のエンティティはのようになります。

entity sequential_circuit is port(

Data_in: in integer;

Clock: in bit;

Data_out: out integer );

end entity sequential_circuit;

のをするアーキテクチャそれがをするか。これは、がされ、すべてのプロセスがインスタン スされるです。たちののアーキテクチャーのは、

architecture ten_rules of sequential_circuit is signal Sum, Next_sum: integer;

begin

<...processes...>

end architecture ten_rules;

アーキテクチャにする3つのプロセス、1つのブロックと2つのコンビナトリアルいブロックがあ ります。

プロセスはのようになります。

process(clock) begin

if rising_edge(clock) then o1 <= i1;

...

ox <= ix;

end if;

end process;

ここで、 i1, i2,..., ixは、のするブロックにるすべてのであり、 o1, ..., oxは、のするブロッ クをするすべてのです。もちろん、シグナルのをいて、もされません。もない。のキャラクター でもない。

したがって、こののプロセスはのようになります。

process(clock) begin

if rising_edge(clock) then Sum <= Next_sum;

end if;

end process;

これは、にすることができます。 clockがしたにのみ、がちがりエッジ '0'から'1'

であれば、

Next_sumのをSumにりてます。

コンビナトリアルプロセスはのようになります。

process(i1, i2,... , ix) variable v1: <type_of_v1>;

...

variable vy: <type_of_vy>;

begin

v1 := <default_value_for_v1>;

...

vy := <default_value_for_vy>;

o1 <= <default_value_for_o1>;

...

oz <= <default_value_for_oz>;

<statements>

end process;

ここで、 i1, i2,..., inは、ダイアグラムのするラウンドブロックにるすべてのです。 すべてと それ。たちはどんなもれず、リストにもしません。

v1, ..., vyは、プロセスのコードをするためになです。らはのプログラミングとまったくじをっ

ています。なをします。らはにすべてがみまれるにりてられるがあります。これをしなければ、

あるプロセスからのプロセスまでののをするメモリのをモデルするので、プロセスはもうコンビ ナトリアルにはなりません。これは、プロセスのにvi := <default_value_for_vi>ステートメント のです。 <default_value_for_vi>はでなければならないことにしてください。もしそうでなければ

、それらがであれば、ってのをし、それをりてるにをみるがあります。

o1, ..., omは、ダイアグラムのするいブロックをするすべてのです。 すべてとそれ。これらは、

プロセスのになくとも1はにりてられなければなりません。 VHDL if

...、

case

...はのりてをにに

ぐことができるので、のめにに<default_value_for_oi>をりてることをくおめします。でも、この では、 ifのマスクのりて、それはとにかくをしています。

のする、の、の、 <default_value_for_..>および<statements>のをいて、このVHDLスケルトンには にもされません。のデフォルトのりてをれないでください。によってなメモリがいラッチがされ

、そのがにむものでないは、

こののでは、コンビナトリアルプロセスはのようになります。

process(Sum, Data_in) begin

Next_sum <= 0;

Next_sum <= Sum + Data_in;

end process;

これは、にすることができるSumはData_in

またはをらせるために0をりてる

Next_sum

[りてる

Sum + Data_in 。

ののが0

のに、それをきするのがあるため、のようにできます。

process(Sum, Data_in) begin

Next_sum <= Sum + Data_in;

end process;

2のみわせプロセスは、2008のVHDLバージョンにするために、のをつにしたラウンドブロックに

しています。

process(Sum) begin

Data_out <= 0;

Data_out <= Sum;

end process;

のコンビナトリアルプロセスとじで、のようにすることができます。

process(Sum) begin

Data_out <= Sum;

end process;

のなコードはのとおりです。

-- File sequential_circuit.vhd entity sequential_circuit is port(

Data_in: in integer;

Clock: in bit;

Data_out: out integer );

end entity sequential_circuit;

architecture ten_rules of sequential_circuit is signal Sum, Next_sum: integer;

begin

process(clock) begin

if rising_edge(clock) then Sum <= Next_sum;

end if;

end process;

process(Sum, Data_in) begin

Next_sum <= Sum + Data_in;

end process;

process(Sum) begin

Data_out <= Sum;

end process;

end architecture ten_rules;

3つのプロセスをのでくことができます。シミュレーションやのにはもわりません。これは、3つ

のプロセスがステートメントであり、VHDLはそれらがにであるかのようにするためです。

ドキュメント内 vhdl #vhdl (ページ 41-45)

関連したドキュメント