现在公司里做设计是用SV还是Verilog?

电子说

1.3w人已加入

描述

省流:不同的公司风格不同,都会使用。

数字电路设计主要就是,选择器、全加器、比较器,乘法器,几个常用逻辑门,再加个D触发器,电路基本都能实现了。

切换到具体语法System Verilog本来就是Verilog的语法扩展,所以Verilog支持的SV都支持。

组合逻辑用assign是同样的,用always_comb代替always @*。

时序逻辑用always_ff @(posedge clk or negedge rst_n)代替always @(posedge clk or negedge rst_n)

信号声明logic代替wire/reg。不用再繁琐的区分数据类型。

端口声明可以用多维数组。一些处理用generate for不要太爽。

以上这几条改变不大,可以无缝适应。

接口Interface

SystemVerilog提供了一个新的、高层抽象的模块连接,这个连接被称为接口(Interface)。它可以将常用的比较规范的端口定义出来,方便集成连接。

举个例子,首先定义一组interface,文件为interface.vh

 


interface chip_bus (input logic clock, resetn);
    logic interrupt_req, grant, ready;
    logic [31:0] address;
    wire [63:0] data;
    modport master (input interrupt_req,
        input address,
        output grant, ready,
        inout data,
        input clock, resetn);
    modport slave (output interrupt_req,
        output address,
        input grant, ready,
        inout data,
        input clock, resetn);
endinterface
  然后在子模块中就可以include使用这一组定义。
`include "interface.vh"
module primary(
chip_bus.mater    local_bus,
chip_bus.slave    primary_local_bus,
input        clock, 
input        resetn
);


endmodule


`include "interface.vh"
module secondary(
chip_bus.slave    local_bus,
chip_bus.master  secondary_local_bus,
`ifdef FPGA
input        fpga_clk,
`endif
input        clock, 
input        resetn
);


endmodule

 

最后在top中例化两个子模块,top上也可以定义interface,直接连接到子模块,两个子模块之间的interface连接在顶层定义一个用于连线的interface。

`include "interface.vh"


module top (
chip_bus.master    secondary_local_bus,
chip_bus.slave    primary_local_bus,
`ifdef FPGA
input        fpga_clk,
`endif
input    clock, 
input    resetn
);


chip_bus local_bus();
 
primary u_primary(/*autoinst*/
        .local_bus              (local_bus.master               ), //interface//ahb_bus.mater
        .primary_local_bus      (primary_local_bus              ), //interface//axi_bus.slave
        .clock                  (clock                          ), //input
        .resetn                 (resetn                         )  //input
    );


secondary u_secondary(/*autoinst*/
        .local_bus              (local_bus.slave                ), //interface//ahb_bus.slave
        .secondary_local_bus    (secondary_local_bus            ), //interface//axi_bus.master
        `ifdef FPGA
        .fpga_clk               (fpga_clk                       ), //input
        `endif
        .clock                  (clock                          ), //input
        .resetn                 (resetn                         )  //input
    );


endmodule
使用interface可以提高集成的效率,不容易出错,方便检视。 当然要是问我推荐用SV还是Verilog,我建议是遵守公司代码规范,公司让用啥就用啥。






审核编辑:刘清

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

全部0条评论

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

×
20
完善资料,
赚取积分