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

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

Мой профиль


Роман Мицура:

unsigned __in __bits(8) A = 255;
unsigned __in __bits(8) B = 157;
unsigned __in __bits(8) C = 0;
unsigned __in __bits(8) D = 148;

unsigned __out __bits(8) E;

void main(){
	int	k1,k2,k3,k4;
	int sred,sred1;
	sred = A;
	sred = sred + B;
	sred = sred + C;
	sred = sred + D;
	sred = sred/4;
	sred1 = (A+B+C+D)/4;
    k1 = A - sred;
	k2 = B - sred;
    k3 = C - sred;
	k4 = D - sred;
	if(k1<0)
	  k1 = k1*(-1);
	if(k2<0)
	  k2 = k2*(-1);
	if(k3<0)
	  k3 = k3*(-1);
	if(k4<0)
	  k4 = k4*(-1);
	if((k1>=k2)&&(k1>=k3)&&(k1>=k4))
	  E = k1;
    if((k2>=k1)&&(k2>=k3)&&(k2>=k4))
	  E = k2;
    if((k3>=k2)&&(k3>=k1)&&(k3>=k4))
	  E = k3;
    if((k4>=k2)&&(k4>=k3)&&(k4>=k1))
	  E = k4;
}

sred считается правильно, sred1 не правильно 

Когда складываются 8-битные A+B+C+D происходит переполнение промежуточных вычислений, т.к. результат не помещается в 8 бит.
Можно так:
	sred = A;
	sred += B;
	sred += C;
	sred += D;

Игорь Коршунов

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

Мой профиль


Игорь Коржов:

unsigned __in __bits(1) x1 = 1;
unsigned __in __bits(1) x2 = 1;
unsigned __in __bits(1) x3 = 0;
unsigned __in __bits(1) x4 = 1;
unsigned __out __bits(1) y1;
unsigned __out __bits(1) y2;
unsigned __out __bits(1) y3;
unsigned __out __bits(1) y4;

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

Если просто отрицать значения через ~ то условие работает неправильно
Если создать дополнительные переменные то все будет работать
Если работать просто с & то тоже работает неправильно
unsigned __in __bits(1) x1 = 1;
unsigned __in __bits(1) x2 = 1;
unsigned __in __bits(1) x3 = 0;
unsigned __in __bits(1) x4 = 1;
unsigned __out __bits(1) y1;
unsigned __out __bits(1) y2;
unsigned __out __bits(1) y3;
unsigned __out __bits(1) y4;

void main(){
   unsigned __in __bits(1) x11 = ~x1;
   unsigned __in __bits(1) x22 = ~x2;
   unsigned __in __bits(1) x33 = ~x3;
   unsigned __in __bits(1) x44 = ~x4;
   if (x11 && x22 && x33 && x44) {
	y1 = 0;
	y2 = 1;
	y3 = 0;
	y4 = 0;
   }
}
 

Результат ~x1 записывается в промежуточную переменную с размерностью больше 1-ого бита поэтому инвертирование не работает как отрицание. Но в Си есть специальный оператор отрицания !. Правильно так:
   if (!x1 && !x2 && !x3 && !x4) {

Игорь Коршунов

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

Мой профиль


Арман Сорокин:

Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\26 сентября\Проектирование\Простые устройства с памятью\2 - "Арифметика" (53810)
http://dl.gsu.by/task.jsp?nid=2240401&cid=1282

14.10 16:52 2. Арифметика 0 / 1 Ошибка: Несовпадение RES:00000001=10 [9 ns] DelTA3 at NIT8 HLCCAD project

unsigned __in __bits(2) A = 1;
unsigned __in __bits(2) B = 2;
unsigned __in __bits(2) C = 1;

unsigned __out __bits(8) RES;

unsigned __bits(8) mem;

void main()
{
  if ((A * B) < (C + 1))
  {
    mem = 0;
    RES = 0;
  }
  else if ((A * B) > (C + 1))
  {
    mem = A * B - C;
	RES = mem;
  }
  else
  {
    RES = mem;
  }
}
 

В самом начале программы нужно сохранить значения контактов во внутренних переменных. И в самой программе работать только с ними. Это предотвратит некорректную работу программы, когда входы меняются посреди вычисления логического выражения внутри if. См. также: http://dl.gsu.by/NForum/posts/topicshow/46.dl?postid=3646#3646
Правильно так:
unsigned __in __bits(2) A;
unsigned __in __bits(2) B;
unsigned __in __bits(2) C;

unsigned __out __bits(8) RES;

unsigned __bits(8) mem;

void main()
{
	unsigned __bits(2) A1 = A;
	unsigned __bits(2) B1 = B;
	unsigned __bits(2) C1 = C;

	if ((A1 * B1) < (C1 + 1))
	{
		mem = 0;
		RES = 0;
	}
	else if ((A1 * B1) > (C1 + 1))
	{
    	mem = A1 * B1 - C1;
		RES = mem;
	}
	else
	{
	    RES = mem;
	}
}

Игорь Коршунов

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

Мой профиль


Николай Афанасенко :

Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\12 сентября \Программирование\Цифры числа\3 - "Перевернутое число" (44766)
http://dl.gsu.by/task.jsp?nid=2239965&cid=1282

int __in __bits(16) x ;

int __out __bits(16) y;

void main(){
    int start = x;
    int fin = 0;
    while(start >= 1){
        int digit = start %10;
        fin += digit;
        fin *=10;
		start /=10;
    }
    fin /=10;
    y = fin;
}


Пишет ошибка в 1 тесте, хотя при проверке всех тестов ответ сходиться 

Было отослано решение в котором инициализируется входная переменная:
int __in __bits(16) x = 123;

int __out __bits(16) y;

void main(){
    int start = x;
    int fin = 0;
    while(start >= 1){
        int digit = start %10;
        fin += digit;
        fin *=10;
		start /=10;
    }
    fin /=10;
    y = fin;
}

Так делать можно только при отладке. При отсылке нужно убирать инициализацию входов.
Даниил Коханов

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

Мой профиль
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Командные олимпиады\Архитектура ПЦОС на примере TMS320c30 \Контрольный срез (Пример 7)\Базовый\С - "Задача №7" (101450)
http://dl.gsu.by/task.jsp?nid=2244910&cid=1282

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;


  int sign(int x){
    if(x > 0) return (1);
   	if(x == 0) return (0);
 	if(x < 0) return (-1);
 }
void main(){
  if(a == 4) RES = c/a+b/d-a*c;
  if(a != 4) RES = (a+b-(sign(c*d)))/a;
}


1.11 09:52 С. Задача №7 0 / 100 [test 1]: Тест не прошел: res sgn[2]: 5. DelTA3 at NIT8 Winter mpc

a = 5
b = 24
c = 255 = -1
d = 249 = -7

В Winter получилось тоже 5. Решение не принимается.
Даниил Коханов

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

Мой профиль
Отправил еще раз прошло
Михаил Долинский

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

Мой профиль


Даниил Коханов:

Отправил еще раз прошло 


Оно не потому прошло, что ещё раз отправил, а потому, что ПРИСВАИВАНИЯ начальных значений убрал

Вот текст программы, которая не проходила
int __in __bits(8) c=4;
int __in __bits(8) d=6;
int __in __bits(16) a=8;
int __in __bits(16) b=3;
int __out __bits(16) RES;


  int sign(int x){
    if(x > 0) return (1);
   	if(x == 0) return (0);
 	if(x < 0) return (-1);
 }
void main(){
  if(a == 4) RES = c/a+b/d-a*c;
  if(a != 4) RES = (a+b-sign(c*d))/a;
}

Евгений Бова

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

Мой профиль
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Экзамен\Контроль практики\Программирование\8\Add-8\Проектирование\3 - "Старшая единица" (83061)
http://dl.gsu.by/task.jsp?nid=2249080&cid=1282

03.11.2022 11:41:36 03.11.2022 11:41:44 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица 0 Ошибка: Несовпадение Y:2097152=1 [18 ns] Project.prd DelTA3 at NIT0
03.11.2022 11:39:52 03.11.2022 11:39:57 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица (программа) 100 Все тесты пройдены (основной + секретный). src.mpc DelTA3 at NIT8



Не проходит задача. У меня ответ выдает правильный.

Ошибка: Несовпадение Y:2097152=1 [18 ns]
; Test 6
Set 1,10 on X at 15001
Diff 1,10 on Y at 18000

unsigned __in __bits(32) X;

unsigned __out __bits(32) Y;

void main() {
  unsigned __bits(32) a = X;
  unsigned __bits(32) b = 0;
  unsigned __bits(32) mask = 0x01;
  for (int i = 0; i < 32; i++) {
    if ((a & (mask << (31 - i))) == (mask << (31 - i))) {
	  b |= (mask << (31 - i));
	  break;
	} 
  }
  Y = b;
}

Игорь Коршунов

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

Мой профиль


Евгений Бова:

Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Экзамен\Контроль практики\Программирование\8\Add-8\Проектирование\3 - "Старшая единица" (83061)
http://dl.gsu.by/task.jsp?nid=2249080&cid=1282

03.11.2022 11:41:36 03.11.2022 11:41:44 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица 0 Ошибка: Несовпадение Y:2097152=1 [18 ns] Project.prd DelTA3 at NIT0
03.11.2022 11:39:52 03.11.2022 11:39:57 Бова Евгений Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022 3. Старшая единица (программа) 100 Все тесты пройдены (основной + секретный). src.mpc DelTA3 at NIT8


Не проходит задача. У меня ответ выдает правильный.

Ошибка: Несовпадение Y:2097152=1 [18 ns]
; Test 6
Set 1,10 on X at 15001
Diff 1,10 on Y at 18000

unsigned __in __bits(32) X;

unsigned __out __bits(32) Y;

void main() {
  unsigned __bits(32) a = X;
  unsigned __bits(32) b = 0;
  unsigned __bits(32) mask = 0x01;
  for (int i = 0; i < 32; i++) {
    if ((a & (mask << (31 - i))) == (mask << (31 - i))) {
	  b |= (mask << (31 - i));
	  break;
	} 
  }
  Y = b;
}
 

Схема не успевает отработать за интервал времени указанный в тесте, т.к. много инструкций внутри цикла.
Вот пример более быстрого кода:
unsigned __in __bits(32) X;
unsigned __out __bits(32) Y;
void main() {
	unsigned __bits(32) tx = X; // нужно чтобы не зациклится, если во время цикла поменяется X
    if (tx)
    {
    	unsigned __bits(32) mask = 0x80000000;
    	for(;;)
    	{
    		if (tx & mask)
    		{
    			Y = tx & mask;
    			break;
    		}
    		mask >>= 1;
    	}
    }
    else Y = 0;
}

Игорь Коржов

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

Мой профиль
Падает программа CMPA при этом коде:

unsigned __in __bits(4) X = 3 ;
unsigned __out __bits(4) Y = 0;


void main()	{
  int size = 4;
 unsigned __bits(4) sss = 3 ;
  unsigned __bits(4) var = 0;
  int count = 0;
  for(int i = 0; i < size; i++) {
    if ( (sss &(1<<i)) != 0)
      count++;
  }

  for(i = 0; i <= count; i++) {


 }
}

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

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

Мой профиль
На вот этой строке

  if ( (sss &(1<<i)) != 0)

Alina Yasmine

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

Мой профиль
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Обучение\Подготовка к контрольному срезу\Ассемблер\1 - "Подключение тестовых файлов в WInter" (135564)
http://dl.gsu.by/task.jsp?nid=2245550&cid=1282

не проходит тестирование
сгенерированная схема по этой программе

int __in __bits(1) x1;
int __in __bits(1) x2;
int __in __bits(1) x3;
int __in __bits(1) x4;
int __out __bits(1) y1;
int __out __bits(1) y2;
int __out __bits(1) y3;
int __out __bits(1) y4;

void main()
{
  y4=~x4&x3&~x2&~x1|x4&x3&~x2&x1|x4&~x3&x2&x1|~x4&~x3&x2&~x1;
  y3=x3&x1|x2&x1|x3&x2;
  y2=~x4&x1|x3&x1;
  y1=~x4 | x3| ~x2 & x1 | x2 & ~x1;
}


и это тоже

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()
{
  unsigned __bits(1) tx1,tx2,tx3,tx4;
  tx1=x1;
  tx2=x2;
  tx3=x3;
  tx4=x4;
  y4=~tx4&tx3&~tx2&~tx1 | tx4&tx3&~tx2&tx1 | tx4&~tx3&tx2&tx1 | ~tx4&~tx3&tx2&~tx1;
  y3=tx3&tx1 | tx2&tx1 | tx3&tx2;
  y2=~tx4&tx1 | tx3&tx1;
  y1=~tx4 | tx3 | ~tx2 & tx1 | tx2 & ~tx1;
}

Александр Ямром

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

Мой профиль
Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\24 октября\Программирование\Обработка строк (простая)\10 - "Поменять регистры" (44325)
http://dl.gsu.by/task.jsp?nid=2241492&cid=1282

________________________________________________________
char in1[255];

char out1[255];
int main() {
char str[255];
for (int i = 0; in1[i] != '#'; i++) {
if (in1[i] >= 65 && in1[i] <= 90) {
str[i] = in1[i] + 32;
} else {
str[i] = in1[i] - 32;
}
}
out1 = str;
}

_______________________________________________
Во вкладке "переменная" out1 имеет нужно значение, но тест не проходит
Игорь Коршунов

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

Мой профиль


Александр Ямром:

Архитектура вычислительных систем (ПО4/ИТ3/ПИ2) - 2022
Контрольные срезы\24 октября\Программирование\Обработка строк (простая)\10 - "Поменять регистры" (44325)
http://dl.gsu.by/task.jsp?nid=2241492&cid=1282

________________________________________________________
char in1[255];

char out1[255];
int main() {
char str[255];
for (int i = 0; in1[i] != '#'; i++) {
if (in1[i] >= 65 && in1[i] <= 90) {
str[i] = in1[i] + 32;
} else {
str[i] = in1[i] - 32;
}
}
out1 = str;
}

_______________________________________________
Во вкладке "переменная" out1 имеет нужно значение, но тест не проходит 

В конце out1 нет '#'. В условии в примере показано, что завершающий символ должен быть и в выходной строке.

Вот тест:

[abcdef]
Cycles = 1000
CheckCycles = true
Segment - 0
Offset - 0


in1 str: abcdef#

out1 str: ABCDEF#
Игорь Коршунов

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

Мой профиль


Alina Yasmine:


не проходит тестирование
сгенерированная схема по этой программе

int __in __bits(1) x1;
int __in __bits(1) x2;
int __in __bits(1) x3;
int __in __bits(1) x4;
int __out __bits(1) y1;
int __out __bits(1) y2;
int __out __bits(1) y3;
int __out __bits(1) y4;

void main()
{
  y4=~x4&x3&~x2&~x1|x4&x3&~x2&x1|x4&~x3&x2&x1|~x4&~x3&x2&~x1;
  y3=x3&x1|x2&x1|x3&x2;
  y2=~x4&x1|x3&x1;
  y1=~x4 | x3| ~x2 & x1 | x2 & ~x1;
}


и это тоже

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()
{
  unsigned __bits(1) tx1,tx2,tx3,tx4;
  tx1=x1;
  tx2=x2;
  tx3=x3;
  tx4=x4;
  y4=~tx4&tx3&~tx2&~tx1 | tx4&tx3&~tx2&tx1 | tx4&~tx3&tx2&tx1 | ~tx4&~tx3&tx2&~tx1;
  y3=tx3&tx1 | tx2&tx1 | tx3&tx2;
  y2=~tx4&tx1 | tx3&tx1;
  y1=~tx4 | tx3 | ~tx2 & tx1 | tx2 & ~tx1;
}
 

Увеличены задержки в тестах. Решение засчитано.
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2, 3, ... 20, 21, 22, 23, 24, 25, 26
Time:0,044