System Verilog (9) 结构体


结构体的声明、赋值和打印

查看代码

module tb;
  struct{
  string fruit;
    int count;
    byte expiry;
  } st_fruit;
  initial begin
    st_fruit = '{"apple",4,15};
    $display("st_fruit=%p",st_fruit);
    st_fruit.fruit="pineapple";
    st_fruit.expiry=7;
    $display("st_fruit=%p",st_fruit);
  end 
endmodule
编译结果

# Loading sv_std.std
# Loading work.tb(fast)
# 
# vsim -voptargs=+acc=npr
# run -all
# st_fruit='{fruit:"apple", count:4, expiry:15}
# st_fruit='{fruit:"pineapple", count:4, expiry:7}
# exit
# End time: 10:07:53 on Mar 31,2022, Elapsed time: 0:00:01
# Errors: 0, Warnings: 0
Done

自定义结构体数据类型

查看代码

module tb;
  typedef struct{
    string fruit;
    int count;
    byte expiry;
  } st_fruit;
  initial begin 
    st_fruit fruit1='{"apple",4,15};
    st_fruit fruit2;
    $display("fruit1=%p fruit2=%p",fruit1,fruit2);
    fruit2=fruit1;
    $display("fruit1=%p fruit2=%p",fruit1,fruit2);
    fruit1.fruit="orange";
      $display("fruit1=%p fruit2=%p",fruit1,fruit2);
  end
endmodule
编译结果

# Loading sv_std.std
# Loading work.tb(fast)
# 
# vsim -voptargs=+acc=npr
# run -all
# fruit1='{fruit:"apple", count:4, expiry:15} fruit2='{fruit:"", count:0, expiry:0}
# fruit1='{fruit:"apple", count:4, expiry:15} fruit2='{fruit:"apple", count:4, expiry:15}
# fruit1='{fruit:"orange", count:4, expiry:15} fruit2='{fruit:"apple", count:4, expiry:15}
# exit
# End time: 22:45:38 on Mar 31,2022, Elapsed time: 0:00:00
# Errors: 0, Warnings: 1
Done

合并的结构体 packed structure

查看代码

typedef struct packed{
  bit[3:0] mode;
  bit[2:0] cfg;
  bit en;
} st_ctrl;
module tb;
  st_ctrl ctrl_reg;
  initial begin
    ctrl_reg = '{4'ha, 3'h5, 1};
    $display("ctrl_reg=%p",ctrl_reg);
    ctrl_reg.mode=4'h3;
    $display("ctrl_reg=%p",ctrl_reg);
    ctrl_reg=8'hfa;
    $display("ctrl_reg=%p",ctrl_reg);
  end
endmodule
编译结果

# Loading sv_std.std
# Loading work.testbench_sv_unit(fast)
# Loading work.tb(fast)
# 
# vsim -voptargs=+acc=npr
# run -all
# ctrl_reg='{mode:10, cfg:5, en:1}
# ctrl_reg='{mode:3, cfg:5, en:1}
# ctrl_reg='{mode:15, cfg:5, en:0}
# exit
# End time: 22:55:44 on Mar 31,2022, Elapsed time: 0:00:01
# Errors: 0, Warnings: 0
Done

相关