systemverilog:logic比reg更有優(yōu)勢
時間:2025-12-07 20:00:37
手機看文章
掃描二維碼
隨時隨地手機看文章
在systemverilog協(xié)議中,logic定義四態(tài)值,即向量(vector)的每個位(bit)可以是邏輯0, 1, Z或X,與verilog協(xié)議中的reg很接近。但是logic有個很明顯的優(yōu)勢,不允許多驅動。
多驅動對關鍵字logic而言是語法錯誤,在VCS編譯階段就能夠發(fā)現(xiàn),能夠更早得發(fā)現(xiàn)錯誤。
而在Verilog協(xié)議中,并沒有強調(diào)reg是不允許多驅的,因此VCS等編譯工具不會主動報錯。
需要在spyglass lint才能檢查出來,或者通過VCS 仿真發(fā)現(xiàn)。
在芯片設計中,更早的暴露問題一直是設計和驗證人員追求的目標,因此在RTL編碼時,如果正常設計是不允許多驅動的場景中,建議使用logic替代reg。
如下案例中:cfg_mode 被多驅動,在實際項目設計中,多驅動的問題往往更加隱蔽,更不容易發(fā)現(xiàn)。
module try_top (input clk , //input rst_n , //input [1:0] cfg_mode_in //);logic [1:0] cfg_mode ;clk, negedge rst_n)if(~rst_n)cfg_mode <= 1'b0;elsecfg_mode <= cfg_mode_in;clk, negedge rst_n)if(~rst_n)cfg_mode <= 1'b0;elsecfg_mode <= cfg_mode_in;endmodule
VCS報錯:

如下案例中:cfg_mode 被多驅動,但是申明成reg類型,因此VCS不會報ERROR。
module try_top (input clk , //input rst_n , //input [1:0] cfg_mode_in //);reg [1:0] cfg_mode ;always@(posedge clk or negedge rst_n)if(~rst_n)cfg_mode <= 1'b0;elsecfg_mode <= cfg_mode_in;always@(posedge clk or negedge rst_n)if(~rst_n)cfg_mode <= 1'b0;elsecfg_mode <= cfg_mode_in;endmodule





