VHDL
이전 튜토리얼에서 우리는 신호와 변수의 주요 차이점을 배웠습니다. 신호는 하나의 프로세스 내에서만 액세스할 수 있는 변수보다 범위가 더 넓다는 것을 배웠습니다. 그렇다면 여러 프로세스 간의 통신을 위해 신호를 어떻게 사용할 수 있습니까?
우리는 이미 wait;
사용법을 배웠습니다. 무한히 대기하고 wait for
특정 시간 동안 기다리기. VHDL에는 두 가지 유형의 대기 명령문이 더 있습니다.
이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다.
Wait On 문은 지정된 신호 중 하나가 변경될 때까지 프로세스를 일시 중지합니다.wait on <signal_name1>, <signal_name2> ...;
Wait When 문은 이벤트로 인해 조건이 true가 될 때까지 일시 중지됩니다.wait until <condition>;
실제로 Wait On, Wait When 및 Wait For는 다음과 같이 결합될 수 있습니다.wait on <signal_name1> until <condition> for <time_value>;
이 예는 10나노초 동안 또는 signal1
까지 일시중지됩니다. 변경 사항 및 signal2
signal3
과 같습니다. :wait on signal1 until signal2 = signal3 for 10 ns;
이 비디오 자습서에서는 VHDL에서 프로세스 간 통신을 위해 Wait On 및 Wait When 문을 사용하는 방법을 배웁니다.
이 튜토리얼에서 만든 최종 코드:
entity T07_WaitOnUntilTb is end entity; architecture sim of T07_WaitOnUntilTb is signal CountUp : integer := 0; signal CountDown : integer := 10; begin process is begin CountUp <= CountUp + 1; CountDown <= CountDown - 1; wait for 10 ns; end process; process is begin wait on CountUp, CountDown; report "CountUp=" & integer'image(CountUp) & " CountDown=" & integer'image(CountDown); end process; process is begin wait until CountUp = CountDown; report "Jackpot!"; end process; end architecture;
ModelSim에서 실행 버튼을 눌렀을 때 시뮬레이터 콘솔에 대한 출력:
VSIM 2> run # ** Note: CountUp=1 CountDown=9 # Time: 0 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=2 CountDown=8 # Time: 10 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=3 CountDown=7 # Time: 20 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=4 CountDown=6 # Time: 30 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=5 CountDown=5 # Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: Jackpot! # Time: 40 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=6 CountDown=4 # Time: 50 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=7 CountDown=3 # Time: 60 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=8 CountDown=2 # Time: 70 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=9 CountDown=1 # Time: 80 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=10 CountDown=0 # Time: 90 ns Iteration: 1 Instance: /t07_waitonuntiltb # ** Note: CountUp=11 CountDown=-1 # Time: 100 ns Iteration: 1 Instance: /t07_waitonuntiltb
첫 번째 프로세스는 CountUp
을 증가시킵니다. 카운터 및 CountDown
감소 카운터. 동시에 업데이트됩니다. 두 신호의 신호 할당은 프로세스에서 서로 다른 라인에 있지만 할당된 신호 값은 프로그램이 Wait 문에 도달할 때만 유효합니다. 프로세스는 시뮬레이션이 시작될 때 이 작업을 수행한 다음 10나노초마다 수행합니다.
두 번째 프로세스의 첫 번째 줄은 wait on CountUp, CountDown;
입니다. . 프로그램은 신호 중 하나 또는 둘 모두가 변경될 때까지 이 라인에서 기다립니다. 출력물에서 볼 수 있듯이 이것은 카운터가 처음으로 변경되는 0ns 시뮬레이션 시간에 발생하고 그 이후에는 변경될 때마다 발생합니다.
세 번째 프로세스의 첫 번째 줄은 wait until CountUp = CountDown;
입니다. . 프로그램은 첫 번째 프로세스와 마찬가지로 두 신호 중 하나가 변경될 때마다 깨어납니다. 그러나 표현식이 true
으로 평가되는 경우에만 계속됩니다. , 그렇지 않으면 다시 절전 모드로 전환됩니다. 출력물에서 볼 수 있듯이 "대성공!" 두 카운터가 동일한 값을 가질 때 40ns에서 한 번만 인쇄됩니다.
true
인 경우에만 계속됩니다. 다음 튜토리얼로 이동 »
VHDL
수많은 Arduino 프로젝트를 실행합니까? 그리고 엄청난 양의 중요한 정보와 로그 데이터를 저장해야 합니까? 해결책은 Arduino SD 카드를 사용하는 것입니다. 어떻게 작동합니까? 이 문서에서는 기기가 무엇인지, 연결하는 방법, 사용하는 방법 등 기기에 대해 알아야 할 모든 정보를 제공합니다. 계속 읽어서 알아야 할 모든 정보를 찾아보세요. Arduino에서 SD란 무엇입니까? 아두이노 SD 카드 이미지 출처:Pixlr SD 카드 또는 마이크로 SD 카드는 두 가지 주요 구성 요소가 있는 장치입니다. 그리고 이러한
전통적인 제조 기술은 균일한 단면의 기본 모양을 효과적으로 생성할 수 있지만 속이 빈 내부 또는 복잡한 형상으로 부품을 생성하는 것은 고유한 과제를 안고 있습니다. 그러나 희생적인 도구를 사용하면 설계자와 엔지니어가 모양이나 재료 무결성을 타협할 필요가 없습니다. 희생 툴링은 용해성 재료에 구조를 인쇄한 다음 복잡한 구조를 만드는 데 사용됩니다. 이 기술을 통해 설계자와 엔지니어는 다양한 재료로 부드러운 내부를 사용하여 모든 종류의 언더컷이 있는 복잡하거나 속이 빈 구조를 쉽게 만들 수 있습니다. 희생 툴링은 일반적으로 높은 정확