微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog复位信号问题

verilog复位信号问题

时间:10-02 整理:3721RD 点击:
  verilog设计一般都有rst复位信号,以避免状态机不能复位,这是资料上说的。但是有时候硬件上没有复位信号,此时可以用软件复位或者不设置复位信号。对于软件复位:我用计数器实现一个rst复位,在modelsim和Isim仿真时都没有引起出发效果,也就是说,程序跑不起来,这是为什么,说明软件复位不行么?
对于不设置复位:在实际中,FPGA上电之后寄存器全部是0,利用好这个特点,是不是说不设置复位信号也是可行的呢?

各位有经验的可以指导指导

不管是软件复位还是硬件复位,程序不应该跑不起来;
程序跑不起来,和你程序有关。
认真检查吧。


没有写软件复位之前,我在testbench文件里产生复位信号,程序可以跑起来,说明程序没有问题额

1、软件复位是不是一种可行的方案?
2、不设置复位会不会有较大干扰?

我在testbench里给复位信号,程序可以跑起来,程序应该没有问题吧

芯片里,最最基本的一个复位,一定是存在的,就是上电复位,电源稳定后撤销复位信号。软件复位,可以用写寄存器为0来复位,也可以用watchdog产生复位;还可以做PIN的复位,比如通过按键复位实现等等。

你在testbench里给复位信号,程序可以跑起来,说明你主程序里的复位信号写的有问题


贴出来算了,主程序的复位有问题么
always @(posedge CLK)
begin
  if(!RST_B)
    begin
                SPIRST_B<=0;
                SPIDATA <=32'd0;
                state<=8'd4;
                dstate<=9'd0;
         end


你应该贴你用计数器写的复位信号部分


module gen_rst(clk,rst_n);
input clk;
output rst_n;
reg [5:0]rst_count;
assign rst_n = ~(rst_count>5'd50 && rst_count<5'd56);
always @(posedge clk)
begin
  if(rst_count > 5'd60)
        rst_count <= 5'd62;
  else
        rst_count <= rst_count + 1;
end
endmodule


计数写错了,亲


哪里错了

复位用DCM或者PLL的LOCK信号比较好。这样就不用纠结上电寄存器的值是多少了,而且有的公司的寄存器,比如Actel上电的后的值不一定是0.

仿真时的结果是不是不确定值x?



    5'd60=>6'd60


正解

1、FPGA上电之后初始值不一定都是0;
2、计数器写的有问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top