日志档案

发表于 2008-7-15 23:12:46

2

标签: 无标签

FPGA自己产生reset

遇到一个FPGA没有外部的reset,只能自己产生了,这么简单一个问题居然想了很久才实现。在modelsim仿真是对的,还没有实际操作,也希望和大家讨论一下

module reset_generation(inclk,reset);
input inclk;
output reset;
reg flag,reset;
reg [1:0] counter;

always @ (posedge inclk)
begin
  case(flag) 
  1'b0: begin
        counter<=counter+1;
        if(counter==2'b11)
          begin
            flag<=1;
          end
        end
  1'b1: reset<=1;
  default:begin
          reset<=0;
          flag<=0;
          counter<=2'b00;
          end
  endcase  
end

endmodule

系统分类: CPLD/FPGA   |   用户分类: Verilog   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(945)    回复(12)  

投一票您将和博主都有获奖机会!

最新评论

  • ilove314

    2008-7-16 7:09:34

    不明白,reset不都是做输入嘛,这里做output干嘛?这个模块好像是然reset的输出成为一个分频的inclk,有什么意义?

  • songchao01

    2008-7-16 18:55:44

    貌似这个是要产生一个复位信号,所以当然得是输出啦,用作主模块的输入

  • cqcrr

    2008-7-17 11:20:10

    是这样的,原理图上就没有FPGA的reset输入,所以在FPGA内部实现一个reset作为其他module的输入。

  • cqcrr

    2008-7-17 21:57:12

    今天下载到FPGA执行了一下实际结果也是对的

  • huiz

    2008-8-12 9:39:40

    好像不行,综合后,reset为1,而flag和counter被剪切掉了。

  • xiaoxiaoshutong

    2008-8-15 15:39:59

    运行过了 很明显不行 在4 个时钟周期之后 reset便一直为1;除非你想一直复位吧 再说复位是在某种情况或者某个时间段需要复位时才用到的。

  • xyysun

    2008-8-16 10:51:51

    这个方法是可以用,不过不是通用的方法,受到FPGA芯片型号和所在平台工作情况的影响。总之是不够健壮的方法。建议少用

  • shaojihu

    2008-8-16 13:09:46

    感觉 楼主的程序写的有点复杂了,如果只是想简单的产生一个高低复位信号只要这样写就可以了 always@(posedge inclk) begin if(counter<4) begin counter<=counter+1; reset<=0; end if(counter=4) begin reset<=1; counter<=4; end end 我觉得这样的复位信号好像过于简单了吧

  • shaojihu

    2008-8-16 13:10:58

    感觉 楼主的程序写的有点复杂了,如果只是想简单的产生一个高低复位信号只要这样写就可以了 always@(posedge inclk) begin if(counter<4) begin counter<=counter+1; reset<=0; end if(counter=4) begin reset<=1; counter<=4; end end 我觉得这样的复位信号好像过于简单了吧

  • shaojihu

    2008-8-16 13:11:13

    感觉 楼主的程序写的有点复杂了,如果只是想简单的产生一个高低复位信号只要这样写就可以了 我觉得这样的复位信号好像过于简单了吧

  • cqcrr

    2008-8-20 20:24:07

    shaojihu ,你说的对,在FPGA里面默认的寄存器初始值是0

  • cqcrr

    2008-8-20 20:24:46

    xyysun ,请问你有什么好方法吗?大家讨论一下