这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 求助fpga编程问题

共8条 1/1 1 跳转至

求助fpga编程问题

助工
2009-05-21 14:44:04     打赏
想在fpga上,用verilog编个脉冲计数器。当计算输入的脉冲个数为某一数值的时候,就发出一个脉冲信号,要求发出的脉冲信号脉宽为100ns左右 编了几天都没有结果,能否请高手指导一下,提供一下思路,谢谢了!



关键词: 求助     编程     问题    

助工
2009-05-21 14:58:04     打赏
2楼
标志位在计数模块置1后,在输出脉冲后又要求将标志位置0,但是在verilog语言里面不允许在两个模块中对同一变量赋值,烦恼啊!

高工
2009-05-21 16:25:53     打赏
3楼
高手路过都来回答一下吧

高工
2009-05-21 19:01:22     打赏
4楼

楼主试试下面的程序能不能实现你的功能。Pulse_In 是输入的脉冲,Pulse_Out是输出的100ns脉冲,rst全局复位,其余一些计数值根据你的需要修改。
基本思路是:对输入脉冲计数,分频为一个占空比为50%(或其他,只要高电平超过100ns即可)的脉冲,再用标准时钟对这个脉冲整形,是输入高电平保持100ns。
( 这个程序我临时写的,没做过仿真,如果有误,请告知  )

reg [10:0] InCnt;
parameter MAXCNT = 500;
reg InCnt_Out;

always@( posedge Pulse_In or nedgedge rst)
begin
if( ~rst )
begin
   InCnt <= 0;
end
else
begin
   if( InCnt < MAXCNT-250 )
   begin
 InCnt <= Cnt + 1;
   end
   else if( InCnt < MAXCNT )
   begin
        InCnt <= InCnt + 1;
        InCnt_Out <= 0;
   end
   else
   begin
        InCnt <= 0;
        InCnt_Out <= 1;
   end
end

reg Pulse_Out;
reg [3:0] OutCnt;
always@( posedge CLK_100M or nededge rst )
begin
   if( rst )
      Pulse_Out <= 0;
      OutCnt <= 0;
   else
   begin
      if( (InCnt_Out==1) && (OutCnt==0) )
      begin
         OutCnt <= 1;
         Pulse_Out <= 1;
      end     
      else if( OutCnt < 11 )
      begin
         OutCnt <= OutCnt + 1;
         Pulse_Out <= 1;
      end if( ~InCnt_Out )
      begin
         OutCnt <= 0;
         Pulse_Out <= 0;
      end
      else
      begin
         OutCnt <= 11;
         Pulse_Out <= 0;
      end
   end
end


助工
2009-05-22 17:09:55     打赏
5楼
先去试验一下,感谢Jason_zhang!

高工
2009-05-24 23:37:58     打赏
6楼

语言写可以,不过也可以用框图设计,楼主可以尝试一下


助工
2009-05-25 16:29:51     打赏
7楼
程序看的不是很明白,要是有注释就好了

高工
2009-05-25 23:09:11     打赏
8楼
呵呵,临时写的,没注释。
你做个仿真,或者照着程序意思自己把波形画出来不就明白了吗

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]