2013-04-09 2 views
1

VHDL로 FPGA 프로젝트를 진행 중입니다.VHDL : 설정과 관련하여 다른 구성 요소를 적절하게 클로킹

16 비트 시프트 레지스터가 채워질 때마다 FIFO에 복사해야합니다 (예 : 16 개의 새로운 데이터 비트가 시프트 레지스터에 입력 된 후 새로 형성된 16 비트 워드를 가져 와서 a fifo)

내 질문은 FIFO의 클록 라인을 설정하기 전에 FIFO의 입력에서 데이터를 설정해야합니까? 이것은 실제로 일반적인 VHDL 질문이며 FIFO에만 국한되지는 않습니다.

기본적으로 동일한 작업으로 데이터를 설정하고 시계를 전환 할 수 있습니까? 아니면 하나의 클럭 에지에서 데이터를 설정하고 다음에 FIFO 시계를 전환하려면 기본 상태 시스템이 필요합니까? 예를 들어

:

fifo_d_in(7 downto 0) <= shift_register; 
fifo_clk <= '1'; 

또는

if(state = one) then 
    fifo_d_in(7 downto 0) <= shift_register; 
    state <= two; 
elsif(state = two) then 
    fifo_clk <= '1'; 
end if; 

내 직감 내가 입력 레지스터의 설정 & 보류 요구 사항을 충족하기 위해, 데이터를 먼저 설정한다는 것을 알려줍니다.

감사합니다.

+0

FIFO에 클럭 인 에이블 (CLKEN) 유형의 입력이 있습니까? –

+0

@AustinPhillips 네, 맞습니다. 동일한 클럭 에지에서 데이터를 설정하는 것과 동일한 시간을 주장 할 수 있습니까? – Marcus10110

답변

0

데이터는 클럭 에지 이전의 설정 시간 동안 존재해야하므로 가능한 모든 데이터 변경과 동시에 클럭을 지정하면 불안정한 동작이 발생할 수 있습니다.

시프트 레지스터를 구성하는 한 가지 방법은 데이터의 마지막 비트가 클럭 인 된 후에 어설 션되는 출력을 갖는 것입니다. 8 비트 시프트 레지스터의 경우, 8 번째 클럭 이후에 신호가 어설 션됩니다. 쉬운 방법은 3 비트 카운터를 사용하는 것입니다. 모든 비트가 1이면 출력이 1이됩니다. 그러면이 신호가 FIFO의 CLKEN에 연결되어 9 번째 클럭 에지에서 시프트 출력의 데이터 레지스터는 fifo에 클록 킹됩니다. 또한 9 번째 클록에서 시프트 레지스터에 데이터의 다음 시리얼 비트를 클록 할 수 있습니다. 상기 도면에서

 shift reg    FIFO 
     -------------  --------- 
     -|DIN DOUT |--------| DIN | 
     |  FULL |--------| CLKEN | 
    - |>   |  --|>  | 
    | -------------  | --------- 
    |     | 
CLK ----------------------- 

, 전체 데이터의 마지막 비트 시프트 레지스터를 채우기 위해 클로킹 된 후 즉시을 주장하고, 다음 사이클에 어서 트된다. FULL은 조합 논리가 될 수 있습니다.