2017-09-24 26 views
0

VHDLに構造形式で書かれたこの非常に単純な16ビットとゲートを持っています: ファイルはhereにアップロードされています。構造VHDLコードのクロックの立ち上がりエッジで出力を更新する方法は?

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity and_16bit is 
    Port (
     A : in std_logic_vector(15 downto 0); 
     B : in std_logic_vector(15 downto 0); 
     Clk : in STD_LOGIC; 
     --Rst : in STD_LOGIC; 
     C : out std_logic_vector(15 downto 0)); 
end and_16bit; 

architecture Behavioral of and_16bit is 
component and_1bit is 
    Port (
     A : in std_logic; 
     B : in std_logic; 
     C : out std_logic); 
end component; 

signal s : std_logic_vector(15 downto 0); 

begin 
      ands: for i in 15 downto 0 generate 
      and_1bit_x: and_1bit port map (A => A(i), B => B(i), C => s(i)); 
      end generate; 
process(Clk) 
    begin 
     if rising_edge(Clk) then 
      C <= s;      
     end if; 
     end process; 
end Behavioral; 

クロックの立ち上がりエッジで出力を更新するために、この "s"信号を定義しました。私はこれが構造的なVHDLコードの出力を更新する正しい方法であるのだろうか?最初の出力に対して未知の出力を表示するにはどうすればよいですか?

コメントは大きな助けになります。

+1

正常に動作するはずです。 –

+1

これは、シミュレーションと合成の両方を行うレジスタ転送レベル(RTL)の構造です。構造的表現は、Cレジスタを個々のゲートからなるマスタスレーブフリップフロップにする。ゲート(トランジスタ、抵抗、ダイオードなど)で構成されたフリップフロップの呼び出しはあまりありません。 HDLの合成適格構築物に関する情報のソースは、合成ベンダーのドキュメントまたは今や目立ったIEEE Std 1076.6-2004(通常、ベンダーが受け入れるもののサブセット)です。 – user1155120

+1

"最初の出力に不明な出力を表示するにはどうすればよいですか?" 's'を初期化します。私。 'シグナルs:std_logic_vector(15 downto 0):=(他=> '0');'。 – JHBonarius

答えて

1

順次プロセスをサブモジュールに配置し、トップレベル(and_16bit)でインスタンス化する方がよいでしょう。その後、あなたのトップレベルはより構造的になります。

and_1bitの場合と同じように、各ビットに1つのインスタンスを設定できます。

たとえば、このモジュールは1ビットのレジスタです。

entity dff_1bit is 
    Port (
     D : in std_logic; 
     Clk : in std_logic; 
     Q : out std_logic); 
end dff_1bit; 

architecture Behavioral of dff_1bit is 
begin 

process(Clk) 
    begin 
     if rising_edge(Clk) then 
      Q <= D;      
     end if; 
end process; 

end Behavioral; 

その後、同じgenerateブロック内、and_16bitでそれをインスタンス化することができます。

dff_1bit_x: dff_1bit port map (D => s(i), Clk => Clk, Q => C(i)); 
+0

この方法では、トップレベルファイルの波形の遅延が大きくなりすぎます! – syzd

+0

@syzdこのコードは、あなたと同じ遅延(1クロックサイクル)を持つ必要があります。 – ahmedus

+0

@ahmadeusチェックしました、それは少なくとも2倍です – syzd