FPGA使用了部分管脚作为输出,同时需要这些输出引脚的值在系统复位信号有效时保持不变

产生的问题是在FPGA上电启动时这部分引脚总是会快速的闪过一次高电平才恢复低电平,请问应该怎么做才能使避免高电平会闪一次的这种情况?程序中因为需要复位时保持输出结果,所以不能使用复位信号,关键代码:
always @(FPGA_KCEN or M_KCIO )
if ( FPGA_KCEN) begin
F_KC = M_KCIO ;
end
代码中F_KC即为输出管脚,M_KCIO为外部输入
输出是用来驱动继电器的,直观表现就是继电器在系统上电时会快速的闭合一次

FPGA的GPIO在上电复位期间,应当保持高阻/三态状态。就是说如果你外面有适当的下拉,你是看不到这些复位时的高电平的,所以必要时可在硬件上做些调整。
还有接FPGA的那个需要保持数据的外设,大概不是什么总线设备吧,否则不可能对这种现象敏感。可能是个接口电路,这种电路应该可以通过片选、使能之类的引脚,用RST#结合MOS管来控制生效。追问

我设置IO引脚为pulldown,还是会发生这种现象,另外我如果改成
if(!rst_n) F_KC = 0;
else if ( FPGA_KCEN) begin
F_KC = M_KCIO ;
end
这样的话就不会出现上述现象,但是这与要求不符合

追答

貌似你用的是Xilinx. Quartus II用这种语句实施组合有点不灵光。从规范性来说,追问的语法比较规范——所有的REG/Wire都应该在RST#期间做确定性地初始化。

既然后面的可以实现你要的功能,那表明本FPGA芯片是有潜力实现你要的功能的。只是你尚不知道怎么运用或者因某种错误被引入了盲区。

不太推荐你用FPGA的组合语法实现预期功能,因为它内部并没有实质的门器件。当组合用很可能出现这种无法预知的问题,你可以用个高速时钟打一下看看是否就好了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-26
上电复位的时候和代码无关,通常是还没加载就会带起来一个pulse。
这个问题我问过Xilinx的AE,得到的答复是,所有的FPGA以及ASIC器件都不能保证上电的时候不产生短暂的高电平。
能做的是硬件设计的时候保证FPGA上电完成之前复位信号对系统无效,或者对板子做一下rework加合适的电容可以使电平降到判决电平以下。
第2个回答  2013-02-25
使用输出信号时先对其进行判断,持续多长时间保持高电平时才视为高电平信号。
相似回答