微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助?多重驱动问题,

求助?多重驱动问题,

时间:10-02 整理:3721RD 点击:

[Synth 8-3352] multi-driven net d_pty_en_OBUF with 1st driver pin 'ldpc_output_inst/d_pty_en_tmp_reg/Q' ["C:/Users/admin/Desktop/a/ldpc_output.v":44]
[Synth 8-3352] multi-driven net d_pty_en_OBUF with 2nd driver pin 'ldpc_encode_part_inst/parity_P0_calcu_inst/cnt_pty_en_reg/Q' ["C:/Users/admin/Desktop/a/parity_V0_calcu.v":123]

代码如下:(部分)对应 -- 44行

  1.         reg [10:0] cnt;
  2.         reg d_pty_en_tmp;
  3.         always@(posedge clk or negedge rst_n) begin
  4.                 if(!rst_n) begin
  5.                         cnt <= 'd0;                                              d_pty_en_tmp <= 'd0;
  6.                         end
  7.                 else begin
  8.                         if(cnt==total_bit-1) begin
  9.                                 cnt <= 'd0;
  10.                                 d_pty_en_tmp <= 'd1;
  11.                                 end
  12.                         else
  13.                                 cnt <= cnt+1;
  14.                         end
  15.         end
  16.         
  17.         wire d_pty_en;
  18.         assign d_pty_en = d_pty_en_tmp;

复制代码



对应  -- 123行

  1.         reg cnt_blk_en;   
  2.         reg [3:0] cnt_blk;
  3.         reg cnt_pty_en;
  4.         reg [2:0] cnt_pty;
  5.         always@(posedge clk_blk) begin
  6.                 if(!rst_n) begin
  7.                         cnt_blk <= 'd0;
  8.                         cnt_pty <= 'd0;
  9.                         end
  10.                 else begin
  11.                         if(cnt_blk_en=='d1) begin
  12.                                 if(cnt_blk=='d15) begin
  13.                                         cnt_blk <= 'd0;
  14.                                         cnt_blk_en <= 'd0;
  15.                                         cnt_pty_en <= 'd1;
  16.                                         end
  17.                                 else
  18.                                         cnt_blk <= cnt_blk + 1;
  19.                                 end
  20.                         else if(cnt_pty_en=='d1) begin
  21.                                 if(cnt_pty=='d7) begin
  22.                                         cnt_pty <= 'd0;
  23.                                         cnt_blk_en <= 'd1;
  24.                                         cnt_pty_en <= 'd0;
  25.                                         end
  26.                                 else
  27.                                         cnt_pty <= cnt_pty + 1;
  28.                         end
  29.                 end
  30.         end

复制代码



其他部分就没有相关的变量赋值了,综合的结果如上所示,求各位高手指点一下啊!谢谢啦。

结果是critical warning

d_pty_en_tmp赋值给d_pty_en,cnt_pty_en_reg也赋值给d_pty_en



   d_pty_en_reg是哪里来的呢?综合出来的吗?不是很懂。

你应该写了这两个语句:assign d_pty_en = d_pty_en_tmp;assign d_pty_en = cnt_pty_en;



      这是没有的,因为这是对一个值两次赋值。之前我把综合后的电路看了一下,是有d_pty_en_reg, 我把代码重新写了一遍,之前的问题没有了,不过现在也没法再去验证了。我困惑的是,代码里面并没有对一个值两次赋值,但综合后会出现multi-driver,这个问题不太清楚。

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

网站地图

Top