2017-09-24 6 views
0

VHL 구조 형태로 작성된이 매우 간단한 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) : = (others => '0');'. – JHBonarius

답변

1

순차적 프로세스를 하위 모듈에 넣고 최상위 레벨 (and_16bit)에서 인스턴스화하는 것이 좋습니다. 그러면 최상위 레벨이 더 구조화됩니다.

and_1bit의 경우와 마찬가지로 각 비트마다 하나의 인스턴스를 가질 수 있습니다.

예를 들어,이 모듈은 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 적어도 두 배로 확인했습니다 – syzd