のりのきなは、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;