산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> VHDL

Tcl을 사용한 대화형 테스트벤치

대화형 테스트벤치는 테스트벤치가 실행되는 동안 작업자가 테스트 대상 장치(DUT)에 대한 입력을 제공하는 시뮬레이터 설정입니다. 대부분의 경우 이는 시뮬레이터 콘솔에 명령을 입력하여 DUT에 자극을 제공하는 것을 의미합니다.

항상 자체 검사 테스트벤치를 만들어야 하지만 대화형 테스트벤치는 훌륭한 보완책이 될 수 있습니다. 자체 검사 테스트벤치의 코드를 변경하는 것보다 대화형 테스트벤치로 임시 테스트를 수행하는 것이 더 쉽습니다.

종종 실험실에서 테스트벤치에서 시험해보고 싶은 문제를 발견하게 될 것입니다. 대화형 테스트벤치를 사용하면 시뮬레이터에서 바람직하지 않은 동작을 복제하는 것으로 관찰된 입력 시퀀스를 입력하는 것만큼 쉬울 수 있습니다.

VHDL과 상호작용하는 Tcl

대부분의 VHDL 시뮬레이터는 Tcl을 콘솔 언어로 사용합니다. 시뮬레이터에는 공급업체별 명령이 많이 있지만 좋은 소식은 다른 Tcl 명령으로 처리할 수 있다는 것입니다. Tcl을 사용하여 VHDL 테스트벤치를 관리하고 지원하기 위한 복잡하고 대부분 이식 가능한 스크립트를 만들 수 있습니다.

Tcl에서 VHDL 신호 변경

VHDL과 상호 작용하려면 신호 값을 변경하는 명령을 찾아야 합니다. ModelSim에서 이것은 "force" 명령입니다. 명령 참조 문서에 지정된 대로 명령의 개요는 다음과 같습니다.

force {<object_name> <value> [[@]<time_info>][, <value> [@]<time_info>]...
[-deposit | -drive | -freeze] [-cancel [@]<time_info>] [-repeat [@]<time_info>]

사용하려는 스위치는 "-deposit" 플래그입니다. 이렇게 하면 VHDL 신호의 값이 즉시 변경되지만 나중에 다른 VHDL 또는 Tcl 드라이버가 이를 다른 것으로 변경할 수 있습니다.

사용하지 않는 옵션을 무시하면 간략한 개요는 다음과 같습니다.

force -deposit <signal_name> <value>

VHDL 트리거

이제 Tcl에서 VHDL 신호를 제어하는 ​​방법을 알았으므로 VHDL 테스트벤치에서 일종의 수신기 프로세스를 생성해야 합니다. 아래 코드는 그러한 테스트벤치의 최소한의 예를 보여줍니다.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity interactive is
end interactive; 

architecture sim of interactive is

  -- Controlled by Tcl
  signal trigger : std_logic := '0';

begin

  process is
  begin

    wait until trigger = '1';
    report "Triggered!";

  end process;

end architecture;

trigger 때 프로세스가 깨어납니다. 신호가 무언가에서 '1'로 변경됨 . "Triggered!"가 인쇄됩니다. 이런 일이 발생하면 콘솔로 전송하여 Tcl에서 VHDL 프로세스를 제어하는 ​​개념을 테스트할 수 있습니다.

ModelSim 콘솔이 바로 그것입니다. 실행된 명령과 출력은 아래 스크립트에서 볼 수 있습니다.

VSIM 1> run 10 ns;
VSIM 2> force -deposit /trigger '1'
VSIM 3> run 0 ns;
# ** Note: Triggered!
#    Time: 10 ns  Iteration: 0  Instance: /interactive
VSIM 4> force -deposit /trigger '0'
VSIM 5> run 10 ns;

시뮬레이션을 시작한 후 10나노초 동안 테스트벤치를 실행했습니다.

그런 다음 강제로 trigger '1'에 신호 . 다음 줄에서 0 나노초를 기다립니다. 이것의 목적은 델타 사이클을 생성하는 것입니다. 프로세스가 트리거되기를 원하지만 시뮬레이션 시간이 경과하는 것을 원하지 않습니다.

마지막으로 trigger '0'로 다시 신호 테스트벤치를 계속하기 전에

VHDL 프로세스가 "run 0ns" 라인 이후에 깨어나서 "Triggered!"를 출력한 것을 볼 수 있습니다. 콘솔에.

tcl에서 VHDL 신호 값 읽기

ModelSim에서 신호 값을 읽으려면 '검사' 명령어를 사용할 수 있습니다. 예를 들어 trigger 값을 읽을 수 있습니다. ModelSim 콘솔에서 다음 명령을 사용하여 신호:

VSIM 6> examine /trigger
# 0

스크립트에서 "examine"을 사용할 때 값을 Tcl 변수에 할당하고 싶을 것입니다. ModelSim 콘솔에서 이것을 시도해보자:

VSIM 7> set triggerVal [examine /trigger]
# 0

그런 다음 예를 들어 "puts" Tcl 명령을 사용하여 변수를 인쇄할 수 있습니다.

VSIM 8> puts "triggerVal: $triggerVal"
# triggerVal: 0

각 테스트 후 시뮬레이터 중지

DUT가 반응할 만큼 충분히 오랫동안 테스트를 실행하는 가장 쉬운 방법은 단순히 고정 시간 값에 대해 시뮬레이터를 실행하는 것입니다. 예를 들어 DUT가 2개의 클럭 주기 후에 반응해야 하고 클럭 주기가 10나노초인 경우 Tcl 스크립트에서 "run 20ns" 명령을 사용합니다.

DUT에 고정된 반응 시간이 없으면 시뮬레이션을 중지하고 Tcl 콜백 함수에 제어를 넘기는 데 VHDL 주장을 사용할 수 있습니다. ModelSim에서 이것은 "때" 명령을 사용하여 Tcl 스크립트에서 중단점을 설정하는 것을 의미합니다.

when [[-fast] [-id <id#>] [-label <label>] {<when_condition_expression>} {<command>}]

또한 중단점에 도달했을 때 실행될 "onBreak" 콜백 함수를 Tcl에 정의해야 합니다. "onBreak" 기능은 ModelSim 명령 참조에 지정되어 있습니다.

Tcl 기반 테스트의 단점

Tcl 스크립트에 크게 의존하는 테스트벤치를 사용하는 데에는 단점이 있습니다. 가장 분명한 것은 속도와 휴대성 문제입니다.

Tcl 기반 테스트벤치는 VHDL 코드와 상호 작용하기 위해 시뮬레이터를 여러 번 시작 및 중지하여 작동합니다. 그 사이에 Tcl 기능을 실행하기 위해 시뮬레이션을 시작하고 중지하는 것은 VHDL 테스트벤치를 연속적으로 실행하는 것보다 더 많은 시간이 소요됩니다. Tcl은 인터프리터 언어이지만 VHDL은 시뮬레이터에서 컴파일되며 Tcl보다 훨씬 빠르게 실행됩니다.

Tcl은 다른 시뮬레이터에 이식할 수 있지만 사용해야 하는 시뮬레이터 특정 명령은 그렇지 않습니다. 다른 시뮬레이터에서 동일한 명령을 찾아도 다르게 작동할 수 있습니다. 시뮬레이터 공급업체는 지원하는 명령에 대해 고유한 규칙 집합을 구성합니다. 따라서 Tcl 구동 테스트벤치는 순수 VHDL 테스트벤치보다 이식성이 떨어지는 것으로 간주되어야 합니다.

새로운 VHDL 및 FPGA 과정

* 테스트벤치에 대해 광범위하게 다룰 새로운 VHDL 및 FPGA 과정을 만들고 있습니다. FPGA 디자인을 처음부터 만드는 방법을 배우게 됩니다. 과정을 마치면 자체 검사 테스트벤치를 만드는 방법과 코드를 재사용하여 대화형 테스트벤치를 만드는 방법을 알게 됩니다.

* 2020년 10월 12일 업데이트됨: 나는 과정을 완료했다. 자세히 알아보려면 아래 이미지를 클릭하세요.

우리가 만들 제품은 도트 매트릭스 LED 컨트롤러 모듈입니다. 우리는 $49 Lattice iCEstick 개발 보드를 사용할 것입니다. 결국 우리는 브레드보드에 디자인을 구현할 것입니다. 컴퓨터의 키보드로 입력할 수 있으며 FPGA가 제어하는 ​​도트 매트릭스 LED 화면에 문자가 표시됩니다.

Dot Matrix VHDL 및 FPGA 과정에 대한 자세한 내용은 여기를 참조하세요.

열기:

미정 .


VHDL

  1. 튜토리얼 - VHDL 소개
  2. VHDL 변환의 예
  3. 절차문 - VHDL 예
  4. 레코드 - VHDL 예
  5. VHDL에서 서명된 것과 서명되지 않은 것
  6. C# 사용
  7. VHDL에서 문자열 목록을 만드는 방법
  8. 자가 점검 테스트벤치를 만드는 방법
  9. 지그비 센서를 사용한 대화형 레이저 프로젝터
  10. 밀을 선반으로 사용