1158
.pdfПример:
.CLOCK 8meg
.CLOCK необязательная директива. Если значение не задано, то оно будет принято по умолчанию, в зависимости от МК. Так или иначе, это значение может быть изменено позже в окне панели управления (выбрано из имеющегося списка).
Использование директивы .CLOCK позволяет устанавливать любую частоту в допустимых пределах, иначе – флаг ошибки.
.MICRO-директива
Указывает VMLAB название микроконтроллера, использующегося в проекте.
Синтаксис:
.MICRO " < название МК> " [" < микроопции > "]
Примеры:
.MICRO "ST6225" "HWD"
.MICRO "Atmega8"
.MICRO "Atmega128" "BOOTRST=0"
Строка опций зависит от МК. В ST62 она используется для определения HW/SW сторожевого таймера. В AVR используется, чтобы определить конфигурационные биты fuse (далее по тексту фьюзы).
.MICRO обязательная директива.
.PLOT-директива
Указывает VMLAB названия (имена) узлов, которые должны быть зарегистрированы и отображены в окне осциллографа.
Синтаксис:
.PLOT V (< nodeName >) [V (<nodeName>) ...]
Пример:
.PLOT V (node_1) V (PA0) V (PB0)
.PLOT директива необязательная. Возможно многократное использование директивы .PLOT.
.POWER-директива
VMLAB имеет 3 узла напряжения: VDD, VSS и GND (или 0).
.POWER-директива устанавливает значения VDD и VSS относительно абсолютного нулевого узла GND.
GND указывает абсолютное нулевое напряжение .
VDD наиболее положительный узел напряжения питания или уровень 1 для логических элементов.
VSS наиболее отрицательный узел напряжения или уровень 0 для логических элементов.
Все логические элементы (включая вводы/выводы МК) используют VDD/VSS напряжения для своих логических уровней.
По умолчанию узлы VSS и GND совпадают, но не всегда. В схемах напряжения питания могут быть определены, как в примерах.
Синтаксис:
.POWER VDD = <значение VSS> = <значение>
Примеры: |
|
.POWER VDD=2.5 VSS =-2.5 |
; GND центрирован. |
.POWER VDD=5 VSS=0 |
; значение по умолчанию. |
.POWER VDD=0 VSS =-5 |
; напряжение питания отрицательно. |
.POWERдиректива необязательная, заданные по умолчанию значения приняты за VDD = 5 В и VSS = 0 В.
.RAMINIT-директива
Эта директива позволяет инициализировать оперативную память МК, т.е. установить заданные значения перед стартом моделирования. По умолчанию все позиции оперативной памяти инициализированы к ?? (неизвестное значение).
.RAMINIT инициализирует только позиции, которые ??. Например, если позиция записана вручную с $ 07 перед стартом моделирования, это значение останется, несмотря на значение, данное в .RAMINIT.
Синтаксис:
.RAMINIT < десятичное целое число от 0 до 255 >
Заметьте, что значение должно быть написано десятичным числом.
Пример:
.RAMINIT 15; установит позиции оперативной памяти в $0F Используйте эту директиву с осторожностью: это инструмент, который
помогает разработчику в некоторых случаях, но не отражает реальное состояние памяти в МК. Оперативная память обычно не инициализирована при сбросе, это дело программиста выполнить инициализацию оперативной памяти.
.STORE-директива
Устанавливает время хранения для окна осциллографа (одновременно для хранения сигналов и трассировки МК).
Синтаксис:
.STORE <значение>
Пример:
.STORE 200m ; 200 миллисекунд время хранение.
.STORE директива необязательная. Значения по умолчанию принимаются в зависимости от компьютерной памяти. Оценки вне указанного в табл. 3 диапазона усекаются к максимуму/минимуму.
Диапазоны времени хранения |
Таблица 3 |
||
|
|||
Доступная оперативная память m |
Минимум |
Значение по умолчанию |
Максимум |
m < 60 Мб |
50мс |
250мс |
500мс |
60 < m < 100 Мб |
50мс |
500мс |
1000мс |
m> 100 Мб |
50мс |
500мс |
2000мс |
.TAB-директива
Позволяет определять остановы табуляторов для данного проекта. Эта директива нужна для того, чтобы автоматически располагать исходный текст согласно установленному виду/стилю. Например, 3 для кода Cи или 8 для кода Ассемблера.
Синтаксис:
.TAB < целое число от 1 до 16 >
Пример:
.TAB 6
Заданный по умолчанию интервал позиции табуляции – 3.
.TARGET-директива
Определяет имя конечного HEX-файла, который будет произведен процессом компиляции.
Синтаксис:
.TARGET <имя файла>
Эта директива обязательна только при использовании GENERIC или GCC набора файлов. При использовании ASM-набора директивы TARGET не нужно, первое .ASM имя файла в директиве .PROGRAM будет использоваться как имя конечного файла с расширением HEX.
.TOOLCHAIN-директива
Определяет цепочку файлов, которую нужно использовать, чтобы построить исполняемый файл. Возможны три значения:
"ASM": Стандартный код трансляции изготовителя МК (значение по умолчанию).
"GCC": GNU C Compiler - GNU Cи компилятор.
"GENERIC ": Спецификация файлов сторонних производителей.
Синтаксис:
.TOOLCHAIN {< "ASM" >, < "GCC" >, < " GENERIC " >}
Пример:
.TOOLCHAIN "GCC"
Эта директива необязательная.
.TRACE-директива
Указывает, что должна быть прослежена история выполнения команд микроконтроллера. Трассировка будет показан в окне осциллографа.
Синтаксис:
.TRACE
.TRACE директива необязательная. Если она не указана, трассировка не будет записываться.
.SOURCE-директива
Определяет список файлов, который будет загружен в окне Code Notebook (записной книжки кода). Эта директива допустима только с GCC и GENERIC наборами файлов. Не используйте её вместе с директивой
.PROGRAM.
Принимая во внимание, что директива .PROGRAM используется, чтобы сообщить VMLAB, какие кодовые модули (исходник и т.д.) будут использоваться, чтобы построить целевой HEX-файл, директива .SOURCE указывает VMLAB, только какой файл нужно загрузить в окно записной книжки кода.
Синтаксис:
.SOURCE <имя файла> [< имя файла > ...]
Пример:
.SOURCE "file1.c" "file2.c" "file3.c"
Совет:
Когда вы загружаете много файлов, используйте символ продолжения линии (+), чтобы сделать более читаемым ваш файл.
Пример:
.SOURCE "file1.c" "file2.c" "file3.c"
+"File4.c" "file5.c" "file6.c"
+"File7.c"
.STATS-директива
Допускает запись данных при выполнении команды View | Execution Stats. Она должна использоваться в комбинации с директивой .TRACE.
Синтаксис:
.STATS
Предостережение:
Директива STATS делает запись данных, начиная с начала моделирования. Поскольку запись может быть очень длинной, используйте эту директиву с осторожностью!
.PROGRAM-директива
Определяет спецификацию файлов, которая будет использована для создания целевого программного обеспечения, загружаемого в МК.
Для создания исходных файлов обычно используется ASM (стандартный Ассемблер изготовителя) набор файлов. Он собирается + связывается (компонуется) VMLABом, чтобы построить .HEX-файл, который в конечном счете нужно использовать для программирования ROM/EPROM МК. Все файлы, определенные здесь, будут загружены в окно записной книжки кода.
Синтаксис:
.PROGRAM " <modName> " [: " < опции связи (линковщика) > "] [" < modName > " [: " < опции связи > "]]
Примеры:
.PROGRAM "example.asm"
.PROGRAM "example.hex"
.PROGRAM "example1.asm" "example2.asm" "example3.obj"
.PROGRAM "exampe1.asm": "-P2:80-07FF" "example2.asm"
Если .TARGET-директива опущена, имя первого модуля определяет имя загружаемого конечного файла (с расширением .HEX). Первые и вторые примеры произведут загружаемый код с именем Example.hex.
Опции связи, если таковые вообще имеются, используются программой Linker, когда в программе больше чем 1 модуль, чтобы перераспределить адреса разделов. Должен использоваться синтаксис, определенный в руководстве компоновщика (Linker).
HEX-файл может быть помещен непосредственно в директиве
.PROGRAM. Используйте это, когда имеете только этот файл и нет никакого дополнительного источника или информации отладки. В таком наборе вы сможете моделировать, но никакие переменные и т.д. не сможете наблюдать.
При большом количестве файлов нужно использовать символ продолжения строки (+), чтобы сделать более читаемым ваш файл.
Пример:
.PROGRAM "file1.asm" "file2.asm" "file3.asm"
+"File4.asm" "file5.asm" "file6.asm"
+"File7.asm"
.GCCPATH-директива
Определяет путь инсталляции GCC. Эта директива допустима, если определен GCC-набор файлов.
Синтаксис:
.GCCPATH <имя пути>
Пример:
.GCCPATH " C:\WINAVR \ "
Если путь для GCC-набора не задан, VMLAB примет C:\AVRGCC\ как инсталляционный путь для GCC.
.GCCMAKE-директива
Определяет файл, который будет использован утилитой GCC make или если выбран автоматический режим. Если выбран автоматический режим, GCC-компилятор устанавливает флажки/опции, используя команду
Project | GCC makefile flags.
Синтаксис:
.GCCMAKE {< имя файла >, AUTO }
Пример: |
|
.GCCMAKE "myMake.mak" |
; makefile пользователя |
.GCCMAKE AUTO |
; автоматически обработанный makefile |
.BAT-директива
Определяет MS-DOS пакетный файл (расширение BAT) для того, чтобы при выполнении формировать необходимые HEX- и COFF-файлы. Эта директива имеет силу только с GENERIC-наборами файлов.
Синтаксис:
.BAT <имя файла>
Эта директива необязательна. Если она не найдена, VMLAB предположит, что HEX- и COFF-файлы уже были сформированы и необходима только их загрузка.
.COFF-директива
Определяет COFF-файл (Common Object Format File), где можно найти символическую информацию для отладки. Эта директива должна использоваться только с опциями GENERIC-наборов файлов.
VMLAB может читать классический COFF-файл и AVR-расширенный COFF-файл (с поддержкой структур/объединений), совместимый с AVR Studio 4.x.
Если вы используете .COFF и директива SOURCE опущена, VMLAB загрузит автоматически исходные файлы, указанные внутри COFF-файла.
Синтаксис:
.COFF <имя файла>
Пример:
.COFF "myFile.cof"
Совет:
При работе только с отладчиком VMLAB можно опустить .SOURCE. Но в некоторых случаях использование .SORUCE является полезным, например, если вы хотите предотвратить загрузку стабильной и хорошо отлаженной части кода, просто используйте директиву .SOURCE, исключив упомянутый код из списка.
Директива .SOURCE является обязательной при использовании .COFFфайлов при применении VMLAB не только как отладчика, но и для
запуска компиляторов сторонних производителей при помощи командных файлов (.BAT).
4. БИБЛИОТЕКА АППАРАТНЫХ КОМПОНЕНТОВ
Доступные компоненты:
резистор;
конденсатор, соединенный с «землёй»;
диалоговый выключатель/ключ;
светодиод (LED);
аналоговые генераторы напряжения;
импульсный источник напряжения;
источник синусоидального напряжения;
источник напряжения, управляемый пользователем;
цифровые генераторы;
генератор «ступеньки» (Non-return-to-zero (NRZ) генератор);
макромодели;
операционный усилитель;
компаратор;
2-входовые И-НЕ;
8-битный цифро-аналоговый преобразователь;
интерфейс RS232, основанный на TTY;
LCD-модуль;
I2C-монитор (диалоговый);
диалоговая вспомогательная клавиатура 4x4.
Резистор
Синтаксис:
R [< instName >] <nodeName> <nodeName> <значение>
Примеры:
R load node1 node2 10К R node_a VSS 100
Не допускается нулевое значение сопротивления. Для короткого замыкания используйте маленькое сопротивление (1 Ом, например).
VDD, VSS и GND – имеющиеся без определения узлы напряжения.
Заземляющий конденсатор
Синтаксис:
C [< instName >] <nodeName> <PowerNodeName> <значение>
Примеры:
C1 node1 VSS 10n ; 10 нанофарад на «землю»
C node_a VSS 1u ; 1 микрофарад на «землю»
Конденсаторы между двумя произвольными узлами не допускаются. Второй узел должен быть всегда VSS.
VDD, VSS и GND зарезервированные узлы напряжения.
Выключатель / клавиша (ключ)
Диалоговый выключатель, управляемый одной из 16-ти кнопок панели управления.
Синтаксис:
K{0 9, A F} <nodeName1> <nodeName2> [{NORMAL, LATCHED, MONOSTABLE(<timeValue>)}]
Последнее ключевое слово управляет начальным положением ключа: NORMAL – нормально замкнут, ключ закрыт (замкнут), пока вы не
нажмете кнопку (значение по умолчанию).
LATCHED замыкаемый, ключ переключает из открытого в замкнутое состояние при нажатии.
MONOSTABLE многоустойчивый (значение времени), закрытый в
течение указанного времени. |
|
Примеры: |
|
K1 node1 VSS LATCHED |
; Button 1 |
KA node_a node_b |
; Button A |
K3 myNode GND monostable(10m) ; Button 3
Вы можете определять матрицу 4x4 вспомогательной клавиатуры, задав 16 действий, однако это выполняется автоматически (см. ниже).
Светодиод (LED)
Это визуальный компонент. В окне панели управления доступно 8 виртуальных светодиодов. Светодиоды смоделированы как резистор с малым сопротивлением (1 Ом). Светодиод включен, когда ток через него более 1 мA. Аноды диодов всегда соединяются с VDD.
Синтаксис:
D {1 8} VDD <nodeName>
Примеры:
D1 VDD node1 ; "D1" LED в окне панели управления. Подобно тому, как происходит в реальной жизни, светодиоды при
моделировании не реагируют на очень быстрые сигналы переключения.
Совет:
Светодиод может быть соединен непосредственно с портом ввода/вывода МК, но в этом случае вы не будете видеть на нем падения напряжения с помощью виртуального осциллографа Scope. Чтобы видеть падение напряжения на выводе МК, вы должны соединить светодиод с узлом VDD через резистор примерно 500 Ом.
Импульсный генератор напряжения
Синтаксис:
V[<instName>] <nodeName> <powerNode> PULSE(<vInitial> <vFinal> <tDelay> <tRise> <tFall> <tWidth> <tPeriod>)
Примеры:
V PA0 VSS pulse(0 5 40u 0 0 50u 100u)
Vpulse node1 vss pulse (2.5 3.5 0 1u 1u 1.5m 2.5m)
Второй узел должен быть всегда VDD, VSS, GND (или 0).
Генератор напряжения, управляемый пользователем Для управления напряжением используется движок переменного
резистора в панели управления, который пользователь может перемещать во время выполнения моделирования при помощи указателя мышки.
Синтаксис:
V[<instName>]<nodeName><powerNode>SLIDER_<sliderNumber> (<vLow> <vHigh>)
Примеры:
Vth minus vss SLIDER_1(0 5) ; 0 to 5 volts (Slider #1)
V v_node vss SLIDER_3(1.5 2.5) ; 1.5 0 to 2.5 volts (Slider #3)
Вторым узлом должен быть всегда узел напряжения питания. <sliderNumber> может быть 1, 2, 3, соответствуя трем движкам панели
управления.
Несколько источников напряжения могут одновременно управляться одним и тем же движком.
Операционный усилитель (OPAMP)
Синтаксис:
X [< instName >] OPAMP <nodePlus> <nodeMinus> <nodeOut>
Примеры:
Xop OPAMP node_a node_b node_c
Макромодель OPAMP весьма проста и оптимизирована для системного моделирования. Такие характеристики, как ограниченная полоса частот, убывание коэффициента передачи и т.п., не сымитированы. Выход OPAMP ограничен напряжениями VDD и VSS.
Диалоговый NRZ цифровой генератор
Этот компонент производит цифровой сигнал «ступенька» (NRZ – Non Return to Zero), в указанном узле. Уровни напряжения – VDD, VSS и (VDD+VSS)/2 для идентификаторов сигналов 1, 0 и X.
Сигналы активизированы, когда в окне Control panel нажата кнопка KEY_x и в начале моделирования, если используется ключевое слово СБРОС. Это позволяет определять максимум 16 сигналов,
активизированных клавишами, плюс дополнительная инициализация NRZ сигналов из файлов проекта.
Синтаксис:
P[<instName>] NRZ(<timeBit>) <nodeName> KEY_<keyNumber>
"<pattern>" |
|
[+ |
KEY_<keyNumber> "<pattern>"] |
[+ |
RESET "<pattern>" |
[+ ....]
<keyNumber> должен быть номер от 0 до 9, от А до F.
" < pattern > " должна быть или последовательность значений 0, 1 и X (максимальная длина 255), или строка с формой "file:<fileName >" для сигналов, определенных во внешних файлах.
<timeBit> интервал времени каждого цифрового элемента 0, 1 или X. Если не было СБРОСа, сигнал будет инициализирован как X.
Примеры:
P1 NRZ(20u) pb0 KEY_1 "01000110xx0000100111"
P2 NRZ(40u) myNode KEY_1 "01000110xx000"
+KEY_2 "11100011100011100011111"
+KEY_A "10100001xxxx11110100"
+RESET "101"
;Example of a 4 bits wide generator, activated by KEY_1 P0 NRZ(20u) bit_0 KEY_1 "01000110xx0000100111" P1 NRZ(20u) bit_1 KEY_1 "00000000111000000000" P2 NRZ(20u) bit_2 KEY_1 "11111111111110001111"
P3 NRZ(20u) bit_3 KEY_1 "XXXXXXXXXXXXX0000000"
;Пример образца, загруженного от файла
P0 NRZ (20u) bit_0 KEY_1 "file:myPattern.txt"
Определение сигналов во внешних файлах
Используйте любой текстовый файл с расширением, которое вы предпочитаете: TXT, DAT и т.д. Этот файл должен быть расположен в вашем рабочем каталоге с остальной частью: .PRJ-файлом и файлом исходного кода. Правила написания такого файла показываются в следующем примере:
Пример содержания для упомянутого выше файла myPattern.txt:
100100 10 X 00 00 1111 |
; 0, 1 и X используются как двоичные значения. |
10000 11111 |
; Точка с запятой отделяет комментарий. |
1 1 1 1 111 111100 |
; Пробелы и CR игнорируются. |
... |
; Неограниченная длина, но |
100 11 11 11 |
; будьте осторожны: если |
10111 001001 111 1 |
; файл огромен, VMLAB будет брать много |
100 10011 11 |
; ресурсов памяти. |