Двухлинейный сумматор превосходит стандартные по быстродействию. Тестбенчи с осцилоскопом Gowin EDA.
Запись с моим сумматором тут 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 |
Всего комментариев 3
Комментарии
-
Число сумматоров пришлось в тесте увеличить до 700, так как мой-свой оказался слишком быстрым и плохо отслеживался в осцилоскопе, ну вот если их 700, то вроде можно как-то отслеживать и сравнивать. Хотя если честно - это ещё не факт, так как у моего были и почаще сработки, подозреваю что число сумматоров можно увеличить для тестов до 2000, завтра.
Запись от Hrethgir размещена 25.11.2024 в 23:49
Обновил(-а) Hrethgir 26.11.2024 в 05:38 -
Запись от Hrethgir размещена 26.11.2024 в 18:08 -
Нет, так сразу на триггер не перенастроиться, это будет удобно теперь после умножителя. И если умножитель получится - то можно произвести попытку с триггером, тот старый триггер мне теперь не очень нравится, когда понятно, что он, вроде как в 20 раз медленнее чем сумматор. Мне кажется, что на базе сумматора или умножителя можнго получить триггер. Но проблема в том, что триггер не должен давать ошибку при сигнале Z на проводе установки, так как это противоречит его сопряжению с шиной. И соответственно так сразу такую сложную задачу я не решу, после того как сосредотачивался на сумматоре.
Проще закончиться с сумматорами - всем тремя (один осталось протестировать), и перейти к умножителю, а после финиша с ним - попробовать триггер сопоставимый по быстродействию с сумматором двухлинейным. Триггер и так есть у меня свой, но теперь он просто мне кажется медленным. Ошибку втпаравозоподобном нашел, кстати, один провод в его модуле кинут не туда был. Название записи не меняю - после таких результатов буду пробовать триггер по вечерам. По таблице истинности часть сумматора сильно напоминает защёлку, а значит на её базе можно создать триггер. И кстати придумал как второй баг этой среды разработки обходить. Он реально существует, быть точнее их тут очень много. Последний, обнаруженный мной лично, но упомянутый пока другим человеком - как раз сильно мешает проводить тестбенчи с большим объемом модулей. Он должен решаться на манер первого - манипуляцией с проводами, только там способ совсем другой..Запись от Hrethgir размещена 26.11.2024 в 21:57
Обновил(-а) Hrethgir 27.11.2024 в 01:36