Vivado在前一段時間更新了2023.2版本,經(jīng)過一段時間的使用這個版本還是很絲滑的,用起來挺舒服。
特別是增加了一個Lint檢查的按鈕,可以讓我們提前知道RTL設(shè)計有什么風(fēng)險。做數(shù)字IC設(shè)計的時候?qū)懲甏a之后可能不是直接就去仿真,而是先拿Spyglass做一次檢查,消除掉lint錯誤之后再拿去仿真,Vivado增加了這個功能,讓我們能夠更好的去掌控自己的代碼。

這個lint檢查有什么作用呢,先來看一小段代碼。
`timescale 1ns / 1ps module top( input [7:0] a , input b , output [7:0] c ); always @(*) begin if(b == 1'b1)begin c = a; end end endmodule
沒有幾行代碼,直接一看有兩處問題,第一是c在always begin end里面進行賦值的,應(yīng)該用reg類型,第二會產(chǎn)生一個latch。
代碼比較少,可以一眼發(fā)現(xiàn)問題,如果代碼比較多呢,還能一眼發(fā)現(xiàn)問題嗎?之前版本沒有l(wèi)int檢查的時候,我們會拿去直接綜合,也許會給我們報一個警告出來,但是又有多少次我們會去一個一個的看這個警告報的什么問題呢?
現(xiàn)在增加了Lint功能,直接點擊run一下看看。

vivado直接報錯了,告訴我們c不是reg類型的。
把c改成reg類型的,代碼如下
`timescale 1ns / 1ps
module top(
input [7:0] a ,
input b ,
output reg [7:0] c
);
always @(*) begin
if(b == 1'b1)begin
c = a;
end
end
endmodule
先來綜合一下看看,下面是報告。

看起來一點問題都沒有,報了一大堆信息,也許你仔細看還能看到其中一條警告說c被綜合成一個latch了,要是信息更多的話還會看到他不。
而運行l(wèi)int之后,會幫我們生成一個表,可以很清晰的看到這些信息:

再來看另外一個典型的多驅(qū)動問題:
`timescale 1ns / 1ps
module top(
input clk,
input [7:0] a1 ,
input [7:0] a2 ,
input b ,
output reg [7:0] c
);
always @(posedge clk) begin
if(b == 1'b1)begin
c <= a1;
end
end
always @(posedge clk) begin
c <= a2;
end
endmodule
在綜合后會有一個關(guān)鍵警告產(chǎn)生,但也不會報錯,這個會在之后的布局布線的時候報錯。

同樣lint也會把這個問題給暴露出來:

還有一些小問題比如位寬不匹配的問題,lint也能幫我們查出來
`timescale 1ns / 1ps
module top(
input clk,
input [7:0] a ,
input b ,
output reg [6:0] c
);
always @(posedge clk) begin
if(b == 3'b101)begin
c <= a;
end
end
submodule submodule_inst(
.a (kkk)
)
endmodule
module submodule (
output [3:0] a
);
assign a = 3'b111;
endmodule
不知道大家能一眼看出來這個代碼的問題不。
先看看綜合的結(jié)果:

看著似乎沒啥問題。

lint報了一堆位寬不匹配的問題。
先看看第一個kkk的位寬不匹配,可以看到在在submodule這個模塊里面輸出了一個4bit的變量,但是我們在例化這個模塊的時候kkk忘記定義了,這個時候kkk就被隱式推斷為了一個1bit的wire類型的變量,這樣就出現(xiàn)了潛在的bug。其他幾個位寬不匹配也是一樣的,當(dāng)然不是所有的位寬不匹配都是bug,這個就需要我們明確知道哪些是我們故意這樣設(shè)計的。
通過觀察lint報告,可以讓我們更加了解自己的設(shè)計,讓問題發(fā)現(xiàn)在最開始的地方,而不是等到最后布局布線了甚至更晚,才發(fā)現(xiàn)這種低級的問題。
審核編輯:湯梓紅
-
IC設(shè)計
+關(guān)注
關(guān)注
38文章
1369瀏覽量
107848 -
仿真
+關(guān)注
關(guān)注
52文章
4400瀏覽量
137627 -
RTL
+關(guān)注
關(guān)注
1文章
393瀏覽量
62371 -
代碼
+關(guān)注
關(guān)注
30文章
4940瀏覽量
73078 -
Vivado
+關(guān)注
關(guān)注
19文章
846瀏覽量
70435
原文標題:Vivado2023.2的一個小功能
文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Vitis2023.2使用之—— updata to Vitis Unified IDE
Hanlp1.7版本的新增功能一覽
Xilinx 發(fā)布Vivado2013.3新增全新設(shè)計方法及功能
Xilinx發(fā)布Vivado 2013.3 新增全新設(shè)計方法及功能
賽靈思Vivado設(shè)計套件推出2013.1版本,提供IP 集成器和高層次綜合功能
Vivado設(shè)計套件2017.3的新功能介紹
Vivado Design Suite 2015.3新增量編譯功能介紹
Vivado Design Suite 2018.1設(shè)計套件中的新增功能介紹
Vivado 2015.3中的新增量編譯功能介紹
Vivado 2015.3的新增量編譯功能
Vivado? 設(shè)計套件 2023.2 版本:加速自適應(yīng) SoC 和 FPGA 產(chǎn)品設(shè)計
Vitis2023.2全新GUI的功能特性介紹
使用Vivado通過AXI Quad SPI實現(xiàn)XIP功能
AMD Vivado設(shè)計套件2025.1版本的功能特性

Vivado 2023.2版本的新增功能
評論