Форум программистов, компьютерный форум, киберфорум
Hrethgir
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Двухлинейный сумматор превосходит стандартные по быстродействию. Тестбенчи с осцилоскопом Gowin EDA.

Запись от Hrethgir размещена 25.11.2024 в 23:32
Обновил(-а) Hrethgir 28.11.2024 в 18:42

Запись с моим сумматором тут https://www.cyberforum.ru/blog... g8718.html
Здесь скрины тестбенчей на осцилоскопе Gowin EDA . Частота сигнала захвата 2.7ГГц.
При тестировании тот сумматор что похож на паравоз - сошёл с дистанции, наверное я чего-то накосячил с проводами внутри его модуля.
Первый мой сумматор - скрин был сделан последним





. А потом идёт тот, что лучше паравозоподобного немного:





Код тестбенчей - намаялся я с лагами говиновскими, два вечера вместо ожидаемого одного потратил.
Паравозоподобный сумматор сошёл с дистанции по непонятным мне причинам - захват сигнала не происходит, ошибка может быть только в том как я внутри его модуля расключил провода, или в том, что он реально медленный как паравоз - скорее я его провда не так расключил, завтра его проверю и тут запись улучшу, и на Хабру начну готовить. В планах умножитель и весь оставшийся АЛУ - я это всё передалаю как считаю целесообразным согласно своей логике.
Код:
module Trs
(input S, R, 
 output Q);
not n1(R1,R);
and a1(G,S,R1);
DLC dlc1 (Q,G,G,R);
endmodule

module summator (input intransfer, term2, term1, output  outtransfer, mresult);//My summator
wire wi1;
xor x1(XORout,intransfer,term2);
not n1(NOTout, XORout);
bufif1 bf1(outtransfer, term2, NOTout);
bufif1 bf2(outtransfer, term1, XORout);
xor x2(XORout1,term2,term1);
not n2(NOTout2, intransfer);
bufif1 bf3(mresult, XORout1, NOTout2);
not n3(NOTout3, XORout1);
bufif1 bf4(mresult, NOTout3, intransfer);
endmodule

//module summator (input intransfer, term2, term1, output  outtransfer, mresult);//locomotive
//and a1(outA1,intransfer,term2 );
//not n1(not1,outA1);
//and a2(outA2,intransfer,not1);
//and a3(outA3,intransfer,term2);
//or o1(outO1,outA2,outA3);
//and a4(outA4,outO1,term1);
//not n2(not2,outA4);
//and a5(outA5,outO1,not2);
//and a6(outA6,not2,term1);
//or o2(mresult,outA5,outA6);
//and a7(outA7,not2,not1);
//not n3(outtransfer,outA7);
//endmodule

//module summator (input intransfer, term2, term1, output  outtransfer, mresult);//fashionable
//xor x1(outX1,intransfer, term2);
//xor x2(mresult,outX1, term1);
//and a1(outA1,outX1,term1);
//and a2(outA2,intransfer,term2);
//or o1(outtransfer,outA1,outA2);
//endmodule

module summatorChane (input in, output out);
Trs (,,nil0);
summator s1(nil0,nil0,in,,out1);
summator s2(nil0,out1,nil0,,out2);
summator s3(out2,nil0,nil0,,out3);
summator s4(nil0,out3,out3,out4,);
summator s5(out4,out4,out4,,out5);
summator s6(out5,out5,nil0,out6,);
summator s7(out6,nil0,out6,out,);
endmodule

module TestSummators (input sys_clk,output out);
wire mIn;
genvar i;
wire [100:0] w;
generate
for (i=0; i<100; i=i+1 ) begin:pprobe1_generation
summatorChane sC1(w[i],w[i+1]);
end
endgenerate
not (w[0],w[100]);
assign out = w[100];
Gowin_OSC GOwOsc(oscout);
endmodule
Изображения
Тип файла: jpg Снимок экрана (16).jpg (62.2 Кб, 181 просмотров)
Тип файла: jpg Снимок экрана (15).jpg (58.7 Кб, 188 просмотров)
Размещено в Без категории
Показов 744 Комментарии 3
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Аватар для Hrethgir
    Число сумматоров пришлось в тесте увеличить до 700, так как мой-свой оказался слишком быстрым и плохо отслеживался в осцилоскопе, ну вот если их 700, то вроде можно как-то отслеживать и сравнивать. Хотя если честно - это ещё не факт, так как у моего были и почаще сработки, подозреваю что число сумматоров можно увеличить для тестов до 2000, завтра.
    Запись от Hrethgir размещена 25.11.2024 в 23:49 Hrethgir вне форума
    Обновил(-а) Hrethgir 26.11.2024 в 05:38
  2. Старый комментарий
    Аватар для Hrethgir
    И сейчас сделаю из половины сумматора RS триггер, очень привлекает быстродействие.
    Запись от Hrethgir размещена 26.11.2024 в 18:08 Hrethgir вне форума
  3. Старый комментарий
    Аватар для Hrethgir
    Нет, так сразу на триггер не перенастроиться, это будет удобно теперь после умножителя. И если умножитель получится - то можно произвести попытку с триггером, тот старый триггер мне теперь не очень нравится, когда понятно, что он, вроде как в 20 раз медленнее чем сумматор. Мне кажется, что на базе сумматора или умножителя можнго получить триггер. Но проблема в том, что триггер не должен давать ошибку при сигнале Z на проводе установки, так как это противоречит его сопряжению с шиной. И соответственно так сразу такую сложную задачу я не решу, после того как сосредотачивался на сумматоре.
    Проще закончиться с сумматорами - всем тремя (один осталось протестировать), и перейти к умножителю, а после финиша с ним - попробовать триггер сопоставимый по быстродействию с сумматором двухлинейным. Триггер и так есть у меня свой, но теперь он просто мне кажется медленным. Ошибку втпаравозоподобном нашел, кстати, один провод в его модуле кинут не туда был. Название записи не меняю - после таких результатов буду пробовать триггер по вечерам. По таблице истинности часть сумматора сильно напоминает защёлку, а значит на её базе можно создать триггер. И кстати придумал как второй баг этой среды разработки обходить. Он реально существует, быть точнее их тут очень много. Последний, обнаруженный мной лично, но упомянутый пока другим человеком - как раз сильно мешает проводить тестбенчи с большим объемом модулей. Он должен решаться на манер первого - манипуляцией с проводами, только там способ совсем другой..
    Запись от Hrethgir размещена 26.11.2024 в 21:57 Hrethgir вне форума
    Обновил(-а) Hrethgir 27.11.2024 в 01:36
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru