Vivado 2023.2版本的新增功能

描述

Vivado在前一段时间更新了2023.2版本,经过一段时间的使用这个版本还是很丝滑的,用起来挺舒服。

特别是增加了一个Lint检查的按钮,可以让我们提前知道RTL设计有什么风险。做数字IC设计的时候写完代码之后可能不是直接就去仿真,而是先拿Spyglass做一次检查,消除掉lint错误之后再拿去仿真,Vivado增加了这个功能,让我们能够更好的去掌控自己的代码。

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

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

 

先来综合一下看看,下面是报告。

Vivado

看起来一点问题都没有,报了一大堆信息,也许你仔细看还能看到其中一条警告说c被综合成一个latch了,要是信息更多的话还会看到他不。

而运行lint之后,会帮我们生成一个表,可以很清晰的看到这些信息:

Vivado

再来看另外一个典型的多驱动问题:

 

`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

 

在综合后会有一个关键警告产生,但也不会报错,这个会在之后的布局布线的时候报错。

Vivado

同样lint也会把这个问题给暴露出来:

Vivado

还有一些小问题比如位宽不匹配的问题,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

 

不知道大家能一眼看出来这个代码的问题不。

先看看综合的结果:

Vivado

看着似乎没啥问题。

Vivado

lint报了一堆位宽不匹配的问题。

先看看第一个kkk的位宽不匹配,可以看到在在submodule这个模块里面输出了一个4bit的变量,但是我们在例化这个模块的时候kkk忘记定义了,这个时候kkk就被隐式推断为了一个1bit的wire类型的变量,这样就出现了潜在的bug。其他几个位宽不匹配也是一样的,当然不是所有的位宽不匹配都是bug,这个就需要我们明确知道哪些是我们故意这样设计的。

通过观察lint报告,可以让我们更加了解自己的设计,让问题发现在最开始的地方,而不是等到最后布局布线了甚至更晚,才发现这种低级的问题。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分