Vivado在前一段時間更新了2023.2版本,經過一段時間的使用這個版本還是很絲滑的,用起來挺舒服。
特別是增加了一個Lint檢查的按鈕,可以讓我們提前知道RTL設計有什么風險。做數字IC設計的時候寫完代碼之后可能不是直接就去仿真,而是先拿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里面進行賦值的,應該用reg類型,第二會產生一個latch。
代碼比較少,可以一眼發現問題,如果代碼比較多呢,還能一眼發現問題嗎?之前版本沒有lint檢查的時候,我們會拿去直接綜合,也許會給我們報一個警告出來,但是又有多少次我們會去一個一個的看這個警告報的什么問題呢?
現在增加了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了,要是信息更多的話還會看到他不。
而運行lint之后,會幫我們生成一個表,可以很清晰的看到這些信息:

再來看另外一個典型的多驅動問題:
`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
在綜合后會有一個關鍵警告產生,但也不會報錯,這個會在之后的布局布線的時候報錯。

同樣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
不知道大家能一眼看出來這個代碼的問題不。
先看看綜合的結果:

看著似乎沒啥問題。

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