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

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

Мой профиль
Код функции для перевода числа из 8 бит в 16 (cbw)

unsigned __in __bits(8) x8;
unsigned __out __bits(16) x16;


//From 8 to 16
unsigned __bits(16) CBW(unsigned __bits(8) x8){
	x16 = 0;
	x16 = (x16 << 8) | x8;
	return x16;
}
//From 8 to 16

void main() {
	x16 = CBW(x8);
}


Был проверен на моделировании в HLCCAD. Перевод выполнен правильно.
Работаю над проверкой в арифметических задачах для CMPA.
Юрий Матафонов

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

Мой профиль


Юрий Матафонов:


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

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

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 можно глядя на текст такой программы.
Нарисованную схему тоже потом можно отправлять на тестирование.

Совсем круто, чтобы ИИ писал такую программу прямо с условия задачи. 


Экзамен\Индивидуальные задания\Проектирование цифровых устройств\Комбинационные схемы\5 - "Сумматор" 12579 Еременко Оксана, ПМ4, апрель 2005
в новом окне (Установлена: 26.12.2003)

http://dl.gsu.by/task.jsp?nid=2293170&cid=1335

unsigned __in __bits(16) A;
unsigned __in __bits(16) B;
unsigned __in __bits(1) C;
unsigned __out __bits(16) S;
unsigned __out __bits(1) P;


unsigned __bits(17) SUM(unsigned __bits(16) A, unsigned __bits(16) B, unsigned __bits(1) C0) {
   unsigned __bits(17) SUM;
   SUM = A + B + C0;
   return SUM;
}

void main() {
	S = SUM(A, B, C);
	P = SUM(A, B, C) >> 16;
}


Дешифратор
?

unsigned __in __bits(3) X;
unsigned __in __bits(1) CS;

unsigned __out __bits(8) Y;

unsigned __bits(8) DC(unsigned __bits(1) CS, unsigned __bits(3) X) {
	if (CS == 0)
		return 0;
	unsigned __bits(8) d;
	d = 1;
	d = d << X;
	return d;
}

void main() {
	Y = DC(CS, X);
}


Экзамен\Индивидуальные задания\Проектирование цифровых устройств\Обработка битов\6 - "Приоритетный дешифратор" 41250 Мохорев И., ПОИТ-36, март 2006
в новом окне (Установлена: 31.03.2006)

http://dl.gsu.by/task.jsp?nid=2293318&cid=1335

unsigned __in __bits(3) X;

unsigned __out __bits(8) Y;

unsigned __bits(8) DC(unsigned __bits(3) X) {
	unsigned __bits(8) d;
	d = 255;
	d = d >> (8-X);
	return d;
}

void main() {
	Y = DC(X);
}


Экзамен\Индивидуальные задания\С-TCPU\Программы по схемам\Обработка битов\16 - "Обратный шифратор" 83536 Юрий Кадетов
в новом окне (Установлена: 22.03.2009)

http://dl.gsu.by/task.jsp?nid=2291226&cid=1335

unsigned __in __bits(8) X;

unsigned __out __bits(3) Y;
unsigned __out __bits(1) G;

unsigned __bits(4) CD(unsigned __bits(8) X) {
	unsigned __bits(4) YG;
	unsigned __bits(3) Y;
	unsigned __bits(1) G;
	if (X != 0) 
		G = 1; 
	else { 
		G = 0; 
		return 0;
	}
	int i;
	i = 0;
	while (X != 1) {
		i++;
		X = X >> 1;
	}
	Y = i;
	YG = Y;
	YG = YG << 1;
	YG += G;
	return YG;
}

void main() {
	G = CD(X);
	Y = CD(X) >> 1;
}


Шифратор
?

unsigned __bits(4) CD(unsigned __bits(8) X) {
	unsigned __bits(4) YG;
	unsigned __bits(3) Y;
	unsigned __bits(1) G;
	if (X != 0) 
		G = 1; 
	else { 
		G = 0; 
		return 0;
	}
	int i;
	i = 0;
	while (!(X & 1)) {
		i++;
		X = X >> 1;
	}
	Y = i;
	YG = Y;
	YG = YG << 1;
	YG += G;
	return YG;
}

void main() {
	G = CD(X);
	Y = CD(X) >> 1;
}


Мультиплексор
?

unsigned __in __bits(8) X;
unsigned __in __bits(3) A;

unsigned __out __bits(1) Y;

unsigned __bits(1) MS(unsigned __bits(8) X, unsigned __bits(3) A) {
	return ((X >> A) & 1);
}

void main() {
	Y = MS(X, A);
}


Там где знак '?' я проверял вручную / не успел проверить. 


CBW

unsigned __in __bits(8) A;

unsigned __out __bits(16) B;

unsigned __bits(8) CBW(unsigned __bits(8) A) {
	return A;
}

void main() {
	B = CBW(A);
}

CWD

unsigned __in __bits(16) A;

unsigned __out __bits(32) B;

unsigned __bits(16) CWD(unsigned __bits(16) A) {
	return A;
}

void main() {
	B = CWD(A);
}

ISUB

int __in __bits(16) A;
int __in __bits(16) B;

int __out __bits(16) C;

int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {
	int __bits(16) C;
	C = A - B;
	return C;
}

void main() {
	C = ISUB(A,B);
}

IMUL

int __in __bits(16) A;
int __in __bits(16) B;

int __out __bits(32) C;

int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {
	int __bits(32) C;
	C = A * B;
	return C;
}

void main() {
	C = IMUL(A,B);
}

MUL

unsigned __in __bits(8) A;
unsigned __in __bits(8) B;

unsigned __out __bits(16) C;

unsigned __bits(16) MUL(unsigned __bits(8) A, unsigned __bits(8) B) {
	unsigned __bits(16) C;
	C = A * B;
	return C;
}

void main() {
	C = MUL(A,B);
}

IDIV

int __in __bits(32) A;
int __in __bits(32) B;

int __out __bits(16) C;

int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {
	int __bits(16) C;
	C = A / B;
	return C;
}

void main() {
	C = IDIV(A,B);
}

DIV

unsigned __in __bits(16) A;
unsigned __in __bits(16) B;

unsigned __out __bits(16) C;

unsigned __bits(16) DIV(unsigned __bits(16) A, unsigned __bits(16) B) {
	if (B == 0)
		return -1;
	return A/B;
}

void main() {
	C = DIV(A,B);
}

x32Tox16

unsigned __in __bits(32) A;

unsigned __out __bits(16) B;

unsigned __bits(16) x32Tox16(unsigned __bits(32) A) {
	return A;
}

void main() {
	B = x32Tox16(A);
}

CMP

unsigned __in __bits(8) A;
unsigned __in __bits(8) B;

int __in __bits(2) A;

int __bits(2) CMP(unsigned __bits(8) A, unsigned __bits(8) B) {
	if (A > B)
		return 1;
	if (A == B)
		return 0;
	if (A < B)
		return -1;
}

void main () {
	A = CMP(A,B);
}

ICMP

int __in __bits(32) A;
int __in __bits(32) B;

int __in __bits(2) A;

int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {
	if (A > B)
		return 1;
	if (A == B)
		return 0;
	if (A < B)
		return -1;
}

void main () {
	A = ICMP(A,B);
}

MSb8x2

unsigned __in __bits(8) Zero;
unsigned __in __bits(8) One;
unsigned __in __bits(1) A;

unsigned __out __bits(8) Y;

unsigned __bits(8) MSb8x2(unsigned __bits(8) Zero, unsigned __bits(8) One, unsigned __bits(1) A) {
	if (A)
		return One;
	else
		return Zero;
}

void main () {
	Y = MSb8x2(Zero, One, A);
}

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

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

Мой профиль


Юрий Матафонов:


Юрий Матафонов:


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



CBW

unsigned __in __bits(8) A;

unsigned __out __bits(16) B;

unsigned __bits(8) CBW(unsigned __bits(8) A) {
	return A;
}

void main() {
	B = CBW(A);
}

CWD

unsigned __in __bits(16) A;

unsigned __out __bits(32) B;

unsigned __bits(16) CWD(unsigned __bits(16) A) {
	return A;
}

void main() {
	B = CWD(A);
}

 

Лучше написать:
unsigned __bits(16) CBW(unsigned __bits(8) A){
return A;
}

Т.е. функция будет возвращать 16-битное значение.
Для CWD соответственно:
unsigned __bits(32) CWD(unsigned __bits(16) A){
return A;
}

Валерия Коваленко

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

Мой профиль
Оценка\Индивидуальные задания\По выбору\Проектирование - подготовка к контрольному срезу\Сам-п8 - "Задача №8" 31438 Литовченко Мария
https://dl.gsu.by/task.jsp?nid=2301695&cid=1336

int __in __bits(8) A9;
int __in __bits(8) B7;
int __in __bits(16) X;
int __in __bits(16) Y;
int __out __bits(16) RES;

unsigned __bits(16) CBW(unsigned __bits(8) A) {return A;}
unsigned __bits(32) CWD(unsigned __bits(16) A) {return A;}
int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {int __bits(16) C;C = A - B; return C;}
int __bits(16)  SUM(int __bits(16) A, int __bits(16) B) {int __bits(16) C;C = A + B; return C;}
int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {int __bits(32) C;C = A * B; return C;}
int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {int __bits(16) C;C = A / B; return C;}
int __bits(2)  ICMP(int __bits(32) A, int __bits(32) B) {if (A > B)return 1;if (A == B)return 0;if (A < B)return -1;}
unsigned __bits(8) MSb8x2(unsigned __bits(8) Zero, unsigned __bits(8) One, unsigned __bits(1) A) {if (A)return One;elsereturn Zero;}

void main(){
	int __out __bits(16) a916=CBW(A9);
	int __out __bits(16) b716=CBW(B7);
	int __out __bits(32) a932=CWD(a916);
	int __out __bits(32) b732=CWD(b716);
	int __out __bits(32) x32=CWD(X);
	int __out __bits(32) y32=CWD(Y);
	int __out __bits(32) s=CWD((x*a9-b7));

	(x*a9)=IMUL(X,a916);
	(x*a9-b7)=ISUB((x*a9),b716);
	(y+x*a9-b7)=SUM((x*a9-b7),Y);
	res1=IDIV(s,y32);

	(y+a9)=SUM(Y,a916);
	((y+a9)*x)=IMUL((y+a9),X);
	((y+a9)*x/y)=IDIV(((y+a9)*x),y32);
	res2=ISUB(((y+a9)*x/y),b716);

	(x*y)=IMUL(X,Y);
	 m=ICMP((x*y),);
}

Алина Школьникова

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

Мой профиль
Командные олимпиады\Архитектура вычислительных систем\Команды ММХ\Контрольный срез (Пример 6)\Базовый\П - "Задача №6" 31436 Литовченко Мария
http://dl.gsu.by/task.jsp?nid=2348459&cid=1336
int __in __bits(16) a;
int __in __bits(16) b;
int __in __bits(8) c;
int __in __bits(8) d;

int __out __bits(16) c16;
int __out __bits(16) d16;
int __out __bits(32) a32;
int __out __bits(32) b32;
int __out __bits(32) c32;
int __out __bits(32) d32;
int __out __bits(16) RES;

unsigned __bits(16) CBW(unsigned __bits(8) A) {
	return A;
}

unsigned __bits(32) CWD(unsigned __bits(16) A) {
	return A;
}
int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {
	int __bits(16) C;
	C = A - B;
	return C;
}
int __bits(16) SUM(int __bits(16) A, int __bits(16) B) {
	int __bits(16) C;
	C = A + B;
	return C;
}
int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {
	int __bits(32) C;
	C = A * B;
	return C;
}
int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {
	int __bits(16) C;
	C = A / B;
	return C;
}
int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {
	if (A > B)
	return 1;
	if (A == B)
	return 0;
	if (A < B)
	return -1;
}

void main(){
	c16=CBW(c);
	d16=CBW(d);
	a32=CWD(a);
	b32=CWD(b);
	c32=CWD(c16);
	d32=CWD(d16);

	int __bits(16) -a=ISUB(0,a);
	int __bits(32) ab=IMUL(-a,b);
	int __bits(32) cd=IMUL(c,d);
	int __bits(16) dd=ab;
	int __bits(16) cc=cd;
	int __bits(16) abc=ISUB(ab,cc);
	int __bits(16) ac=IDIV(a32,c32);
	int __bits(16) bd=IDIV(b32,d32);
	int __bits(16) sm1=SUM(abd,ac);
	int __bits() sm2=SUM(sm1,bd);
	r1=sm2;
	ab=SUM(a,b);
	aab=IMUL(ab,a);
	pr1=IMUL(aab,b);
	int __bits(16) pp1=pr1;
	pr2=IMUL(pp1,c16);
	int __bits(16) pp2=pr2;
	prz3=IMUL(pp2,d16);
	dc=ISUB(c16,d16);

}

Татьяна Пыршина

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

Мой профиль
Оценка\Индивидуальные задания\По выбору\Проектирование - подготовка к контрольному срезу\Сам-п1 - "Задача №1" 31431 Литовченко Мария
http://dl.gsu.by/task.jsp?nid=2301688&cid=1336


int __in __bits(8) c;
int __in __bits(8) d;
int __in __bits(16) a;
int __in __bits(16) b;
int __out __bits(16) res;

unsigned __bits(16) CBW(unsigned __bits(8) A) {return A;}
unsigned __bits(32) CWD(unsigned __bits(16) A) {return A;}
int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {int __bits(16) C;C = A - B;return C;}
int __bits(16) SUM (int __bits(16) A, int __bits(16) B) {int __bits(16) C;C = A + B;return C;}
int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {int __bits(32) C;C = A * B;return C;}
int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {int __bits(16) C;C = A / B;return C;}
int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {if (A > B)return 1;if (A == B)return 0;if (A < B)return -1;}
unsigned __bits(8) MSb8x2(unsigned __bits(8) Zero, unsigned __bits(8) One, unsigned __bits(1) A) {if (A)return One;else return Zero;
}

void main(){
int __out __bits (16) c16=cbw(c);
int __out __bits (16) d16=cbw(d);
int __out __bits (32) a32=cwd(a);
int __out __bits (32) b32=cwd(b);
int __out __bits (32) c32=cwb(c16);


int __out __bits (16) a/b=idiv(a32,b32);
int __out __bits (16) a/b+c=sum(
}
Виктория Богомазова

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

Мой профиль
Богомазова ПО-21
Сначала делала таким образом ветки из Задания 11
int __bits(2) ICMP(int __bits(32) xy32, int __bits(32) nul32) {

if (xy32 > nul32)
return 1;
if (xy32 == nul32)
return 0;
if (xy32 < nul32)
return 0;
}



unsigned __bits(8) MSb8x2(unsigned __bits(8) Zero, unsigned __bits(8) One, unsigned __bits(1) A) {
if (A)
return One;
else
return Zero;
}

unsigned __bits(16) CWD;
unsigned __bits(8) CBW;
int __bits(16) IDIV;
int __bits(16) ISUB;
int __bits(32) IMUL;
int __bits(8) SUM;

void main() {
A916 = CBW(A98);
B716 = CBW(B78);
s16 = ISUB(A916,B716);
s32 = CWD(s16);
xy32 = IMUL(x16,y16);
s132 = SUM(s32,xy32);
x32 = CBW(x16);
r116 = IDIV(s132,x32);


s28 = SUM(A98,B78);
x32 = CWD(x16);
y32 = CWd(y16);
d216 = IDIV(x32,y32);
s216 = CBW(s28);
pr232 = iMUL(s216,d216);
r216 = iSUB(pr2[15-0],x16);
nul32 = 0;

A = ICMP(xy32,nul32);

res = MSb8x2(r116, r216, A);
}

Потом предложили делать другим образом(не доделала):
int__in __bits(8) A9;
int__in __bits(8) B7;
int__in __bits(16) X;
int__in __bits(16) Y;
int__out __bits(16) RES;

unsigned __bits(16) CBW(unsigned __bits(8) A) {return A;}
unsigned __bits(32) CWD(unsigned __bits(16) A) {return A;}
int __bits(16) ISUB(int_bits(16) A, int __bits(16) B) {}
Александр Сохор

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

Мой профиль
Сохор ПО-21
Сначала делал данные ветки из задания "Задача 12"

https://dl.gsu.by/task.jsp?nid=2301699&cid=1336




int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {
if (A > B)
return 0;
if (A == B)
return 0;
if (A < B)
return 1;
}


unsigned __bits(8) MSb8x2(unsigned __bits(16) Zero, unsigned __bits(16) One, unsigned __bits(1) A) {
if (A)
return One;
else
return Zero;
}

void main(){
A916 = CBW(A98)
B716 = CBW(B78)
X32 = CWD(X16)
Y32 = CWD(Y16)
ab32=IMUL(A916,B716)
raz16= ISUB(ab[15-0],X16)
raz32 = CWD(raz16)
summa32 = SUM(raz32,Y32)
rez116 = IDIV(summa32, X32)

const16 = 1
summ16 = SUM(A916,const)
t32 = IMUL(summ16,X16)
B732=CWD(B716)
del16 = IDIV(B732, Y32)
del32 = CWD(del16)
vet32 = SUM(t32, del32)
res216 = ISUB(vet[15-0],y16)
ds32 = imul(X16,Y16)

A = ICMP(ds32,0);

Y = MSb8x2(res1_16, res2_16, A);

}

Потом предложили делать другим образом(задача недоделана)




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

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

Мой профиль
Командные олимпиады\Архитектура вычислительных систем\Процессоры баз данных\Контрольный срез (Пример 9)\Базовый\С - "Задача №9" 101452 Володин Валерий
в новом окне (Установлена: 23.10.2010)

https://dl.gsu.by/task.jsp?nid=2348683&cid=1336

int __in __bits(16) X;
int __in __bits(16) Y;
int	__in __bits(8) A9;
int __in __bits(8) B7;

int __out __bits(16) RES;

int __bits(16) CBW(int __bits(8) A){
	return A;
}

int __bits(32) CWD(int __bits(16) A){
	return A;
}

int	__bits(16) ISUB(int __bits(16) A, int __bits(16) B){
	int __bits(16) C;
	C=A-B;
	return C;
}

int __bits(32) IMUL(int __bits(16) A, int __bits(16) B){
	int __bits(32) C;
	C=A*B;
	return C;
}

int	__bits(16) IDIV(int __bits(32) A, int __bits(32) B){
	int __bits(16) C;
	C=A/B;
	return C;
}

int __bits(16) SUM(int __bits(16) A, int __bits(16) B){
	int __bits(16) C;
	C=A+B;
	return C;
}

/*int __bits(2) ICMP(int __bits(32) A, int __bits(32)	B){
	if(A>B) return 1;
	if(A==B) return 0;
	if(A<B) return -1;
}*/

int __bits(4) ICMP(int __bits(32) A, int __bits(32) B){
	int __bits(4) C=0;
	if(A>B) C++;
	C=C<<1;
	if(A<B) C++;
	C=C<<1;
	if(A==B) C++;
	return C;
}

int __bits(16) MS(int __bits(1) A, int __bits(16) X1, int __bits(16) X2){
	if(A) return X1;
	else return X2;
}

void main(){
	int __bits(16) vetv1;
	int __bits(16) vetv2;

	int __bits(16) A=CBW(A9);
	int	__bits(16) B=CBW(B7);

	int __bits(32) XX=CWD(X);
	int __bits(32) YY=CWD(Y);
	int __bits(32) AA=CWD(A);
	int __bits(32) BB=CWD(B);
	//--------------------------
	vetv1=ISUB(Y,X);
	vetv1=SUM(vetv1,A);
	int __bits(32) mul11=IMUL(B,Y);
	vetv1=ISUB(vetv1,mul11);
	int __bits(32) v1=CWD(vetv1);
	v1=IDIV(v1,XX);
	vetv1=v1;
	//---------------------------
	vetv2=SUM(Y,X);
	vetv2=IMUL(vetv2,A);
	vetv2=IDIV(vetv2,BB);
	vetv2=ISUB(vetv2,Y);

	int __bits(32) p;
	p=IMUL(X,Y);
	int	__bits(1) f;
	int __bits(4) cmp;
	cmp=ICMP(p,0);
	if(cmp&1) f=1;
	else f=0;
	RES=MS(f,vetv2,vetv1);
}


Код не работает) И ICMP описан по другому.
Даниил Акунец

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

Мой профиль
Лучшие 20 Обсудить задачу в форуме (-): Экзамен\Индивидуальные задания\Контрольные срезы\C-МПА\Сам-с13 - "Задача №13" 101456 Володин Валерий
в новом окне (Установлена: 23.10.2010)
https://dl.gsu.by/task.jsp?nid=2290680&cid=1335

Для каждой функции в получаемых и возвращаемых был изменён тип данных на int. MSb8x2 был сделан для 16 битов(просто изменена размерность для каждого значения). ICMP был изменён под условие конкретной задачи, т.к. неправильно выполнялся MSb16x2

int __in __bits(8) A9;
int __in __bits(8) B7;
int __in __bits(16) X;
int __in __bits(16) Y;
int __out __bits(16) RES;

int __bits(16) CBW(int __bits(8) A) {return A;}
int __bits(32) CWD(int __bits(16) A) {return A;}
int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {int __bits(16) C;C = A - B; return C;}
int __bits(16) SUM(int __bits(16) A, int __bits(16) B) {int __bits(16) C;C = A + B; return C;}
int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {int __bits(32) C;C = A * B; return C;}
int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {int __bits(16) C;C = A / B; return C;}
int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {if (A < B)return 1; else return 0;}
int __bits(16) MSb16x2(int __bits(16) Zero, int __bits(16) One, int __bits(1) A) {if (A)return One; else return Zero;}

void main(){
int __out __bits(16) a916=CBW(A9);
int __out __bits(16) b716=CBW(B7);
int __out __bits(32) a932=CWD(a916);
int __out __bits(32) b732=CWD(b716);
int __out __bits(32) x32=CWD(X);
int __out __bits(32) y32=CWD(Y);

int __out __bits(16) v11;
v11=ISUB(X,Y);

int __out __bits(32) v12;
v12=IMUL(v11,a916);

int __out __bits(16) v13;
v13=SUM(v12,b716);

int __out __bits(16) res1;
res1=IDIV(v13,y32);

int __out __bits(16) v21;
v21=SUM(Y,X);

int __out __bits(16) v22;
v22=IDIV(v21,a932);

int __out __bits(16) v23;
v23 = ISUB(v22,b716);

int __out __bits(32) res2;
res2=IMUL(v23, X);

int __out __bits(32) if1;
int __out __bits(32) if2 = 0;
int __out __bits(2) if0;

if1 = IMUL(X,Y);
if0 = ICMP(if1,if2);
RES = MSb16x2(res1,res2,if0);
}


Решение прошло в CMPA, в проектировании пишет что нельзя генерировать схемы

Пропуски 19.09 и 9.10
Дима Козубовский

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

Мой профиль
Козубовский Дима, ИТП-31. Пропуск за 06.11.23
http://dl.gsu.by/task.jsp?nid=2290678&cid=1335

int __in __bits(8) A9;
int __in __bits(8) B7;
int __in __bits(16) X;
int __in __bits(16) Y;
int __out __bits(16) RES;

int __bits(16) CBW(int __bits(8) A) {return A;}
int __bits(32) CWD(int __bits(16) A) {return A;}
int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {
int __bits(16) C;
C = A - B;
return C;
}
int __bits(16) SUM(int __bits(16) A, int __bits(16) B) {
int __bits(16) C;
C = A + B;
return C;
}
int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {
int __bits(32) C;
C = A * B;
return C;
}
int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {
int __bits(16) C;
C = A / B;
return C;
}
int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {
if (IMUL(X,Y)<0) return 0;
else return 1;
}
int __bits(16) MSb8x2(int __bits(16) Zero, int __bits(16) One, int __bits(1) A) {
if (A)return One;
else return Zero;
}

void main(){
int  __bits(16) a916=CBW(A9);
int  __bits(16) b716=CBW(B7);
int  __bits(32) a932=CWD(a916);
int  __bits(32) b732=CWD(b716);
int  __bits(32) x32=CWD(X);
int  __bits(32) y32=CWD(Y);
int mul1=IMUL(X,Y);
int sub1=ISUB(a932,b732);
int sum1=SUM(sub1,mul1);
int div1=IDIV(sum1,x32);

int sum2=SUM(b716,a916);
int mul2=IMUL(sum2,X);
int div2=IDIV(mul2,y32);
int sub2=ISUB(div2,x32);
int cmp=ICMP(mul1,0);
RES=MSb8x2(sub2,div1,cmp);
}

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

Темы: 2010
Сообщений: 47872

Мой профиль


Даниил Акунец:

Решение прошло в CMPA, в проектировании пишет что нельзя генерировать схемы  

В Обучение - С-МПА Добавлена Папка "HLCCAD from C-MPA - arithm"
там все 30 задач и они принимаются только если схема была сгенерирована из C-MPA программы
Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль


Даниил Акунец:

Лучшие 20 Обсудить задачу в форуме (-): Экзамен\Индивидуальные задания\Контрольные срезы\C-МПА\Сам-с13 - "Задача №13" 101456 Володин Валерий
в новом окне (Установлена: 23.10.2010)
https://dl.gsu.by/task.jsp?nid=2290680&cid=1335  


Предложения по улучшению кода

int __bits(2) ICMP(int __bits(32) A, int __bits(32) B) {if (A < B)return 1; else return 0;}

У ICMP должен быть трёхбитный выход
int __bits(3) ICMP(int __bits(32) A, int __bits(32) B)
И возвращаться должен один из трёх вариантов
100
010
001

А после вызова ICMP установка трёх его выходов, например
С  = ICMP(A,B);
GT = C==4;
EQ = C==2;
LT = C==1;


вместо

int __out __bits(16) v11;
v11=ISUB(X,Y);


предлагаю писать

int __out __bits(16) v11=ISUB(X,Y); 


А ещё надо проверить, может __out не обязательно писать для всех промежуточных переменных.

Также в библиотеку функций желательно добавить
SIGN(x)
ABS(x)
FACT(x) (для значений x от 0 до 15)

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

Темы: 2010
Сообщений: 47872

Мой профиль


Евгений Яковцев:

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

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

Мой профиль
Командные олимпиады\Микропрограммирование на С-МПА\Контрольный срез (Пример 1)\Базовый\С - "Задача №1" 101444 Илясов Артем
в новом окне (Установлена: 23.10.2010)

https://dl.gsu.by/task.jsp?nid=2285137&cid=1335

int __in __bits(8) c;
int __in __bits(8) d;
int __in __bits(16) a;
int __in __bits(16) b;

int __out __bits(16) RES;

unsigned __bits(16) CBW(unsigned __bits(8) A) {return A;}
unsigned __bits(32) CWD(unsigned __bits(16) A) {return A;}
int __bits(16) ISUB(int __bits(16) A, int __bits(16) B) {return A-B;}
int __bits(32) IMUL(int __bits(16) A, int __bits(16) B) {return A*B;}
int __bits(16) IDIV(int __bits(32) A, int __bits(32) B) {return A/B;}
unsigned __bits(16) x32Tox16(unsigned __bits(32) A) {return A;}
unsigned __bits(3) ICMP(int __bits(32) A, int __bits(32) B) {return (A > B) ? 4 : (A == B) ? 2 : 1;}
unsigned __bits(16) MSb16x2(unsigned __bits(16) Zero, unsigned __bits(16) One, unsigned __bits(1) A) {return A ? One : Zero;}
unsigned __bits(16) SUM(unsigned __bits(16) A, unsigned __bits(16) B) {return A+B;}

void main() {
	int __bits(16) One;
	int __bits(16) Zero;
	unsigned __bits(1) A;
	int __bits(16) c16 = CBW(c);
	int __bits(16) d16 = CBW(d);
	int __bits(16) a32 = CWD(a);
	int __bits(16) b32 = CWD(b);
	int __bits(16) c32 = CWD(c16);
	int __bits(16) d32 = CWD(d16);
	

	One = ISUB(SUM(IDIV(a32,b32),c16),x32Tox16(IMUL(d16,a)));
	Zero = ISUB(b,x32Tox16(IMUL(SUM(c16,IDIV(a32,d32)),b)));

	A = ICMP(IMUL(a,d16),0);

	RES = MSb16x2(Zero, One, A);
}

 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, 4, 5, 6, 7, ... 25, 26, 27
Time:0,156