vivado 亚稳态_vivado FDCP问题

有一段verilog代码我是这样写的:

always @ ( posedge clk_125mhz or negedge rst_n)

begin

if(!rst_n)

begin

tx_data <= {tx_rst,TDATA0};

tx_cnt <= 'b0;

tx_sync_s <= 'b0;

end

else

begin

vivado综合的时候就会报critical warning:

[Netlist 29-358] Reg 'pio_tx_ins0/tx_data_reg[98]' of type 'FDCP' cannot be timed accurately. Hardware behavior may be unpredictable. Use check_timing command for more information. ["E:/vivado_wsp/pio_verify/pio_verify.srcs/sources_1/new/pio_tx.v":174]

参考连接:

推断大概是因为跨时钟域的问题(异步时钟问题)导致:

尝试在寄存器定义前增加vivado的命令看看:(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)

再次综合问题还是一样:仔细看警告提示就定位在那一行,分析可以发现,由于rst_n是个异步信号,而在异步信号的驱动下去采样另一个寄存器是有可能导致时序不满足的,就是可能发生亚稳态。这个很好理解,只要对异步信号多打几拍就可以解决这个问题。现在把rst_n信号触发的执行语句改为赋值一个固定初始值,再次综合问题就解决啦。

always @ ( posedge clk_125mhz or negedge rst_n)

begin

if(!rst_n)

begin

tx_data <= 0;//{tx_rst,TDATA0};

tx_cnt <= 'b0;

tx_sync_s <= 'b0;

end

else

begin

总结:

FDCP警告一般就是异步时序问题,往这方面去想应该就对了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值