VHDL
이전 튜토리얼에서 우리는 프로세스에서 변수를 선언하는 방법을 배웠습니다. 변수는 프로세스 내에서 알고리즘을 만드는 데 유용하지만 외부 세계에서는 액세스할 수 없습니다. 변수의 범위가 단일 프로세스에만 있는 경우 다른 논리와 어떻게 상호 작용할 수 있습니까? 이에 대한 해결책은 신호입니다. .
신호는 architecture <architecture_name> of <entity_name> is
사이에 선언됩니다. 줄 및 begin
VHDL 파일의 명령문. 이것을 아키텍처의 선언적 부분이라고 합니다.
이 블로그 게시물은 기본 VHDL 자습서 시리즈의 일부입니다.
신호를 선언하는 구문은 다음과 같습니다.signal <name> : <type>;
신호는 선택적으로 초기 값으로 선언될 수 있습니다.signal <name> : <type> := <initial_value>;
이 비디오 자습서에서는 신호를 선언하는 방법을 배웁니다. 우리는 또한 변수와 신호의 주요 차이점을 배울 것입니다:
이 튜토리얼에서 만든 최종 코드:
entity T06_SignalTb is end entity; architecture sim of T06_SignalTb is signal MySignal : integer := 0; begin process is variable MyVariable : integer := 0; begin report "*** Process begin ***"; MyVariable := MyVariable + 1; MySignal <= MySignal + 1; report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal); MyVariable := MyVariable + 1; MySignal <= MySignal + 1; report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal); wait for 10 ns; report "MyVariable=" & integer'image(MyVariable) & ", MySignal=" & integer'image(MySignal); end process; end architecture;
ModelSim에서 실행 버튼을 눌렀을 때 시뮬레이터 콘솔에 대한 출력:
VSIM 2> run # ** Note: *** Process begin *** # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=1, MySignal=0 # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=2, MySignal=0 # Time: 0 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=2, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: *** Process begin *** # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=3, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=4, MySignal=1 # Time: 10 ns Iteration: 0 Instance: /t06_signaltb # ** Note: MyVariable=4, MySignal=2 # Time: 20 ns Iteration: 0 Instance: /t06_signaltb ...
우리는 초기 값이 0인 신호와 변수를 생성했습니다. 이 과정에서 우리는 그것들을 똑같은 방식으로 처리했지만, 출력물은 그것들이 다르게 행동했음을 보여줍니다. 먼저 우리는 변수와 신호에 대한 할당이 VHDL에서 다른 표기법을 가지고 있음을 보았습니다. 변수 할당은 :=
을 사용합니다. 신호 할당이 <=
를 사용하는 동안 연산자 연산자.
MyVariable
변수가 동작할 것으로 예상하는 대로 동작합니다. 루프의 첫 번째 반복에서는 1로 증가된 다음 2로 증가합니다. 첫 번째 반복에서 마지막 출력은 예상대로 값이 여전히 2임을 보여줍니다.
MySignal
약간 다르게 행동합니다. 첫 번째 +1 증가는 효과가 없는 것 같습니다. 출력은 그 값이 여전히 초기 값인 0임을 나타냅니다. 두 번째 +1 증가 후에도 마찬가지입니다. 이제 MyVariable
값 2이지만 MySignal
의 값 여전히 0입니다. wait for 10 ns;
이후 세 번째 출력은 MySignal
의 값을 보여줍니다. 이제 1입니다. 후속 인쇄물도 이 패턴을 따릅니다.
이 마법은 무엇입니까? 내가 단서를 줄게, wait for 10 ns;
그것과 관련이 있습니다. 신호는 프로세스가 일시 중지된 경우에만 업데이트됩니다. 우리 프로세스는 wait for 10 ns;
에서 한 곳만 일시 중지합니다. . 따라서 신호 값은 이 라인에 도달할 때마다 변경됩니다. 10나노초는 임의의 값이며 0나노초도 가능합니다. 사용해 보세요!
또 다른 중요한 관찰은 신호가 wait
, 값은 한 번만 증가합니다. 이는 프로세스에서 신호에 할당할 때 마지막 할당이 "승리"하기 때문입니다. <=
연산자는 신호에 새 값만 예약하며 wait
이 될 때까지 변경되지 않습니다. . 따라서 MySignal
의 두 번째 증분에서 , 이전에 1이 추가됩니다. 값. 다시 증가하면 첫 번째 증가가 완전히 손실됩니다.
wait
없이 신호가 여러 번 할당된 경우 , 마지막 과제 "승리"다음 튜토리얼로 이동 »
VHDL
모든 조직에는 많은 장비가 있습니다. 사업을 효율적으로 운영하기 위해서는 유지보수가 매우 중요한 부분입니다. 그러나 조직에서 요구 사항에 따라 활용하는 유지 관리에는 여러 유형이 있습니다. 크게 두 가지로 분류할 수 있습니다. 사전 유지 관리 전략 적극적인 유지보수 전략 사전 유지 관리란 무엇입니까? 사전 예방적 유지 관리는 자산과 장비를 최상의 상태로 유지하는 것을 강조하는 유지 관리입니다. 이 유지 관리에서는 사전에 유지 관리를 제공하여 자산 오류를 방지합니다. 제조 부문의 Statista 데이터에 따르면 2020년
대들보와 보의 기능이 같기 때문에 거더를 보의 또 다른 단어라고 생각하는 사람들도 있습니다. 그러나 모든 엄지손가락은 손가락이지만 모든 손가락이 엄지손가락은 아닌 것처럼 모든 대들보가 대들보이지만 모든 대들보가 대들보인 것은 아닙니다. 거더는 다른 빔을 포함하여 큰 하중을 지지할 수 있는 능력을 가진 빔 유형입니다. 대들보에는 이해해야 할 몇 가지 중요한 차이점이 있습니다. 대들보와 빔의 기본 구분 빔은 하중을 전달하는 구조 프레임 시스템의 주요 부분입니다. 빔은 하중에 저항하고 재분배하기 위해 구부러집니다. 반면에 거더는 빔