求助?多重驱动问题,
时间: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行
- reg [10:0] cnt;
- reg d_pty_en_tmp;
- always@(posedge clk or negedge rst_n) begin
- if(!rst_n) begin
- cnt <= 'd0; d_pty_en_tmp <= 'd0;
- end
- else begin
- if(cnt==total_bit-1) begin
- cnt <= 'd0;
- d_pty_en_tmp <= 'd1;
- end
- else
- cnt <= cnt+1;
- end
- end
-
- wire d_pty_en;
- assign d_pty_en = d_pty_en_tmp;
对应 -- 123行
- reg cnt_blk_en;
- reg [3:0] cnt_blk;
- reg cnt_pty_en;
- reg [2:0] cnt_pty;
- always@(posedge clk_blk) begin
- if(!rst_n) begin
- cnt_blk <= 'd0;
- cnt_pty <= 'd0;
- end
- else begin
- if(cnt_blk_en=='d1) begin
- if(cnt_blk=='d15) begin
- cnt_blk <= 'd0;
- cnt_blk_en <= 'd0;
- cnt_pty_en <= 'd1;
- end
- else
- cnt_blk <= cnt_blk + 1;
- end
- else if(cnt_pty_en=='d1) begin
- if(cnt_pty=='d7) begin
- cnt_pty <= 'd0;
- cnt_blk_en <= 'd1;
- cnt_pty_en <= 'd0;
- end
- else
- cnt_pty <= cnt_pty + 1;
- end
- end
- 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,这个问题不太清楚。