1

次の 2 つのコーディング スタイルの違いは何ですか? 最初のものについては、XILINX サンプル コードから読みました。2 つ目は、VHDL を教える本から読みました。

1. signal: register std_logic;
   signal: output std_logic;
   process (clk)
   begin
    if rising_edge(clk) then
      register <= outside_signal ; 
    end if;
   end process;

   output <= register;

2. signal: register_reg    std_logic;
   signal: register_next   std_logic;
   signal: output std_logic;
   process (clk)
   begin
    if rising_edge(clk) then
      register_reg <= register_next; 
    end if;
   end process;
   register_next<=outside_signal;
   output <= register_reg;

どうもありがとうございました。

4

2 に答える 2

0

明らかな違いは、プロセスで直接 outside_signal を使用するのではなく、中間シグナル register_next が outside_signal シグナルによって宣言および駆動されることです。

簡単な答えは、機能的な違いはないということです。(複雑な答えはregister_next<=outside_signal、デルタ遅延(実際の時間遅延ではありません)によって信号を遅延させるというものですが、このデルタ遅延は通常目に見えないので、その概念を理解していなくても心配する必要はありません。)

コーディングスタイルの観点からはregister_next<=outside_signal、同じ機能的動作と同じ起源を持つシグナルが異なる名前で呼び出されるコードを読むのは混乱するため、構築によるシグナルの「名前変更」は避けるべきです。

また、コーディングスタイルの観点から、クロック処理されたプロセスによって駆動される信号の名前と出力の名前には、定義された類似性があることをお勧めします。このために、出力はたとえばresult_oと呼ばれ、プロセスによって更新される内部信号はresultと呼ばれることをお勧めします。内部中間信号は、結果がモジュールで読み取られる場合に VHDL-2002 で必要とされ、出力ポートには が割り当てられresult_o <= resultます。コードを読むと、result_o と結果が関連していることが理解しやすくなります。したがって、コード:

process (clk)
begin
 if rising_edge(clk) then
   result <= outside_signal;
 end if;
end process;
result_o <= result;

ところで。「register」は予約済みの VHDL キーワードであるため、シグナル識別子として使用することはできません。

于 2013-05-18T16:27:23.820 に答える