illi4 0 10 ноября, 2006 Опубликовано 10 ноября, 2006 · Жалоба Нужно сделать следующее: после фронта импульса запуска ST на выходе OUT импульс с длительностью T=(D+1)*Tc, где D - число на входе (0 <= D < 2^m). Верилог я знаю не очень хорошо, и уже поломал голову, думая над этим генератором :( Помогите, пожалуйста! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gate 0 10 ноября, 2006 Опубликовано 10 ноября, 2006 · Жалоба Код в студию! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vitёk 0 10 ноября, 2006 Опубликовано 10 ноября, 2006 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 10 ноября, 2006 Опубликовано 10 ноября, 2006 · Жалоба Приветствую! Вот нашел у себя, вроде работает правильно. Удачи! 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться