关于用FPGA实现PWM延迟(死区)的verilog hdl程序请指正

2020-02-17 19:53发布

想得到如图所示的波形,最后两行:上面是PWM输入,下面是程序处理后的输出!
  想实现的功能:在PWM输入的上升沿固定延时4us,下降沿跟随PWM输入!
我想谈谈自己的想法:
  方案一:把PWM输入整体右移4us,然后与原pwm波形相与得到所需的波形;
方案二:检测pwm输入的上升沿,检测到上升沿开始触发计数器计数到4us,计数器清0,计数期间输出0;其它时间原样输出pwm;


这里有个问题:方案二:pwm检测期间,如何触发定时器啊,需要锁存检测到的pwm上升沿信号吗?因为CLK上升沿开始检测,检测到PWM上升沿以后,高电平期间的检测rising_edge=0;

以下是我的代码,总感觉代码里面有些问题,敬请高手指正:
`define DELAY 3
module deathtime1(dt_pwm,clk,pwm,rst);
output dt_pwm;
input clk,pwm,rst;
reg dt_pwm;  //最终输出
reg r0_pwm,r1_pwm;
reg counter,clr,flag;
wire rising_edge;

always@(posedge clk or negedge rst)  //2位移位寄存器寄存
  begin
   if(!rst)
    begin
     r0_pwm<=1'bx;
     r1_pwm<=1'bx;
    end
   else
   begin
     r0_pwm<=pwm;
     r1_pwm<=r0_pwm;
   end
  end
  
  assign rising_edge=~r0_pwm&r1_pwm;  //判断PWM上升沿
  
  always@(rising_edge or clr)         //锁存器锁存上升沿,得到计数使能flag
   begin
    if(!clr)
   flag<=0;
  if(rising_edge)
   flag<=1;
   end
   
always@(posedge clk or negedge rst)  //计数器counter
  if(!rst)
   counter<=0;
  else
   begin
     if(flag)
     begin
     if(counter>`DELAY)
      begin
      counter<=0;
    clr<=0;
    end
     else
      counter<=counter+1;
     end
     else
     counter<=0;
   end
  
always@(posedge clk or negedge rst)
  begin
  if(!rst)
    dt_pwm<=0;
  else
    if((counter<=`DELAY)&&(counter>=1))
    dt_pwm<=0;
    else
    dt_pwm<=pwm;
  end
endmodule
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
bowlder2008
1楼-- · 2020-02-17 23:03
pwm信号的频率先不用管,只是先实现这个功能!pwm和clk时钟同步,而且pwm周期是clk周期的至少3的整数倍!
补充一下:1.方案一:如果整体右移实现指定延时,需要用多少位的移位寄存器实现?难道要延时40个时钟周期的话,就需要40个移位寄存器?
         2.方案二:检测到输入信号的上升沿以后开始计时,期间每第二个clk信号的上升沿到来以后,rising_edge的值由1->0,这里需要锁存器吧?
                    
bowlder2008
2楼-- · 2020-02-18 02:52
 精彩回答 2  元偷偷看……
zhaojingzb
3楼-- · 2020-02-18 04:05
方案二的代码明显的时序没有对应上。在延迟的期间里会有多个错误的高电平输出的。
对于方案一,是需要40个寄存器来进行移位缓存的。如果使用xilinx器件的话有SRL,使用LUT实现移位,只需要两个LUT就可以了。
bowlder2008
4楼-- · 2020-02-18 05:25
不是错误的高电平,是错误的低电平吧?另外问下,zhaojingzb,这个上升沿,需要锁存吗?
zhoujiewen
5楼-- · 2020-02-18 09:35
先顶一个....
hanqingynu
6楼-- · 2020-02-18 12:19
请问 你的这两路信号的频率是是多少呢 ?计数器的值和频率有关吧 计算的是上升沿的个数 也就是周期数

一周热门 更多>