原创 脉冲展宽与压缩电路【Verilog HDL】

2013-4-15 23:40 10421 13 16 分类: FPGA/CPLD

采用时钟计数方法实现的单稳态脉冲展宽电路,能够有效、方便地对输入脉冲进行展宽和压缩。单稳态展宽电路的主要功能组成部件是单稳态触发器。单稳态触发器的工作特性具有以下显著特点。

(1) 稳态和暂稳态两个不同的工作状态。

(2) 在外接触发脉冲作用下,从稳态翻转到暂稳态。在暂稳态维持一段时间后,再自动返回稳态。

(3) 暂稳态维持时间长短取决于电路的参数,与触发脉冲的宽度和幅度无关。

根据单稳态触发器的工作特点,利用FPGA器件中的D触发器,采用可编程逻辑模块模拟充放电电路实现单稳态触发电路的稳态与暂稳态之间的转换,就可以实现基于FPGA器件的单稳态脉冲展宽电路。

图为采用时钟计数方法把输入窄脉冲信号展宽成具有一定宽度和精度的宽脉冲信号的电路原理图。图中,iPulse为触发脉冲输入信号,iClk为计数时钟,D触发器的输出Q为展宽后的宽脉冲输出,定义为oPulsewidth。D触发器即是展宽脉冲的前沿产生电路,又是展宽脉冲宽度的形成电路。D触发器的置位端PRN和输入端D接高电平VCC,清零端CLRN低电平有效,计数器counter的输出信号oFeed通过非门与CLRN相连。时钟计数器counter是通过可编程语言Verilog HDL编译产生的,作用是控制展宽脉冲的宽度。iRst为计数器的复位端,高电平有效,有效时计数器counter取消对输入的计数时钟iClk计数,并置输出信号oFeed为低电平。iEn为计数器的使能端,高电平有效,iEn有效时计数器counter对计数时钟iClk进行计数。

 

图片3.gif

电路的工作过程:稳态工作时,Q为低,复位端iRst为高,使能端iEn为低,计数器counter不对输入的计数时钟信号iClk计数,counter的输出信号oFeed为低,D触发器的清零端CLRN为高。当有触发脉冲输入时,Q变为高,复位端iRst变为低,使能端iEn为高,计数器counter开始对输入的计数时钟信号iClk计数,计数的次数

                          NUM = Wd/T                        

其中,Wd ——展宽后脉冲的宽度;T ——为输入计数时钟iClk的周期。

计数期间,counter的输出信号oFeed为低,D触发器的清零端CLRN为高;当计数到NUM时,置oFeed为高,D触发器的清零端CLRN为低,Q被置为低,iRst有效,counter输出信号oFeed为低,清零端CLRN为高,电路返回稳态,电路完成一次脉冲展宽。仿真波形如图4.12所示,展宽脉冲的宽度为4个时钟周期。

module monostable (
    iClk,
    iPulse,
    oPulsewidth
    );
 
   input iClk;
   input iPulse;
   output oPulsewidth;
  
   wire Q1,Q2,Q3;
   wire PR;
   supply1 Vcc;
  
   dff U1 (
           .CLK(iPulse),
           .D(Vcc),
           .PRN(Vcc),
           .CLRN(Q1),
           .Q(Q2)
           );
          
   not U2  ( PR,Q2 );
  
   counter U3 (
            .RESET(PR),
            .EN(Q2),
            .CLK(iClk),
            .FEED_OUT(Q3)
            );
           
   not  U4 ( Q1,Q3 );
  
   assign oPulsewidth = Q2 ;
  
   endmodule 
   
  


// Counter for pulse
module counter (RESET, EN, CLK, FEED_OUT);
 
   input RESET;
   input EN;
   input CLK;
   output FEED_OUT;
  
   parameter NUM  = 0;
   reg FEED_OUT;
   reg[NUM:0] q;
  
   always @(posedge CLK)
   begin
      if (RESET == 1'b1)
      begin
         q = 0;
         FEED_OUT <= 1'b0 ;
      end
      else if (EN == 1'b1)
      begin
         case (q)
            NUM :
                     begin
                        FEED_OUT <= 1'b1 ;
                     end
            default :
                     begin
                     end
         endcase
         q = q + 1'b1;
      end 
   end
endmodule
        

文章评论3条评论)

登录后参与讨论

用户1499739 2015-9-5 08:34

谢谢楼主,学习啦

用户1489016 2013-5-21 10:46

不错,马上来验证一下

用户417546 2012-3-30 16:17

没人评价?我来评价一下吧。等用完再评价
相关推荐阅读
用户313737 2014-03-08 00:11
【专题一】元器件之电阻
  电阻 1.电阻器的基本工作原理和主要特性 1.1 电阻器电路模型 电阻器与一个电感L串联,再与一个电容C并联。当电阻器的工作频率不是很高时,由于电感L的电感量很小而相当于桐庐,...
用户313737 2013-05-01 11:13
i2c
整理的i2c源码...
用户313737 2013-04-16 11:40
[博客大赛]在Modelsim中使用脚本进行仿真【一】—— 在ModelSim中添加Xilinx仿真库
在对FPGA的设计进行仿真的过程中,调用脚本进行仿真比直接使用GUI更方便。在使用之前,我们需要将Xilinx ISE仿真库文件加载至Modelsim中,这里使用ISE自带的工具 Simulati...
用户313737 2013-04-16 11:40
[博客大赛]在Modelsim中使用脚本进行仿真【二】—— 常用脚本命令
  加载Xilinx仿真库之后,下面编写脚本进行仿真,这里附上常用的脚本命令,以供参考: 文件名:simulation.do /****************************...
用户313737 2013-04-15 23:34
【转】FPGA中常犯设计错误列表
  这是一个在设计中常犯的错误列表,这些错误常使得你的设计不可靠或速度较慢,为了提高你的设计性能和提高速度的可靠性,你必须确定你的设计通过所有的这些检查。 可靠性   **为时钟信...
我要评论
3
13
关闭 站长推荐上一条 /2 下一条