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

Темы: 7
Сообщений: 2186

Мой профиль


Александр Дудинский:

Здравствуйте, я занимался разработкой мультиплексора в C-MPA для обучения ИИ бота. Задача состоит в том, что на выход подаётся a+b+c+d, если a>b; в остальных случаях на выход подаётся a-b-c-d.
Код программы:

unsigned __in __bits(16) a=10;
unsigned __in __bits(16) b=1;
unsigned __in __bits(8) c=3;
unsigned __in __bits(8) d=4;

unsigned __out __bits(16) RES;

unsigned __bits(16) ms(unsigned __bits(1) A, unsigned __bits(16) X[2]){
	unsigned __bits(16) otvet;
	switch(A){
		case 0:	otvet=X[0]; break;
		case 1: otvet=X[1]; break;
	}
	return otvet;
}

void main(){
	unsigned __bits(1) A;
	unsigned __bits(16) X[2];

	X[0]=a+b+c+d;
	X[1]=a-b-c-d;

	if(a>b) A=1;
	else A=0;
	RES=ms(A,X[2]);
}


Выдаёт ошибку на 11-ой строке: This variable is not array: X.
По сути, проблема состоит в передаче массива в функцию. 

Передача массивов в функцию не работает, но можно так:
unsigned __bits(16) ms(unsigned __bits(1) A, unsigned __bits(16) X0, unsigned __bits(16) X1)

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

Темы: 1984
Сообщений: 47236

Мой профиль
Получается есть два рабочих варианта

unsigned __bits(16) MS(unsigned __bits(3) A, 
                       unsigned __bits(16) X0, 
                       unsigned __bits(16) X1,
                       unsigned __bits(16) X2
                       ...
                      )
       ...
       if (A==0) MS = X0;
       if (A==1) MS = X1;
       if (A==2) MS = X2;
       ...

и когда X передаётся как 2^A-битный вектор (с выделением сдвигами отдельных элементов).
Наверно первый удобнее.

для арифметических схем нужно ещё реализовать
x16=CBW(x8) 
x32=CWD(x16)
s16=SUM(A16,B16)
s16=ISUB(A16,B16)
p32=iMUL(A16,B16) 
d16=iDIV(A32,B16)
x16=x32                 // скорей всего уже правильно работает
R16=MS(A1,X16_0,X16_1)

Тогда схема условного арифметического выражения реализуется в С-МПА
как последовательность этих операторов 
в порядке вычислений
и с правильными названиями переменных, чтобы передавать сигналы 
с верхних блоков в нижние (в программе)
как с левых на правые (в схеме)


Для реализации всех остальных схем нужно
сделать также блоки
DC
CD
MS
(Матафонов Юра, ПИ-21 уже занимается)
Тогда для того, чтобы добиться от ИИ помощи в генерации схем для HLCCAD,
достаточно научить его писать С-МПА программы, вызывающие такие блоки
в нужной последовательности и правильно называя переменные.

Программы можно будет проверять, автоматически генерируя схемы
и отправляя их на тестирование.

Рисовать схему в HLCCAD можно глядя на текст такой программы.
Нарисованную схему тоже потом можно отправлять на тестирование.

Совсем круто, чтобы ИИ писал такую программу прямо с условия задачи.
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 24, 25, 26
Time:0,038