illi4 0 November 10, 2006 Posted November 10, 2006 · Report post Нужно сделать следующее: после фронта импульса запуска ST на выходе OUT импульс с длительностью T=(D+1)*Tc, где D - число на входе (0 <= D < 2^m). Верилог я знаю не очень хорошо, и уже поломал голову, думая над этим генератором :( Помогите, пожалуйста! Quote Share this post Link to post Share on other sites More sharing options...
Gate 2 November 10, 2006 Posted November 10, 2006 · Report post Код в студию! Quote Share this post Link to post Share on other sites More sharing options...
Vitёk 0 November 10, 2006 Posted November 10, 2006 · Report post module univibrator ( C, ST, D, OUT ); parameter m = 4; input C, ST; input [m - 1 : 0] D; output OUT; reg [m : 0] cnt; // wide m+1 because D+1 assign OUT = cnt != 0; always @ (posedge C) if(OUT) cnt <= cnt - 1; else if(ST) cnt <= D + 1; endmodule Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 58 November 10, 2006 Posted November 10, 2006 · Report post Приветствую! Вот нашел у себя, вроде работает правильно. Удачи! Rob. module OnePulse(Clk,St,D,Ou); parameter M=8; input Clk,St; input [M-1:0] D; output Ou; reg [M-1:0] rCount; reg rS,rR; assign Ou=rR; //синхронизируем запуск к фронту Clk always @(posedge St or posedge rR) begin if (rR) rS<=0; else rS<=1; end //одновибратор always @(posedge Clk) begin if (~rR) rCount<=D; else rCount<=rCount-1; if (rS) rR<=1; else if (rCount==0 && rR) rR<=0; end endmodule Quote Share this post Link to post Share on other sites More sharing options...