Statements in VHDL - Sequential Statementsvitaliykulanov
The lecture is about statements in VHDL - classification and principles of work. Sequential statements (operators) in VHDL: principles, operators, examples
The lecture is about structural description of projects in VHDL: component declaration, component instantiation, for...generate, if...generate statements
Statements in VHDL - Sequential Statementsvitaliykulanov
The lecture is about statements in VHDL - classification and principles of work. Sequential statements (operators) in VHDL: principles, operators, examples
The lecture is about structural description of projects in VHDL: component declaration, component instantiation, for...generate, if...generate statements
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
Презентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...Iosif Itkin
Vert, Т., Krikun, Т. и Glukhih, М., St. Petersburg State Polytechnic University, Clausthal Technical University
Finding Defects in C and C++ Pointers Using Static Analysis and Logical Inference
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
Дмитрий Ховрич рассказывает как использовать строгую типизацию TypeScript и писать надёжный код в функциональном стиле. А также делится знаниями как использовать функторы и монады в ежедневной фронтенд разработке.
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionDenis Tsvettsih
Презентация к докладу «Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection» с конференции .NEXT SPb 2015 (Санкт-Петербург, 5 июня 2015)
http://spb2015.dotnext.ru/#cvetkih_talk
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...Iosif Itkin
Vert, Т., Krikun, Т. и Glukhih, М., St. Petersburg State Polytechnic University, Clausthal Technical University
Finding Defects in C and C++ Pointers Using Static Analysis and Logical Inference
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...OdessaFrontend
Дмитрий Ховрич рассказывает как использовать строгую типизацию TypeScript и писать надёжный код в функциональном стиле. А также делится знаниями как использовать функторы и монады в ежедневной фронтенд разработке.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
Клиент-сайд изобилует кучей различных транспортов, и зачастую непонятно, какой взять для решения той или иной задачи. В данной лекции рассказывается об особенности каждого транспорта и области применимости.
Olexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
разработка серверов и серверных приложений лекция №3etyumentcev
В третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
Инструменты для з̶а̶х̶в̶а̶т̶а̶ ̶м̶и̶р̶а̶ отладки в TarantoolTimur Safin
Презентация для выступления на Владивостокском митапе https://moscowdjango.timepad.ru/event/1884275/
"Основной режим разработки приложений в Тарантуле — это написание скриптов и манипуляции данными на Lua (оставим пока за скобками режим SQL). Часто внедрению Тарантула в некую систему становится блокером использование Lua.
В экосистеме Lua мало тулинга, это касается как встроенного интерпретатора, так и JIT-транслятора LuaJIT.
Давайте оглядимся, как обстоят дела с тестированием, профилированием, статическим анализом и дебагом в Lua. И как это все может быть использовано при разработке сервисов, в архитектуре которых есть Tarantool."
Слайды с конференции Devconf 2014. Рассказывается, как производительность влияет на конверсию, приводится 8 тонкостей языка, которые нужно знать, чтобы писать самый быстрый код из возможного.
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василийsolit
Василий Соловей, Солигорск. PHP-разработчик в в «Электронном Солигорске».
«Минусы ООП на примере языка PHP». Development секция. Для разработчиков (начальный и средний уровень).
1. Что есть ООП (легкое повторение уже знакомого)
2. Лучше доверять авторитету мнения, чем мнению авторитета (во всем нужно разбираться основательно, а в ООП тем более)
3. Неизменная скупость в похвалах — верный признак посредственного ума (плюсы ООП)
4. Не все то солнышко, что блестит (основная часть доклада – минусы ООП)
5. Кто владеет информацией, тот владеет ситуацией (пояснение сути доклада:
доклад не принижает и не умоляет достоинств ООП он создан расширить кругозор)
«Начинать никогда не поздно!». Мотивационное выступление. На личном примере, я могу рассказать, что начинать никогда не поздно, и если есть желание – нет повода себе отказывать.
1. Путь в тысячу миль начинается с одного шага (с чего начать)
2. И на верном пути повстречаются распутья (как не сбиться с дороги начав)
3. Кто ты программист? (мой взгляд на программирование)
4. Успех – дитя настойчивости
Similar to Subprograms in VHDL, Functions in VHDL (20)
2. Функции
Не является самодостаточной структурной единицей:
• В отличие от процедур функции возвращают результат,
используемый в выражениях, в состав которых включен
вызов этой функции
• тело функции должно содержать как минимум один
оператор RETURN
Возвращают только одно единственное значение:
• возможно обойти это ограничение за счет использования
записей (RECORD), т.е. функция может возвращать
запись, поля которой инициализированы
множественными значениями
Включает две составляющие:
• декларация функции
• вызов функции
3. Декларация функции в VHDL
[PURE|IMPURE]
FUNCTION name[(parameters_list)] RETURN type_mark IS
{subprogram_declarative_item}
BEGIN
{sequential_statement}
END [FUNCTION] [name];
SIGNAL, FILE, TYPE,
SUBTYPE, PROCEDURE,
FUNCTION, VARIABLE,
CONSTANT, ...-- последовательные операторы
a := 5
FOR … LOOP … END LOOP;
...
IF … THEN … ELSE … END IF;
Формальные
параметры
Можетлифункцияиметь
«побочныйэффект»?
(поумолчанию-PURE)
Тип возвращаемого
значения
Имя функции:
Идентификатор
Операторный символ («+», «*»)
4. project_pkg.vhd
n_reg.vhd
Объявление функций
-- USE work.project_pkg;
ENTITY reg_file IS
GENERIC (...);
PORT (...);
END ENTITY n_reg;
ARCHITECTURE rtl OF reg_file IS
BEGIN
PROCESS(...)
BEGIN
...
END PROCESS;
...
END;
FUNCTION inc(SIGNAL val: INTEGER; step: INTEGER := 1)
RETURN INTEGER IS
BEGIN
RETURN val + step;
END FUNCTION inc;
...
PACKAGE project_pkg IS
...
-- прототип функции
FUNCTION inc(SIGNAL a: INTEGER;
step: INTEGER := 1)
RETURN INTEGER;
...
END PACKAGE project_pkg;
PACKAGE BODY project_pkg IS
END PACKAGE BODY project_pkg;
...
...
5. Формальные параметры функции
...FUNCTION name[(parameter_list)] RETURN...IS
([CONSTANT|SIGNAL|FILE] identifier {,…}:
type_indication [:= expression] {;…})
Имя/Идентификатор
параметра
Класс параметра,
CONSTANT по умолчанию
(если класс явно не задан)
Тип параметра Значение по умолчанию
FUNCTION inc (a: BIT_VECTOR; step: INTEGER := 1) RETURN BIT_VECTOR;
FUNCTION "*" (a, b: fruits) RETURN fruits;
FUNCTION add_signals (SIGNAL in1, in2: REAL) RETURN REAL;
TYPE int_data IS FILE OF NATURAL;
FUNCTION end_of_file (FILE file_name: int_data) RETURN BOOLEAN;
6. Вызов функции в VHDL
Вызов функции в исходном коде всегда является частью
выражения (операции присваивания, условные операторы и
т.д.): ... name[(parameter_list)] ...
Список фактических параметров
([parameter_name =>] expression|identifier|OPEN, {…})
Формальный параметр
Два типа сопоставления:
Именованное (=>)
Позиционное
Фактический параметр
выражение (константное значение)
имя/идентификатор сигнала, константы, файлового дескриптора
OPEN – параметр не используется или используется значение по
умолчанию
7. Формальные параметры функции
Если используется смешанный тип сопоставления параметров
тогда, именованное сопоставление в списке параметров
должно всегда быть последним:
Каждый формальный параметр представляет собой
объявление (декларацию) объекта, который является
локальным для функции
Тип формального параметров должен быть объявлен заранее
Передаваемые в функцию сигналы-параметры не могут быть
изменены:
• все параметры функции имеют режим направления
передачи параметров вида IN
result = do_smth(good, more => 1, even_more => 2);
result = do_smth(bad, more => 1, 2); -- нарушен порядок
8. Функции в VHDL
В качестве формальных параметров функции могут
выступать массивы неограниченной длины:
• при вызове функции массивы должны быть ограничены
заданным диапазоном
Функции могут быть вложенными
Функции поддерживают рекурсивный вызов
Могут быть «перегружены»
Реализуют исключительно комбинационную логику
Возможен вызов функции-конвертера при связывании
портов компонентов (оператор PORT MAP)
FUNCTION parity (X: STD_LOGIC_VECTOR) RETURN STD_LOGIC;
VARIABLE reg: STD_LOGIC_VECTOR(0 TO N - 1);
VARIABLE p: STD_LOGIC;
...
p := parity(reg);
9. Функции в VHDL
Тело функции должно содержать как минимум один оператор
RETURN:
[label:] RETURN expression;
Метка Возвращаемое значение
Тело функции НЕ должно содержать оператор присваивания
значения сигналу (<=) и оператор ожидания WAIT
В теле функции нельзя вызывать процедуру, в теле которой
находится оператор ожидания WAIT
В декларативной части функции могут быть объявлены
«локальные» переменные (VARIABLE), значение которых
инициализируется заново при каждом новом вызове
функции
10. Функции в VHDL
ENTITY func_demo IS
PORT(A : IN STD_LOGIC_VECTOR(0 TO 1);
result : OUT STD_LOGIC);
END ENTITY func_demo;
ARCHITECTURE rtl OF func_demo IS
FUNCTION convert (val: STD_LOGIC_VECTOR(0 TO 1))
RETURN STD_LOGIC IS
BEGIN
CASE val IS
WHEN "00" | "11" => RETURN '0';
WHEN OTHERS => RETURN '1';
END CASE;
END convert;
BEGIN
result <= convert(a);
END ARCHITECTURE rtl;
xor_gate
xor_gate
xor_gate
11. Функции в VHDL
...
data : in std_logic_vector(N-1 downto 0);
p : out std_logic
...
FUNCTION parity(invec : STD_LOGIC_VECTOR)
RETURN STD_LOGIC IS
VARIABLE parity_v : STD_LOGIC := '0';
BEGIN
FOR i IN invec'range LOOP
parity_v := parity_v XOR invec(i);
END LOOP;
RETURN parity_v;
END FUNCTION parity;
N = 4
12. Функции в VHDL
N = 3
ARCHITECTURE rtl OF reg_n IS
FUNCTION parity(invec : STD_LOGIC_VECTOR)
RETURN STD_LOGIC IS
...
SIGNAL p_en: STD_LOGIC;
BEGIN
p_en <= parity(data);
reg : PROCESS (clk) IS
BEGIN
IF rising_edge(clk) THEN
IF p_en = '1' THEN
q <= data;
END IF;
END IF;
END PROCESS reg;
END ARCHITECTURE rtl;
13. Функции в VHDL
FUNCTION rising_edge (SIGNAL s : STD_ULOGIC)
RETURN BOOLEAN IS
BEGIN
RETURN (s'EVENT AND (To_X01(s) = '1') AND
(To_X01(s'LAST_VALUE) = '0'));
END;
FUNCTION To_X01 (s : STD_ULOGIC) RETURN X01 IS
BEGIN
RETURN (cvt_to_x01(s));
END;
-- ('X','0','1')
SUBTYPE X01 IS RESOLVED STD_ULOGIC RANGE 'X' TO '1';
TYPE logic_x01_table IS ARRAY
(std_ulogic'LOW TO std_ulogic'HIGH) OF X01;
CONSTANT cvt_to_x01 : logic_x01_table := (
-- 'U' 'X' '0' '1' 'Z' 'W' 'L' 'H' '-'
'X', 'X', '0', '1', 'X', 'X', '0', '1', 'X'
);
14. Функции-преобразователи
FUNCTION to_bitvector(svalue: STD_LOGIC_VECTOR)
RETURN BIT_VECTOR IS
VARIABLE outvalue: BIT_VECTOR(svalue'length-1 DOWNTO 0);
BEGIN
FOR i IN svalue'range LOOP
CASE svalue(i) IS
WHEN '0' => outvalue(i) := '0';
WHEN '1' => outvalue(i) := '1';
WHEN OTHERS => outvalue(i) := '0';
END CASE;
END LOOP;
RETURN outvalue;
END FUNCTION to_bitvector;
...
VARIABLE reg: STD_LOGIC_VECTOR(15 DOWNTO 0);
...
res <= to_bitvector(reg);
...
15. Перегрузка операторных символов
TYPE ppap IS (APPLE, PEN, PINEAPPLE, APPLE_PEN,
PINEAPPLE_PEN, PEN_PINEAPPLE_APPLE_PEN, NONE);
FUNCTION "+"(L: ppap; R: ppap) RETURN ppap IS
BEGIN
IF L = APPLE AND R = PEN THEN
RETURN APPLE_PEN;
ELSIF L = PEN AND R = PINEAPPLE THEN
return PINEAPPLE_PEN;
ELSIF L = APPLE_PEN AND R = PINEAPPLE_PEN THEN
RETURN PEN_PINEAPPLE_APPLE_PEN;
ELSE
REPORT "Can't be Uhh...";
RETURN NONE;
END IF;
END;
16. Перегрузка операторных символов
ppap_proc : PROCESS IS
VARIABLE a, b, c: ppap;
BEGIN
a := APPLE; b := PEN;
c := a + b;
REPORT "c IS " & ppap'image(c);
WAIT FOR 100 ns;
a := PEN; b := PINEAPPLE;
c := a + b;
REPORT "c IS " & ppap'image(c);
WAIT FOR 100 ns;
a := APPLE_PEN;
b := PINEAPPLE_PEN;
c := a + b;
REPORT "c IS " & ppap'image(c);
WAIT FOR 100 ns;
END PROCESS ppap_proc;
+ =
17. Функции вида PURE|IMPURE
Функции вида PURE:
• всегда возвращают один и тот же результат, когда
осуществляется их вызов с одними и теми же значениями
параметров
• по умолчанию все функции в VHDL относятся к классу PURE,
если не указано иного с помощью ключевого слова IMPURE
Функции вида IMPURE:
• могут возвращать разные значения даже если вызов
функции осуществляется с одними и тем же значениями
параметров («побочные эффекты», «side effects»)
• все сигналы (внешние – секция PORT и внутренние –
декларативная часть архитектурного тела SIGNAL),
объявленные в исходном коде файла проекта «видны» в
теле функции
18. Функции вида IMPURE
demo : PROCESS IS
VARIABLE number : INTEGER := 1;
VARIABLE foo, bar : INTEGER := 0;
IMPURE FUNCTION side_effect(a : INTEGER)
RETURN INTEGER IS
VARIABLE counter : INTEGER;
BEGIN
counter := a * number;
number := number + 1;
RETURN COUNTER;
END side_effect;
BEGIN
foo := 5;
bar := side_effect(foo); -- 5 * 1 = 5
WAIT FOR 100 ns;
number := 5;
bar := side_effect(foo); -- 5 * 5 = 25
WAIT FOR 100 ns;
END PROCESS demo;
19. Функции разрешения
Функция разрешения позволяет нескольким источникам
(значениям) управлять одним сигналом одновременно:
• шины , которые соединяют несколько источников данных
Функция разрешения должна быть вида PURE
Функция разрешения должна выполнять ассоциативные
операции, чтобы порядок, в котором рассматриваются
драйверы множества сигналов, не влиял на разрешенное
значение сигнала
20. Функции разрешения
FUNCTION wire_or(sbus: STD_ULOGIC_VECTOR)
RETURN STD_ULOGIC IS
BEGIN
FOR i IN sbus'range LOOP
IF sbus(i) = '1' THEN
RETURN '1';
END IF;
END LOOP;
RETURN '0';
END FUNCTION wire_or;
...
...
SUBTYPE wire_or_logic IS wire_or STD_ULOGIC;
SIGNAL error_bus: wire_or_logic;
...
Функция разрешения
Базовый тип
21. Функции разрешения
ARCHITECTURE multi_rtl OF multi_chip IS
...
SUBTYPE wire_or_logic IS wire_or STD_ULOGIC;
SIGNAL error_bus: wire_or_logic;
...
BEGIN
chip1 : PROCESS IS
BEGIN
...
error_bus <= '1' AFTER 2 ns;
...
END PROCESS chip1;
chip2 : PROCESS IS
BEGIN
...
error_bus <= '0' AFTER 2 ns;
...
END PROCESS chip2;
END ARCHITECTURE multi_rtl;
22. Функции разрешения в IEEE 1164
-- декларация перечислимого типа STD_ULOGIC
TYPE STD_ULOGIC IS ( 'U', -- Uninitialized
'X', -- Forcing Unknown
'0', -- Forcing 0
'1', -- Forcing 1
'Z', -- High Impedance
'W', -- Weak Unknown
'L', -- Weak 0
'H', -- Weak 1
'-' -- Don't care);
-- Функция "разрешения" STD_LOGIC
FUNCTION resolved (s: STD_ULOGIC_VECTOR) RETURN STD_ULOGIC;
-- декларация типа (подтипа) STD_LOGIC
-- на основе базового типа STD_ULOGIC
SUBTYPE std_logic IS resolved STD_ULOGIC;
23. Функции разрешения в IEEE 1164
FUNCTION resolved (s : std_ulogic_vector)
RETURN std_ulogic IS
VARIABLE result: std_ulogic := 'Z'; -- weakest state default
BEGIN
-- the test for a single driver is essential otherwise the
-- loop would return 'X' for a single driver of '-' and that
-- would conflict with the value of a single driver unresolved
-- signal.
IF (s'LENGTH = 1) THEN
RETURN s(s'LOW);
ELSE
FOR i IN s'RANGE LOOP
result := resolution_table(result, s(i));
END LOOP;
END IF;
RETURN result;
END resolved;
24. Функции разрешения в IEEE 1164
TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic;
CONSTANT resolution_table : stdlogic_table := (
-----------------------------------------------------------
--| U X 0 1 Z W L H - | |
-----------------------------------------------------------
( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 |
( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W |
( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - |
);