FPGA组合逻辑之注意项

先上代码:

always @(*)begin

        if(recie_tlp_fifo_ren & recie_tlp_fifo_rdata[TLP_SOP])begin

                  if({recie_tlp_fifo_rdata[TLP_FMT_1D +:2],recie_tlp_fifo_rdata[TLP_TYPE_1D+:5]}==MWR_3DW)

                           word_3d_type = 3'b001;

                  else if({recie_tlp_fifo_rdata[TLP_FMT_1D +:2],recie_tlp_fifo_rdata[TLP_TYPE_1D+:5]}==MRB_3DW)

                           word_3d_type = 3'b010;

                  else

                           word_3d_type = 3'b100;

         end 

end


你们觉得这样写对吗?当初用chipscope在板子上调试时word_3d_type值为3‘b111或3’b110等其它情况,当时以为是distri fifo不稳定导致的,后改为block fifo还是这样,而直接改为时序逻辑又会增加很多判断条件,无奈请教之,才知道,组合逻辑必须要将else补充完整,不能出现不确定状态和环路状态(即word_3d_type = word_3d_type,当然时序逻辑可以这样),否则导致程序出错,后改为如下方法

always @(posedge clk_125m) begin
recie_tlp_fifo_ren_1d <= recie_tlp_fifo_ren;
end

always @(posedge clk_125m) begin
recie_tlp_fifo_rdata_1d <= recie_tlp_fifo_rdata;
end

always @(posedge clk_125m) begin
if(recie_tlp_fifo_ren & recie_tlp_fifo_rdata[TLP_SOP])begin
if({recie_tlp_fifo_rdata[TLP_FMT_1D +:2],recie_tlp_fifo_rdata[TLP_TYPE_1D +:5]}==MWR_3DW)
word_3d_type <= 3'b001;
else if({recie_tlp_fifo_rdata[TLP_FMT_1D +:2],recie_tlp_fifo_rdata[TLP_TYPE_1D +:5]}==MRB_3DW) 
word_3d_type <= 3'b010;
else
word_3d_type <= 3'b100;
end
end

然后再根据word_3d_type 判断recie_tlp_fifo_ren_1d与recie_tlp_fifo_rdata_1d情况。

提示:对于提前获取关键信息,这种打拍方法是非常可取的。













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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值