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 프린팅에 영향을 미치는 나머지 모든 매개변수. 이러한 이유로 가장 중요한 정보는 인쇄 프로필을 만들 때 아래에서 설명합니다. 고려할 측면 인쇄 매개변수를 수정하기 전에 직접적으로 영향을 미치