1恋沃、Multidriver
錯誤報告:ERROR: [DRC MDRV-1] Multiple Driver Nets:……
這個錯誤是由于判斷邏輯寫錯,導(dǎo)致同一變量被綜合器判斷為需要賦值兩次澈灼,因此將兩根輸出線直接接到一起讳癌。這部分錯誤代碼如下所示巷疼,是一個Generate語句中的if-else搀擂,很明顯這里沒有按照從上到下的優(yōu)先級進(jìn)行綜合,可能是因為這部分判斷是Generate語句下的硬件生成判斷吗跋,而不是普通的邏輯判斷侧戴。這里問題就出在第一個else if后面的判斷條件,這里很明顯n<=3包含n==0小腊,并且該else if下面也有(j==0&&m==0)的情況救鲤,這就導(dǎo)致了綜合網(wǎng)表時認(rèn)為(n==0 && j == 0 && m == 0)會即進(jìn)行第一個if的賦值,也會進(jìn)行第一個else if下第一個if中的賦值秩冈,所以將兩個輸出線連接到了一起本缠。
這里的修改方法是將第二個else if中的條件修改為(n<=3 && n!=0)。
if (n == 0 && j == 0 && m == 0) begin
assign local_buf_read_req = buf_read_req;
assign local_buf_read_addr = buf_read_addr;
end
else if( n <= 3 ) begin
if (j == 0 && m == 0)
begin
assign local_buf_read_req = LOOP_N[n-1].LOOP_NN[1].LOOP_M[1].buf_read_req_fwd;
assign local_buf_read_addr = LOOP_N[n-1].LOOP_NN[1].LOOP_M[1].buf_read_addr_fwd;
end
else if (j == 1 && m == 0)
begin
assign local_buf_read_req = LOOP_N[n].LOOP_NN[0].LOOP_M[1].buf_read_req_fwd;
assign local_buf_read_addr =LOOP_N[n].LOOP_NN[0].LOOP_M[1].buf_read_addr_fwd;
end
else if (m == 1) begin
assign local_buf_read_req = (fc == 0)? LOOP_N[n].LOOP_NN[j].LOOP_M[0].local_buf_read_req:LOOP_N[n].LOOP_NN[j].LOOP_M[0].buf_read_req_fwd;
assign local_buf_read_addr = (fc == 0)? LOOP_N[n].LOOP_NN[j].LOOP_M[0].local_buf_read_addr:LOOP_N[n].LOOP_NN[j].LOOP_M[0].buf_read_addr_fwd;
end
end
2入问、LUT Missing Pin Input
錯誤報告:[Opt 31-67] Problem: A LUT2 cell in the design is missing a connection on input pin I1
這一問題出現(xiàn)在Vivado IP - AXI Smart Connect模塊內(nèi)部的一個LUT上丹锹。起初我對于這個錯誤很奇怪,不知道從何而來芬失,然后查找了Xilinx官方論壇楣黍,發(fā)現(xiàn)了篇講述非常詳細(xì)的問題定位方法,AR# 72980 Vivado - Resolving [Opt 31-67] Problem: A LUT2 cell in the design is missing a connection on input pin I1棱烂。通過上述方法我將問題定位發(fā)現(xiàn)是因為我的IP中AXI的arlock和awlock信號空接租漂,導(dǎo)致需要這一信號作為輸入的axi_smc模塊中的某些邏輯輸入了高阻態(tài),無法正常布局布線颊糜。
最終將這兩個信號和其他所有空接的AXI信號全部接上AXI例程中設(shè)置的值哩治,就沒問題了。
3衬鱼、Combinational Loop
錯誤報告:[DRC LUTLP-1] Combinatorial Loop Error Must be Overridden
這個實際上是在Generate Bitstream時出現(xiàn)的問題业筏,不是Implementation問題。
該問題是在賦值過程時出現(xiàn)了類似于assign a = a;的語句鸟赫,導(dǎo)致某個LUT的輸出端口直接接到了輸入端口蒜胖,具體圖像忘記截下來了,出問題的代碼如下所示抛蚤,把最后的1去掉就不報錯了台谢。
// simd_pu_core.v
assign alu_out_fwd1=(softimm==5'h8)?alu_out:(~(softimm ==5'h8)&& chain_rs0_stage3&& (alu_fn_choose==3'b00||alu_fn_choose==3'b011))?alu_out:alu_out_fwd1;