【SystemVerilog】define 編譯問題

    xiaoxiao2022-07-06  211

    在top_define.svh中定義了一種枚舉類型在top_define.svh中

    `ifndef TOP_DEFINE__SVH `define TOP_DEFINE__SVH typedef enum bit[2:0] {TOP_HIB,TOP_BG,TOP_GS} FSM_STATE; typedef struct {bit[63:0] data; bit[7:0] ctrl} TR; `endif

    如果想在interface和driver中用 FSM_STATE,package 該怎麼寫呢?

    `ifndef AA_AGENT__SVH `define AA_AGENT__SVH `include "top_define.svh" `include "aa_if.sv" package aa_pkg; import uvm_pkg::*; `include "aa_driver.sv" ... endpackage

    上面的寫法能保證aa_if.sv能看到top_define.svh,但aa_driver.sv卻看不到,因為沒有include到aa_pkg中;

    `ifndef AA_AGENT__SVH `define AA_AGENT__SVH `include "top_define.svh" `include "aa_if.sv" package aa_pkg; import uvm_pkg::*; `include "top_define.svh" `include "aa_driver.sv" ... endpackage

    上面的寫法driver也看不到top_define.svh,因為第一次include"top_define.svh"已被編譯過,在第二次遇到由於top_define.svh中

    有加`ifndef AA_AGENT__SVH,所以就不會再被編譯,導致driver看不到。

    solution:

    package top_define_pkg; `include "top_define.svh" endpackage `ifndef AA_AGENT__SVH `define AA_AGENT__SVH `include "top_define_pkg.svh" import top_define_pkg::*; `include "aa_if.sv" package aa_pkg; import uvm_pkg::*; import top_define_pkg::*; `include "aa_driver.sv" ... endpackage

    把top_define.svh單獨包成一個package,採用import 方式使if和driver都可以吃到top_define.svh;因為import 會把編譯好的東西搬過來,不管是否被編譯過,與include 方式不同。

    最新回复(0)