VHDL
이전 자습서에서는 wait for
를 사용했습니다. 시뮬레이션에서 시간을 지연시키는 명령문. 그러나 생산 모듈은 어떻습니까? wait for
문을 사용할 수 없습니다. 회로의 전자에게 주어진 시간 동안 일시 중지하도록 말할 수 없기 때문에 시뮬레이션에서만 작동합니다. 그렇다면 디자인 모듈에서 어떻게 시간을 추적할 수 있습니까?
답은 단순히 클럭 사이클을 계산하는 것입니다. 모든 디지털 설계는 알려진 고정 주파수에서 진동하는 클록 신호에 액세스할 수 있습니다. 따라서 클럭 주파수가 100MHz라는 것을 알면 1억 클럭 사이클을 세어 1초를 측정할 수 있습니다.
이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다.
VHDL에서 초를 계산하기 위해 통과하는 클록 주기 수를 계산하는 카운터를 구현할 수 있습니다. 이 카운터가 클럭 주파수 값(예:1억)에 도달하면 1초가 지났고 다른 카운터를 증가시킬 시간이라는 것을 알 수 있습니다. 이것을 초 카운터라고 부르겠습니다.
분을 계산하기 위해 60초가 지나면 증가하는 다른 분 카운터를 구현할 수 있습니다. 마찬가지로 60분이 지나면 증가하는 시간을 계산하기 위한 시간 카운터를 만들 수 있습니다.
우리는 일, 주, 월을 계산할 때도 이 접근 방식을 계속할 수 있습니다. 기본 기술에서 사용 가능한 물리적 리소스와 카운터 길이 대 클록 주파수에 의해 제한을 받습니다.
카운터의 길이가 증가함에 따라 분명히 더 많은 리소스를 소비합니다. 그러나 일련의 이벤트가 길어지기 때문에 반응 속도도 느려집니다.
이 비디오 자습서에서는 VHDL에서 타이머 모듈을 만드는 방법을 배웁니다.
타이머 testbench의 최종 코드 :
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T18_TimerTb is end entity; architecture sim of T18_TimerTb is -- We're slowing down the clock to speed up simulation time constant ClockFrequencyHz : integer := 10; -- 10 Hz constant ClockPeriod : time := 1000 ms / ClockFrequencyHz; signal Clk : std_logic := '1'; signal nRst : std_logic := '0'; signal Seconds : integer; signal Minutes : integer; signal Hours : integer; begin -- The Device Under Test (DUT) i_Timer : entity work.T18_Timer(rtl) generic map(ClockFrequencyHz => ClockFrequencyHz) port map ( Clk => Clk, nRst => nRst, Seconds => Seconds, Minutes => Minutes, Hours => Hours); -- Process for generating the clock Clk <= not Clk after ClockPeriod / 2; -- Testbench sequence process is begin wait until rising_edge(Clk); wait until rising_edge(Clk); -- Take the DUT out of reset nRst <= '1'; wait; end process; end architecture;
타이머 모듈의 최종 코드 :
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T18_Timer is generic(ClockFrequencyHz : integer); port( Clk : in std_logic; nRst : in std_logic; -- Negative reset Seconds : inout integer; Minutes : inout integer; Hours : inout integer); end entity; architecture rtl of T18_Timer is -- Signal for counting clock periods signal Ticks : integer; begin process(Clk) is begin if rising_edge(Clk) then -- If the negative reset signal is active if nRst = '0' then Ticks <= 0; Seconds <= 0; Minutes <= 0; Hours <= 0; else -- True once every second if Ticks = ClockFrequencyHz - 1 then Ticks <= 0; -- True once every minute if Seconds = 59 then Seconds <= 0; -- True once every hour if Minutes = 59 then Minutes <= 0; -- True once a day if Hours = 23 then Hours <= 0; else Hours <= Hours + 1; end if; else Minutes <= Minutes + 1; end if; else Seconds <= Seconds + 1; end if; else Ticks <= Ticks + 1; end if; end if; end if; end process; end architecture;
Seconds
에서 확대된 파형 신호:
Minutes
에서 확대된 파형 신호:
Hours
에서 확대된 파형 신호:
50시간 시뮬레이션을 실행하기 위해 run 50 hr
명령을 주었습니다. ModelSim 콘솔에서. 50시간은 정말 긴 시뮬레이션이므로 테스트벤치의 클럭 주파수를 10Hz로 낮춰야 했습니다. 100MHz로 두었다면 시뮬레이션에 며칠이 걸렸을 것입니다. 이러한 조정은 디자인을 시뮬레이션할 수 있도록 하기 위해 때때로 필요합니다.
파형에서 타임라인을 마우스 오른쪽 버튼으로 클릭하고 "Grid, Timeline &Cursor Control"을 선택했습니다. 시간 단위를 ns에서 초, 분, 시로 변경하면 실제로 타이머가 실시간으로 작동하는 것을 확인할 수 있었습니다.
타이머 시간은 시뮬레이션 시작 시 모듈이 재설정되기 때문에 시뮬레이션 시간에서 약간 오프셋됩니다. 타임라인의 60초 표시가 초 신호가 0으로 랩핑되기 약간 전인 첫 번째 파형에서 볼 수 있습니다.
시뮬레이션에서 카운터 값은 클록의 상승 에지에서 0 시간으로 업데이트됩니다. 실제 세계에서 카운터 값은 카운터의 첫 번째 비트에서 마지막 비트로 전파되는 데 약간의 시간이 필요합니다. 카운터의 길이를 늘리면 클럭 기간의 가용 시간이 소모됩니다.
모든 계단식 카운터의 누적 길이가 너무 길어지면 컴파일 후 장소 및 경로 단계에서 오류가 발생합니다. 전체 클록 주기를 소비하기 전에 얼마나 오래 카운터를 구현할 수 있는지는 FPGA 또는 ASIC 아키텍처와 클록 속도에 따라 다릅니다.
클럭 속도가 증가하면 카운터 체인이 더 길어집니다. 또한 클록 주기 시간이 짧아져 카운터 체인을 완료하는 데 걸리는 시간이 훨씬 줄어듭니다.
다음 튜토리얼로 이동 »
VHDL
새로운 프로그래밍 언어를 배울 때 저는 항상 인쇄하는 방법을 배우는 것으로 시작하는 것을 좋아합니다. Hello World! 출력을 마스터하면 환경이 작동하고 있음을 알 수 있습니다. 또한 언어의 기본 골격, 출력을 생성하는 데 필요한 최소한의 코드도 보여줍니다. 라고 생각할 수도 있지만 VHDL은 하드웨어 설명 언어인데 어떻게 텍스트를 출력할 수 있습니까? FPGA에 연결된 화면이 필요하고 그 사이에 모든 종류의 로직이 필요하며 이는 전혀 간단하지 않습니다. 이 모든 것이 사실이지만 FPGA와 ASIC은 잠시 잊고 VHDL 언어
3D 프린팅에는 항상 사용자에 따라 달라지는 일련의 요소가 있습니다. , 인쇄가 만족스럽거나 실패하는 경우가 많습니다. 각 사용자가 각 3D 프린트에서 사용하는 프린트 프로필에 모든 요소가 수집됩니다. 3D FDM 인쇄 프로필에서 무한한 수의 매개변수를 수정할 수 있습니다. :프린팅 온도 및 속도, 내부 및 외부 부품 제조 방법 및 3D 프린팅에 영향을 미치는 나머지 모든 매개변수. 이러한 이유로 가장 중요한 정보는 인쇄 프로필을 만들 때 아래에서 설명합니다. 고려할 측면 인쇄 매개변수를 수정하기 전에 직접적으로 영향을 미치