[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 9, 10, 11
Автор Сообщение
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Я решил получать обратную связь после каждой лекции (по желанию студентов).
Возможно такое более интенсивное общение будет способствовать повышению качества занятий БОЛЕЕ ОПЕРАТИВНО, а не на "будущий семестр".

Я буду выкладывать план лекции. А студенты могут в своих ответных сообщениях писать, что понравилось/не понравилось/изменить ПОСЛЕ КАЖДОЙ ЛЕКЦИИ.

Эти лекции читаются группам
ПО21, М3, ПМ41/42
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Лекция 1. Введение в предмет

План лекции

Зачем и как будем изучать этот предмет
.... Зачем
....... Цифровые системы - другая профессия
....... Фундаментальные знания (устройство цифровых систем)
....... Учимся учиться
....... Постараюсь сделать занятия интересными по форме и содержанию
....... Автоматическое получение оценок ПО-21
.... Как
....... Каждую неделю - контрольная (10 задач и более)- сдаем только на С-МПА
....... На лекциях теория и подготовка к контрольной
....... Индивидуальные задания (Как искать нерешенные индивидуальные задания)
....... Новые задачи (обработка последовательностей битов или байтов)

Приветствуются новые задачи:
- Cамое красивое решение
- Устройства, которые мы проектируем
- Устройства, которые они проектируют
- Свои идеи

Еженедельный бонусный конкурс на САМОЕ КРАСИВОЕ РЕШЕНИЕ
подробности на форуме

Условия задач первой контрольной
Технология сдачи решений
- Разработка и отладка С-МПА программ в Winter
- Генерация схемы устройства по С-МПА программе( в HLCCAD)
- Разбор решений первой контрольной
- Компилятор языка CMPDL
- Вопросы и ответы по С-МПА.
- Как работать с битами в С (С-МПА).


Придумывание своих и решение чужих задач на бонусы.

Для справки
МПА - МикроПрограммный Автомат
MPDL - MiсroProgram Description Language - язык написания микропрограмм
CMPDL - С-подобный MPDL
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
unsigned __in __bits(8) in_0;
unsigned __in __bits(8) in_1;

unsigned __out __bits(9) out_0;

void main() {
	if (in_0 == in_1) 
	  out_0=1+2*in_0;
	else
	  if (in_0>in_1) out_0=in_1+(~in_0);
	  else out_0=in_0+(~in_1);
}
Катя Калачева написала такое решение задачи 8. Антисумматор.
Нам показалось, что программа симулируется с ошибкой - обнуляется In_1 перед первым else
Александр Громыко

Темы: 0
Сообщений: 12

Мой профиль
unsigned __in __bits(1) x1;
unsigned __in __bits(1) x2;
unsigned __in __bits(1) x3;
unsigned __in __bits(1) x4;

unsigned __out __bits(1) y1;
unsigned __out __bits(1) y2;
unsigned __out __bits(1) y3;
unsigned __out __bits(1) y4;

void main() {
	     if (x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0) { y1 = 0; y2 = 0; y3 = 0; y4 = 1; }
	else if (x1 == 0 && x2 == 0 && x3 == 0 && x4 == 1) { y1 = 0; y2 = 0; y3 = 1; y4 = 0; }
	else if (x1 == 0 && x2 == 0 && x3 == 1 && x4 == 0) { y1 = 0; y2 = 0; y3 = 1; y4 = 1; }
	else if (x1 == 0 && x2 == 0 && x3 == 1 && x4 == 1) { y1 = 0; y2 = 1; y3 = 0; y4 = 0; }
	else if (x1 == 0 && x2 == 1 && x3 == 0 && x4 == 0) { y1 = 0; y2 = 1; y3 = 0; y4 = 1; }
	else if (x1 == 0 && x2 == 1 && x3 == 0 && x4 == 1) { y1 = 0; y2 = 1; y3 = 1; y4 = 0; }
	else if (x1 == 0 && x2 == 1 && x3 == 1 && x4 == 0) { y1 = 0; y2 = 1; y3 = 1; y4 = 1; }
	else if (x1 == 0 && x2 == 1 && x3 == 1 && x4 == 1) { y1 = 1; y2 = 0; y3 = 0; y4 = 0; }
	else if (x1 == 1 && x2 == 0 && x3 == 0 && x4 == 0) { y1 = 1; y2 = 0; y3 = 0; y4 = 1; }
	else if (x1 == 1 && x2 == 0 && x3 == 0 && x4 == 1) { y1 = 1; y2 = 0; y3 = 1; y4 = 0; }
	else if (x1 == 1 && x2 == 0 && x3 == 1 && x4 == 0) { y1 = 1; y2 = 0; y3 = 1; y4 = 1; }
	else if (x1 == 1 && x2 == 0 && x3 == 1 && x4 == 1) { y1 = 1; y2 = 1; y3 = 0; y4 = 0; }
	else if (x1 == 1 && x2 == 1 && x3 == 0 && x4 == 0) { y1 = 1; y2 = 1; y3 = 0; y4 = 1; }
	else if (x1 == 1 && x2 == 1 && x3 == 0 && x4 == 1) { y1 = 1; y2 = 1; y3 = 1; y4 = 0; }
	else if (x1 == 1 && x2 == 1 && x3 == 1 && x4 == 0) { y1 = 1; y2 = 1; y3 = 1; y4 = 1; }
	else if (x1 == 1 && x2 == 1 && x3 == 1 && x4 == 1) { y1 = 0; y2 = 0; y3 = 0; y4 = 0; }
}


При переводе такого решения в схему мне выдается запись в протоколе:
6.2 10:03 2. Котенок 0 / 100 Чекер снят по времени (>117 sec) Arifm2.prd DelTA3 at Nit3 HLCCAD project  


На мой взгляд, такое решение по времени сниматься не может.
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Предлагаю все сообщения подобного вида писать в тему "Вопросы по С-МПА".
Кстати, не лишним будет перечитать уже имеющиеся там вопросы и ответы.
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Лекция 2. Понятие об архитектуре вычислительных систем и ее развитии

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

2. Движитель развития АВС?
- микроминиатюризация

3. Что такое микроминиатюризация?
- процесс уменьшения размеров вентиля вследствие развития и совершенствования технологий изготовления электронных цифровых систем

4. Что такое вентиль?
- 2И-НЕ

5. При чем здесь вентиль?
В дискретной математике доказано (теорема о полноте булевых функций), что ЛЮБАЯ логическая функция может быть выражена в базисе 2И-НЕ. Следовательно, любое цифровое устройство может быть построено из вентилей (элементов 2И-НЕ).

6. Этапы микроминиатюризации?
- милли -> микро -> нано технологии
(размеры вентиля - милли-микро-нанометры)
(время прохождения от входа вентиля к выходу - в милли-микро-нано-секундах)

7. Основные следствия микроминиатюризации?
- сокращение физических размеров устройств
- увеличение функциональной емкости
- повышение быстродействия
- уменьшение энергопотребления (вплоть до энергонезависимости/мобильности)
- сокращение цены
- взрывной рост сферы применения цифровых устройств

8. Основные направления развития АВС?
- перенос функций программного обеспечения в аппаратное
- развитие параллелизма
- аппаратный контроль надежности

9. Классификация программного обеспечения (ПО) с точки зрения переноса функций в аппаратное обеспечение:
- прикладное ПО (MS Word, MS Outlook, ...)
- системное ПО (компиляторы, отладчики, среды разработки программ...)
- операционные системы (MS Windows, Linux, MS DOS ...)

Работа над ошибками
- не выдавайте на выходные контакты значения несколько раз
- перечитайте все вопросы и ответы здесь - "Вопросы по С-МПА".

Вот некоторые ВАЖНЫЕ вырезки оттуда

==============================================================
Некоторые ошибки:

unsigned char t[12]=''; - строковой литерал должен быть заключен в двойные кавычки, т.е. правильно так:
unsigned char t[12]="";

t += in1[2]; - нельзя присваивать массиву, правильно так:
t[i] = in1[2];

for (i;i<11,in1[i]!='#',in2[i]!='#';i++) - пропущена инициализация, в условии продолжения цикла скорее всего ошибка, т.к. все три условия вычисляются, но в итоге используется только результат третьего сравнения. Прочитайте о том, как работает оператор ','.

--------

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

Пример неправильного использования знаковых типов:
int __in __bits(1) in_2;
int __in __bits(1) in_1;
int __in __bits(1) in_0;
int __out __bits(1) out_3;
int __out __bits(1) out_2;
int __out __bits(1) out_1;
int __out __bits(1) out_0;

--------

Следует:
1. Если есть множество if-ов объединять их по возможности в единый switch;
2. Если нужен сдвиг на константу, то помнить, что p = p>>1, порождает больше кода для HLCCAD, т.к. требуется сделать сдвиг p>>1, а затем присвоение результата снова p. Поэтому нужно писать p >>= 1, эта операция производит просто сдвиг, без дополнительного присваивания;
3. Если нужно получить последний бит числа, то писать y4 = p, где y4 - однобитовая переменная, а p - многобитная, но не писать y4 = p%2;
4. Отказаться вообще от p%2, лучше писать (p & 1), т.к. эта операция порождает более компактное выходное устройство;
5. Помнить о приоритете операции >> и <<, т.к. можно ошибиться и написать p = p<<1 + x, а на самом деле оно означает p = p<<(1+x), т.к. приоритет '+' выше. В следствии этого можно "убить много времени" на поиск, почему программа не проходит по времени. Результатом тайм лимита на самом деле будет то, что сдвиг на переменную "очень дорогая операция" для генератора. Лучше сдвиг на константу всегда брать в скобки, т.е. писать p = (p<<1) + x.

--------

- Учимся думать-2009 (1-5) в курсе "Информатика 2008-2009"
бонусы (за решение 20заданий=1бонусный_балл, за меньшее время и новые идеи) + самоучеба + информация для нас


Еженедельный бонусный конкурс на САМОЕ КРАСИВОЕ РЕШЕНИЕ
подробности на форуме

Кстати о рыбках

Отправитель Терехова Екатерина
Дата 12.02.2009 01:20:07
Тема Проблема
Сообщение
Михаил Семенович, так получилось, что я зарешалась и решила "лишние" задачи в теме "Экзамен\Индивидуальные задания\Тесты\Логические элементы\" Номера: 10, 14-21. "Откатите", пожалуйста. Заранее спасибо. Извините за беспокойство. 
Не буду. У меня НЕТ ВРЕМЕНИ на это. Всем все объяснялось НЕОДНОКРАТНО. Привыкайте нести отвественность за принятые решения и сделанные поступки. Ты можешь "искупить вину" перед однокурсниками, поставив аналогичные задачи.


Задачи контрольной #2
Борис Шруб

Темы: 0
Сообщений: 29

Мой профиль


Михаил Долинский:

Лекция 1. Введение в предмет
 

Первая лекция мне понравилась, понял намного больше, чем на любой из лекций предыдущего семестра. Впервые успевал понимать одновременно с изложением материала, хотелось бы, чтобы и в дальнейшем материал читался не в таком быстром темпе, как раньше, а так, как на этой лекции. Лучше меньше, да лучше.
Но есть замечания - как обычно, лёгкую часть темы разобрали подробно, и поняли почти все, а более сложной части (работа с битами, выделение единичного бита из n-битного числа, и т.д.) даже не коснулись. А на контрольной задачи на биты уже будут, так что хотелось бы, чтобы эта тема была объяснена на доске.

P.S. Вообще, лично моё мнение - проектор и всякие там мультимедиа-устройства только портят лекцию. Раньше, когда всё писалось на доске и не спеша разбиралось, было намного понятнее, чем быстрое мелькание слайдов на проекторе. Не сочтите ретроградом, но старая система мела, тряпки и доски всегда была и будет лучше всяких там проекторов.
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Но есть замечания - как обычно, лёгкую часть темы разобрали подробно, и поняли почти все, а более сложной части (работа с битами, выделение единичного бита из n-битного числа, и т.д.) даже не коснулись 
Спасибо, Борис за замечание. Это как говорится "по-существу". Почему я так поступил. Прежде всего потому, что это - не тема моего предмета. Вы изучали С, и Вы должны были это изучить давно (на втором курсе, по-моему). Я же рассказывал только то, что является НОВЫМ для всех.

Кроме того, я показывал решения задач, и Вы можете их посмотреть в теории и подготовке к контролю практики.

Тем не менее, я предлагаю восполнить пробел не только для Бориса, но и для других студентов.

Итак вопросы на бонусы для "знатоков".

Как работать с битами?

Выделить, установить в 1, сбросить в 0, инвертировать k-тый бит (нумерация справа - от младшего бита, начиная с 0) целого n-битного (8,16,32) числа.

Выделить подпоследовательность битов с номера k1 до k2 (k2>=k1).

Михаил Долинский

Темы: 2072
Сообщений: 49883

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

Я постараюсь читать лекцию хорошо.

Но, безусловно, без проектора, ПО-ОПРЕДЕЛЕНИЮ, можно передать на лекции МЕНЬШЕ информации. Поэтому лично я от проектора не откажусь. Хотя при случае пользовался, пользуюсь и буду пользоваться мелом и доской также.
Александр Антоненко

Темы: 1
Сообщений: 14

Мой профиль


Михаил Долинский:


Итак вопросы на бонусы для "знатоков".

Как работать с битами?

Выделить, установить в 1, сбросить в 0, инвертировать k-тый бит (нумерация справа - от младшего бита, начиная с 0) целого n-битного (8,16,32) числа.

Выделить подпоследовательность битов с номера k1 до k2 (k2>=k1).

 


в принципе я могу это рассказать. вопрос только в том, в какой форме это должно быть сделано?
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Прежде всего нужно выложить материал ЗДЕСЬ, в форуме.

Задание - фрагмент кода на С - комментарии по необходимости.
На ближайшей после выкладывания материала лекции я спрошу - если этого окажется недостаточно - тогда расскажешь ПО СВОЕМУ же тексту на лекции и ответишь на вопросы ...
Александр Антоненко

Темы: 1
Сообщений: 14

Мой профиль
хорошо
Александр Антоненко

Темы: 1
Сообщений: 14

Мой профиль

Как работать с битами?
 

unsigned __bits(8) a;
unsigned __bits(8) b;
unsigned __bits(8) c;

void main()
{
 a=~a;   //  инверсия каждого бита в переменной, т.е. было 10101100 стало 01010011
 c=a&b;  /*  побитовое И, применяется к каждой паре бит.	если применяется к переменным разной
	   размерности, то у переменной меньшей размерности отсутствующие биты считаются равными 0
		пример 1         пример 2
		a=01010111     a=1110
		b=11001001     b=00110011  
		c=01000001     c=00000010 */
 c=a|b;  /* побитовое ИЛИ, применяется к битам аналогично И
	   	a=11000011
	   	b=01100111
	   	c=11100111 */
 c=a^b;  /* побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ, применяется к битам аналогично И
		a=10101011
		b=11001100
		c=01100111 */
 b=a>>n; /* побитовый СДВИГ ВПРАВО на n разрядов. старшие разряды после сдвига устанавливаются в 0
		a=11001101
		n=3
		b=00011001
		данный способ является самым быстрым способом деления на 2^n */
 b=a<<n; /* побитовый СДВИГ ВЛЕВО на n разрядов. младшие разряды после сдвига устанавливаются в 0
		a=11001101
		n=3
		b=01101000
		данный способ является самым быстрым способом деления на 2^n */
         //  так же допустимы выражения вида
a&=b; a|=b; a^=b; a<<=n; a>>=n; 
         /*  в данном случае левым операндом будет браться переменная a и ей же будет присваиваться результат */
}



Выделить, установить в 1, сбросить в 0, инвертировать k-тый бит (нумерация справа - от младшего бита, начиная с 0) целого n-битного (8,16,32) числа.
 


unsigned __bits(8) a;
unsigned __bits(8) b;
unsigned __bits(8) k;
unsigned __bits(8) i;


void main()
{
 // выделить	k-й бит в a
          b=1;
          b<<=k;
          b&=a;   /* в результате у нас на k-й позиции числа b будет стоять k-й бит
          	числа a. все остальные биты будут нулевыми
		Пример
		a=11001011
		k=3
		b=00001000 */
 // установить k-й бит числа a в 1
	b=1;
	b<<=k;
	a|=b;
	
 // установить k-й бит числа a в 0
	b=1;
	b<<=k;
	b=~b;
	a&=b;
 
// инвертировать k-й бит числа a;
	b=1;
	b<<=k;
	a^=b;
}



Выделить подпоследовательность битов с номера k1 до k2 (k2>=k1).
 


unsigned __bits(32)	a;
unsigned __bits(32)	b;
unsigned __bits(32)	c;
unsigned __bits(8)	k1;
unsigned __bits(8)	k2;

unsigned __bits(8)	i;

void main()
{
	i=0;
	b=1;
	while (i<k2-k1)
	{
		b<<=1;
		b|=1;
		i++;
	}
	b<<=k1;
	c=a&b;

/*	более сишный вариант, по моему мнению, выглядел бы так
	for (i=k2-k1+1, b=1; --i; b<<=1, b|=1);
	c=a&(b<<=k1);
	но он не так прозрачен */
}

Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Я немножко подправил оформление Сашиного кода в целях повышения читабельности.
Саша - учти пожалуйста.
И спасибо за работу - проделанную и ту что вот-вот появится ...

40 бонусов - за качество и оперативность!!!
Михаил Долинский

Темы: 2072
Сообщений: 49883

Мой профиль
Лекция 3. Учебный процессор TCPU

План лекции

Ссылки на теорию
...Документация по процессору TCPU
..Инструкция по созданию кода в формате IntelHEX для процессора TCPU
..Инструкции по решению задач
..Инструкции по установке задач

Ресурсы
Система команд
..Команды пересылки данных
..Команды работы со стеком
..Команды передачи управления
..Арифметические операции
..Логические операции
..Другие команды
Стек
Пример 1
Пример 2

Понятие о заданиях
- на ассемблирование
- на дизассемблирование
- на разработку программ для TCPU
....HEX-программы
....TCPU-программы
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 9, 10, 11
Time:0,07