Последовательный Launсher. Verilog схемотехника. (асинхронный триггер, статическая логика)
Запись от Hrethgir размещена 29.10.2024 в 13:26
Показов 1663
Комментарии 2
|
Немного помучался, с защёлками - вообще не понятно как они работают. Их беда в том, что при входящем сигнале Z у Gowin они сбрасываются. Пришлось всё самому делать. Поэтому пришлось вернутся к свему асинхронному триггеру, каким я его делал в первоначальном виде. [CODE]module Trs (input S, R, output Q);//reg reg Q; always @(R, S) begin if(R) Q <= 1'b0; else if(S) Q <= 1'b1; end endmodule[/CODE] Ланчер конвейера я перепилил, он работает без каких либо тактов, кроме тех сигналов что генерирует сама схема. Поочерёдно записывается единица в триггер. Диоды у меня на отладке - инверсные, поэтому идут за элементом NOT. [SPOILER][CODE]module Trs (input S, R, output Q);//reg reg Q; always @(R, S) begin if(R) Q <= 1'b0; else if(S) Q <= 1'b1; end endmodule module Chain (input on, off, output out); Trs t1(on,off,out1); Trs t2(out1,off,out2); Trs t3(out2,off,out3); Trs t4(out3,off,out4); Trs t5(out4,off,out5); Trs t6(out5,off,out6); Trs t7(out6,off,out7); Trs t8(out7,off,out8); Trs t9(out8,off,out9); Trs t10(out9,off,out); endmodule //module Test (output led0, led1, led2, led3); //wire rs1; //wire w0=0; //Trs ch1(rs1,w0,onled0); //not n1(further,onled0); //Chain ch2(further,rs1,onled1); //not n2(led0,onled1); //Chain ch3(onled1,w0,rs1); //endmodule module SetChain (input on, output out,further); wire reset0,reset1; Chain Ch1(on,reset0,out); Chain Ch2(out,further,reset0); Chain Ch3(reset0,reset1,further); Chain Ch4(further,on,reset1); endmodule //module Test (output led0, led1, led2, led3); //SetChain Sc1(led2,led0,led1); //Trs t1(led1,,onled2); //not n1(led2,onled2); //endmodule module mkick (output led); wire w4; wire w0=0; Trs trs1(w4,w0,wt); not n0(led, wt); Trs trs2(led,w0,w2); Trs trs3(w2,w0,w3); Trs trs4(w3,w0,w4); endmodule module activate (input out, further, output out1, onActivate,OutFurther); wire wi0=0; wire wi1,onout2,onTrsReset,outTrsReset; bufif1 bf1(on,out,wi1); Trs Tout(on,wi0,onout1); bufif1 bf2(onFurth,onout1,further); Trs TFurth(onFurth,wi0,onWi1); xor xs1(onout2,onout1,onWi1); bufif1 bf3(out1,out,onout2); not n1(wi1, onWi1); bufif1 bf4(OutFurther,out,onWi1); Trs TrsReset(onout2,onTrsReset,outTrsReset); and An1(wA1,outTrsReset,onWi1); not n2(notfurther,further); bufif1 bf5(onActivate,wA1,notfurther); bufif1 bf6(onTrsReset,out,wA1); endmodule module Launcher (output Limit,Fills, Unit, Run); wire zero=0; wire out; mkick k1(kick); bufif1 (on,kick,kick); Trs t1(on,out,on1); SetChain Sc1(on1,out,further); activate act1(out,further,Limit,onActivate0,Outfurther1);//activate act1(out,further,Limit,onActivate0,Outfurther1); bufif1 (on,onActivate0,onActivate0);//onActivate0); activate act2(Outfurther1,further,Fills,onActivate1,Outfurther2); bufif1 (on,onActivate1,onActivate1); activate act3(Outfurther2,further,Unit,onActivate2,Outfurther3); bufif1 (on,onActivate2,onActivate2); activate act4(Outfurther3,further,Run,onActivate3,Outfurther4); endmodule module Test (output led0, led1, led2, led3); wire wi0 = 0; Launcher La1(on0,on1,on2,on3); Trs t1(on0,wi0,onled0); Trs t2(on1,wi0,onled1); Trs t3(on2,wi0,onled2); Trs t4(on3,wi0,onled3); not n0(led0,onled0); not n1(led1,onled1); not n2(led2,onled2); not n3(led3,onled3); endmodule [/CODE][/SPOILER] Таким образом загораются четыре диода. Это просто тест лаунчера. Пускача. Система звеньев управляется двумя сигналам, где по переходу в нулевой уровень второго сигнала - она генерирует сигнал запуска нового цикла управляющих сигналов. Никаких таких - рычажков, хнопочек, и прочей напророченнойлабуды - не требуется. Всё работает - загораются все четыре диода (на отладке остаются два, так как для испытания пускача не нужны). Такты я оставляю для других задач. Вскоре приступлю к АЛУ, разумеется после запуска конвейера кэша команд. От АЛУ ожидаю, что сможет сложить три числа за время последовательного срабатывания трёх электронных ключей, с условием, что все три в ненасыщенном режиме перед сложением назодятся. Ну в теории - предполагаю что так можено уложиться, но это в идеале так, возможно что так и нельзя будет уложиться, что скорее всего, но попробую. АЛУ будет полностью асинхронным. А данная схема служит лаунчером для конвейера, конвеер тоже что-то должно запустить. Предыдущая версия схемы лаунчера - не справляется. Эта вроде как рабочая, как минимум - протестированная, к тому-же с внутренней "координацией". |
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
-
По поводу бытующих мнений в отношении асинхронной логики - на асинхронной логике можно сделать всё, а на FPGA - тем более. Всё работает, как и должно было быть. Этот лаунчер я запускал на Gowin tangnano9k - всё работает, хоть мне и казалось иногда что быстрее закончится моя жизнь, чем заработает эта схема :) , а тем более ещё и на FPGA. Ну имеют некоторые специалисты обученные по схемотехнике - таланты по внушению, правда из меня объект неподходящий получился, для этого их таланта.Запись от Hrethgir размещена 29.10.2024 в 22:14
-
Более подробно тут
[url]https://habr.com/ru/users/accurate_random/publications/articles/[/url]Запись от Hrethgir размещена 30.10.2024 в 19:19


