Июн 29 2015

Статья «Ten C++11 Features Every C++ Developer Should Use»

Прочитал статью «Ten C++11 Features Every C++ Developer Should Use», автор Marius Bancila, ссылка: http://www.codeproject.com/Articles/570638/Ten-Cplusplus-Features-Every-Cplusplus-Developer. Весьма интересно и познавательно. Я, конечно, основные моменты знал и ранее, но после прочтения познания в C++11 несколько упорядочились.
Вообще, www.codeproject.com — хороший сайт, надо почаще заглядывать.

Июн 21 2015

Генерация файлов .mif и case-конструкций

Пусть в проекте FPGA необходимо ПЗУ, в которое записана определённая информация, имеющаяся у нас в виде бинарного файла. ПЗУ, как правило, реализуются на блоках BRAM, в которые при инициализации FPGA записывается требуемое содержимое.
Файлы инициализации памяти BRAM для FPGA, могут иметь формат MIF (Memory Initialization File) или формат HEX.

DSC_0522_EDIT

Нужный модуль памяти можно сгенерировать в Quartus II с помощью MegaWizard, в ISE — с помощью Xilinx Core Generator. Кроме этого, в QuartusII возможно использование специальной директивы:

reg [7:0] mem[0:2047] /* synthesis ram_init_file = "test.mif" */;

Эта директива позволяет создать RAM, инициированную значениями из файла .MIF. Использование RAM с предустановленными значениями, это очень плохая идея, но в качестве ROM такую память использовать вполне можно. Проблема в том, что эту директиву понимает только Quartus II, никакой кроссплатформенности.

Quartus II предоставляет редактор файлов памяти, и возможность загрузки файлов .mif и .hex, Xilinx Core Generator требует загрузки файла .coe, имеющего другой формат, нежели MIF. Однако хочется иметь кроссплатформенное решение, которое не зависело бы от платформы. Таким вариантом является генерация ROM в виде case-конструкции:

always@(posedge clk)
begin
  case(in)
  ...
  11'h00d: out = 8'h99;
  11'h00e: out = 8'h81;
  11'h00f: out = 8'h7e;
  11'h010: out = 8'h7e;
  11'h011: out = 8'hff;
  11'h012: out = 8'hdb;
  11'h013: out = 8'hff;
  11'h014: out = 8'hc3;
  11'h015: out = 8'he7;
  11'h016: out = 8'hff;
  ...
  endcase
end

Полезная ссылка: различные конструкции для генерации разных типов RAM, ROM и других модулей можно найти в руководстве Altera «Recommended HDL Coding Styles»: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/qts/qts_qii51007.pdf
Я написал две простые утилиты, которая преобразует бинарный файл в MIF и в тело конструкции case.

Read more »

Июн 19 2015

FPU. Часть 5. Сумматор, тест и RTL

Итак, сумматор чисел в формате IEEE 754 с разрядностью 32 или 64 бита.
Исходники можно скачать на Github: https://github.com/arktur04/FPU.

КДПВ (кликабельно):

pic1

Read more »

Июн 17 2015

Ссылка от RS Components

Инженерный портал http://www.rs-online.com/designspark/electronics/nodes/view/type:tool/slug:product-data-library, цель которого – предоставить инженеру техническую информацию от разных производителей – в одном месте.

Июн 16 2015

Книга Б. Страуструп «Язык программирования С++»

Прочитал книгу Б. Страуструп «Язык программирования С++».

1363474817_6q2alrlwncaa

Книга очень хорошая, это не только справочник по синтаксису языка и библиотеке STL, это ещё и прекрасный учебник с множеством примеров кода. Также в книге есть рассуждения автора о процессе проектирования о организации процесса разработки ПО. Этим он отличается от многих авторов из «академической» среды, таких, как Н.Вирт. Не стоит забывать, что Б. Страуструп в первую очередь программист — практик, работающий в коммерческой организации над большими проектами, а не преподаватель кафедры программирования, чья самая большая программа не превышает ста строк.

Не могу не привести цитату (гл. 23.5):

«В организации, которая обращается со своими программистами как с полными идиотами, вскоре будут работать только те программисты, которые желают и способны вести себя как полные идиоты.»

Июн 15 2015

Цитата

Цитата из книги Б. Страуструп «Язык программирования С++» (гл.23.3) (текст выделен мной):
«Обычный подход… заключается в том, чтобы свести разработку к задачам относительно низкого уровня, подгоняемых под общую грубую схему. То есть идея заключается в том, что создаётся класс быстро обучаемых (дешевых) взаимозаменяемых программистов низкого уровня («кодировщиков») и класс не таких дешевых, но столь же взаимозаменяемых (и, стало быть, столь же малоценных) проектировщиков. Предполагается, что кодировщики не принимают проектных решений, в то время как проектировщики не утруждают себя грубой работой по вниканию в детали кодирования. Такой подход часто приводит к неудаче. Там, где он работает, в результате получаются чрезмерно громоздкие системы с низкой производительностью.

По сути дела, такой системе не хватает механизма обратной связи, чтобы люди учились на чужом опыте. Это растрата человеческого таланта. Создание среды разработки, в рамках которой человек может проявлять разнообразные таланты, развивать новые способности, вносить идеи и радоваться своей работе — это не просто цель, достойная сама по себе, но вещь, приносящая практическую экономическую выгоду.«

Июн 12 2015

О подсчете нулей

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

Итак, вариант 1:

function [ZERO_DATA_WIDTH - 1: 0] zero_cnt;
input [DATA_WIDTH - 1: 0] in;
integer i;
begin
  zero_cnt = DATA_WIDTH;
  for(i = DATA_WIDTH - 1; i >= 0; i = i - 1)
  begin
    if(in[i] && zero_cnt == DATA_WIDTH)
	   zero_cnt = DATA_WIDTH - i - 1;
  end
end
endfunction

Read more »

Июн 02 2015

Книга Jane Smith «Verilog Coding Guidelines»

Это не совсем книга, впрочем, это просто документ, стилевой гайд по Verilog  фирмы Cisco System.

pic

Объём небольшой, всего 17 страниц. Описывается стиль кода, отступы, именование сигналов и регистров, и т.п.

Лично мне не вполне нравится тот стиль, который описан в документе, например, документ рекомендует выравнивать все декларации сигналов, комментарии и т.п. «в столбик», да ещё с использованием табуляций.  Но наличие любого стайлгайда лучше, чем отсутствие такового, тем более при командной работе.

Любой стиль кодирования есть всего лишь отражение чьих-то вкусов, не существует «единственно верного» стиля.

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

Июн 02 2015

Бесплатные САПР от RS Components

С сайта RS Components можно скачать две системы автоматизированного проектирования: одна предназначена для разработки принципиальных схем и печатных плат (DesignSpark PCB), вторая для 3D-моделирования (DesignSpark Mechanical). Обе системы полностью бесплатны, то есть это не урезанные демо-версии. Ссылка: http://www.rs-online.com/designspark/electronics/eng/page/mechanical

Я скачал обе и немного попробовал что-нибудь сделать. Сразу могу сказать, что я сравниваю возможности и удобство использования с теми программами, которыми пользуюсь сам: с Altium Designer и Solid Works.

pic1

Редактор схем.

pic2

 

Редактор 3D.

В общем, первое впечатление хорошее, есть большие библиотеки компонентов и для редактора схем/плат, и для 3D.

Библиотека условных графических обозначений большая, но не соответствует ГОСТ, поэтому на производстве её использовать не получится, только «для себя». Редактор PCB тоже есть, там есть разные возможности, поддержка DRC и другое.

Разобраться сходу не удалось, но времени на освоение у меня сейчас просто нет. Надо читать документацию.

Библиотека 3D большая и удобная, с поиском по каталогу, можно скачать какую-либо деталь и экспортировать её в формат STL. Экспортировать в Solid Works получилось, только без цвета, увы. Больше распространённых форматов 3D не предусмотрено, формата STEP нет, экспорт только через Solid Works или другой пакет 3D-моделирования.

Само по себе моделирование в 3D происходит совсем не так, как в Solid Works или Компас 3D. Если честно, совсем не так. Вероятно, нужно читать документацию и руководства, чтобы освоить эту программу, но я попробую это сделать в будущем. Если у вас есть задачи по разработке плат и 3D-моделей, можете попробовать скачать и разобраться.

Read more »