Visual Studio Code — написание и отладка прошивок для ARM Cortex-M

Давно хотел это опробовать, да руки не доходили. Наконец-то освободился и решил это освоить — превращение Visual Studio Code в IDE для написания и отладки прошивок под микроконтроллеры, и как первые ласточки опробованы Wi-Fi SoC RTL8195AM и Cortex-M4 STM32F407VGT6. Пример-описание в статье будет для STM32F407VGT6.

B83-0

Подготовка Visual Studio Code

Для примера используется Visual Studio Code v1.33.1, на старых версиях могут быть небольшие отличия в плане конфигурационных json файлов.

Читать далее

Altium Designer 19 — советы и фишки, упрощающие проектирование

Наконец-то я собрался написать по Альтиуму что-то по объёму более, чем заметка со ссылкой на видосик. :) Материал ниже — это сборник советов или просто фишек как нового 19-го Альтиума, так и прошлых версий. Думаю, это будет интересно как начинающему радиолюбителю, так и инженеру, уже давно работающему с Альтиумом.

Статья разбита по отдельным советам\фишкам, начинается с верхушки (проект и схемотехника) и далее переходит по следующим ступеням (печатная плата, сборка плат) сквозного проектирования.

B81-0

Начнём с самого простого и не всегда популярного почему-то (видел, что далеко не все этим пользуются или даже не знают об этих инструментах):

Читать далее

Visual Studio Code — создание портативной версии

Visual Studio Code — мощный и легковесный редактор кода с возможностью установки расширений и превращения его в реальную IDE для всех популярных языков программирования с отладкой приложений или прошивок.

B82-0

В этой заметке же вкратце будет описано создание портативной версии редактора для windows, которая будет содержать все настройки, расширения.

Для создания портативной версии необходимо скачать .zip версию, распаковать в любое место, зайти в корень распакованной папки и создать папку data (здесь будет храниться пользовательский профиль настроек и расширения):

Читать далее

Quartus Prime и проблемы генерации проекта с EMIF в Platform Designer

Небольшая заметка с проблемой генерации проекта, в котором есть EMIF в Platform Designer, решение которой я нашёл для своего случая.

b80-0

Возможно, это поможет людям, столкнувшимся с аналогичной проблемой. Также помимо описания решения проблемы в моём случае приведу все другие решения, которые так или иначе помогали другим людям, чтобы всё было в одной заметке для удобства.

Итак, о чём речь-то? А о том случае, если вы, к примеру, делаете проект на Cyclone V и в Platform Designer (QSYS по-старому) добавляете EMIF для любой памяти (DDR2 или DDR2LP или DDR3), а при генерации HDL (или просто примера использования EMIF) у вас вылезает вот такая пичалька:

Читать далее

Делаем Arduino Mega из того, что под рукой

Не, ну а почему бы и нет?! Возьмём АРМ, да не простой, а золотой, добавим отладчик и оформим всё в формате Arduino Mega. :) Импортозамещение!

B77-00

В статье опишу схемотехнику, разводку (хотя тут нечего толком и расписывать), покажу собранный вариант и пример прошивки на получившейся плате, и всё это — Open Source. Да, это те самые платы от SeeedStudio, что были замазаны в прошлом обзоре. Надеюсь, интрига стоила того, чтобы не выкладывать все карты сразу. :) 

Читать далее

Новые возможности Altium Designer 19

Небольшая заметка со ссылкой на вебинар о новых возможностях Altium Designer 19. Довольно интересно и много полезного.

B79-1

Темы вебинара:

  • Новый менеджер стека слоев
  • Улучшение трассировки
  • Поддержка микроотверстий
  • Управление подключением полигона к площадкам и отверстиям
  • Безграничное количество механических слоев
  • Улучшения в Draftsman
  • Улучшения в BOM
  • Новые панели Part search и Components
  • Улучшения в Multi-Board
  • Печатная электроника

Как по мне, вебинар будет интересен не только новичкам, но и давним пользователям Альтиума.

Читать далее

Отладочная плата для 5600ВВ3Т

Эта статья также из разряда описания старых плат, спроектированных в начале 2015-го года. В то время раздавали бесплатные образцы 5600ВВ3Т предприятиям (и даже на момент публикации статьи ещё раздают!), я сделал запрос образцов и на скорую руку спроектировал простую отладочную плату для проведения тестирования новинки. Опять же, т. к. устройство «для себя», то сдавать никакую документацию не требовалось, поэтому УГО компоненты и схема в целом не очень-то и по ГОСТу, это просто пример устройства с кратким описанием.

B7-14

В целом, здесь не будет каких-либо секретов запуска или особенностей проектирования (их и нет-то), просто открытый проект для изучения и применения как вам вздумается, без какой-либо ответственности с моей стороны.

Читать далее

Обзор на 2-слойные печатные платы из Seeed Studio

Предложили мне тут сделать обзор на печатные платы из Seeed Studio. Я не стал отказываться, правда, по времени предложение вышло очень неудачно — работы сейчас навалом и платы делал наспех, тратя не более 2-х вечеров на каждую… ну, для обзора и этого вполне будет достаточно. ;)

B76-0

Seeed Studio — это производитель электронных модулей (к примеру, линейка Grove), которые в большинстве своём предназначены для поклонников Arduino и одноплатных компьютеров. У них ещё бывают редкие железяки, которые не купить на али или в местных магазинах, а также они предоставляют услуги по изготовлению и сборке печатных плат. Отдельно хочу отметить, что они поощряют Open Source и даже можно замутить продажу своего проекта на их площадке!

Читать далее

HyperRAM — это что за память?

Под катом небольшой обзор особенностей этой памяти, отличия от других типов памяти и в конце небольшой список того, что же взяла (позаимствовала) эта память из других типов.

Заметка будет полезна начинающим и не имевшим дела с этой памятью, вкратце попробую описать её назначение с индивидуально формирующимся выводом для каждого разработчика в процессе чтения, стоит ли она применения в своём проекте или нет.

B75-0

Читать далее

Visual Studio Code и Icarus Verilog

В этой статье попробую вкратце показать, как можно настроить Visual Studio Code для написания HDL кода на языках Verilog, SystemVerilog, настроить задачи для компиляции и симуляции работы, а также отображения результатов симуляции в GTKWave.

Написание HDL кода в Visual Studio Code по сравнению с Intel Quartus Prime порядком удобней и можно просто использовать Visual Studio Code как продвинутый редактор кода (если вам не нужна компиляция и симуляция из Icarus Verilog).

B67-0

Установка Visual Studio Code

Скачиваем Visual Studio Code для вашей ОС, в моём случае я скачал версию для Windows x64, ZIP архив (версия 1.27.1). Распаковываем\устанавливаем и запускаем, нас встречает главное окно редактора (да, да, это не полноценная IDE, как Visual Studio, а именно легкий редактор кода с возможностью кастомизации расширениями практически до уровня IDE) со стартовой страницей:

B67-1

Произведём минимальные настройки для удобства. Открываем настройки Visual Studio Code:

B67-2

В строке поиска вводим «theme» и переключаем на более приятную тему для вас (в моём случае это «Default Light+«):

B67-3

Далее в строке поиска вводим «titleBarStyle» и переключаем параметр Title Bar Style на «custom«:

B67-4

Этот параметр изменит вид меню и интегрирует само меню в заголовок окна, что экономит место и визуально редактор становится приятнее, пример этого решения в конце абзаца.

И последнее, в строке поиска вводим «minimap» и, собственно, отключаем её отображение:

B67-5

Миникарта — это вот что:

B67-6

Справа сверху отображается представление файла в мини-превью, иногда это удобно, иногда это место лучше освободить от этого превью (к примеру, открываете вертикально 2-3 файла, и это превью уже ощутимо кушает место) — тут кому как удобнее. :)

Итак, перезапускаем редактор и видим следующие визуальные изменения:

B67-7

Установка расширений для Visual Studio Code

Далее, чтобы удобно (подсветка, автодополнение) работать с Verilog, SystemVerilog, TCL файлами, нам необходимо установить расширения, поддерживающие эти типы файлов.

Открываем панель расширений (Ctrl+Shift+X):

B67-8

И в строке поиска вводим «ext:v«, ставим расширение Verilog HDL:

B67-9

Далее в строке поиска вводим «ext:sv«, ставим расширение SystemVerilog:

B67-10

Последнее, в строке поиска вводим «ext:tsl«, ставим расширение TSL:

B67-11

Вот и всё. После перезапуска Visual Studio Code установленные расширения будут активны. Да, ставить именно указанные расширения не обязательно, возможно, расширения от других авторов будут более удобны или с более богатым функционалом — не бойтесь пробовать (и пишите в комментариях, какие расширения Вам больше понравились и чем).

Пример работы расширения:

B67-12

Установка Icarus Verilog

Теперь нужно установить компилятор\симулятор HDL кода — Icarus Verilog. Скачиваем установщик под Windows (для остальных платформ смотрим Installation Guide), я скачал последнюю версию iverilog-10.1.1-x64.

При установке в целом сложностей не возникает, главное — ставьте полную версию с библиотеками:

B67-13

И не убирайте галочки добавления путей к GTKWave и в PATH:

B67-14

Ярлычки в меню Пуск и на рабочий стол я не ставил. Перезагружаем ПК или просто разлогиниваемся и снова заходим под рабочим пользователем — этого должно хватить, чтобы подхватились изменения в системной переменной PATH.

Примечание: у меня установщик никаких правок в PATH не внёс и я не сразу понял, почему не работает. Пришлось вручную внести в пользовательский PATH следующие две строки (Icarus Verilog установлен в C:\Data\iverilog\):

B67-19

Настройка проекта под Visual Studio Code

В качестве проекта возьмём counter.v и counter_tb.v из прошлой статьи «Запускаем ModelSim с Quartus Prime и без«, чего будет более чем достаточно.

Приведу их ещё раз. counter.v :

`timescale 1ns/1ns

module counter (
input wire reset,
input wire clk,
input wire [7:0]wdata,
input wire wr,
output reg [7:0]data
);
always @ (posedge clk or posedge reset)
if (reset)
data <= 8'h00;
else
if(wr)
data <= wdata;
else
data <= data + 8'h01;

endmodule

counter_tb.v :

`timescale 1ns/1ns
`include "counter.v"
module counter_tb();

reg reset, clk, wr;
reg [7:0]wdata;
wire [7:0] data_cnt;

counter DUT(reset, clk, wdata, wr, data_cnt);

always
#10 clk = ~clk;

initial begin
clk = 0;
reset = 0;
wdata = 8'h00;
wr = 1'b0;

#10 reset = 1;
#5 reset = 0;
#50;

end

initial begin
#400 $stop;
end

initial
begin
$dumpfile("out.vcd");
$dumpvars(0,DUT);
end

initial
$monitor($stime,, reset,, clk,,, wdata,, wr,, data_cnt);

endmodule

Итак, открываем корневую папку проекта, в которой и находятся файлы counter.v и counter_tb.v:

B67-15

Редактор теперь показывает открытую папку TEST и файлы в ней:

B67-16

Далее необходимо создать задачи компиляции и симуляции проекта (точнее Test Bench). Переходим в меню по пункту Terminal -> Configure Tasks, откроется следующий диалог:

B67-17

Потом:

B67-18

Создаём файл .vscode\Tasks.json из шаблона Others (нижний пункт). Собственно, после создания файла он должен открыться в редакторе — копируем туда следующий текст:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile Verilog File",
            "type": "shell",
            "command": "cd ${fileDirname} ; iverilog -o ${fileBasename}.vvp ${fileBasename} ; vvp -N ${fileBasename}.vvp"
        },
        {
            "label": "Run GTKWave",
            "type": "shell",
            "command": "cd ${fileDirname} ; gtkwave out.vcd"
        }
    ]
}

Сохраняем. Это создание двух команд, первая — для компиляции, вторая — для отображения результатов симуляции.

Закрываем редактор, чтобы он подхватил изменения файла .vscode\Tasks.json при следующем запуске.

Примечание: Можно еще хоткеи настроить для задач, но это уже оставлю на вашу любознательность. ;)

Тест

Ну а теперь самое простое… Запускаем Visual Studio Code, папка с проектом будет открыта уже в воркспейсе (если не перемещали). Открываем файл counter_tb.v
т. к. это основной файл, с которого будет произведена компиляция и симуляция. Переходим в меню по пункту Terminal -> Run Task…, откроется следующий диалог с ранее объявленными задачами:

B67-20

Вначале выбираем Compile Verilog File и потом выбираем запуск задачи без сканирования лога выполнения:

B67-21

Успешно откомпилировано и создан файл для отображения симуляции работы (на идеальных компонентах):

B67-22

После успешной компиляции аналогичным образом вызываем Run GTKWave для просмотра результатов. Откроется основное окно GTKWave:

B67-23

Раскрываем слева экземпляр тестбенча и выделяем экземпляр DUT тестируемого модуля counter, внизу появятся его сигналы, просто перетаскиваем их в колонку Signals:

B67-24

Вот и всё! Надеюсь это будет полезно начинающим. ;)

Ссылки

  • Visual Studio Code — официальная страничка редактора кода;
  • Tasks in Visual Studio Code — полезное описание, как создавать свои команды;
  • Icarus Verilog — официальный сайт компилятора и симулятора Verilog;
  • Icarus Verilog Installation Guide — как скомпилировать и установить Icarus Verilog на любой платформе;
  • Icarus Verilog for Windows — откомпилированные бинарники Icarus Verilog (вариант для ленивых как я :D) в виде установщика под Windows.