SystemVerilog的范围:为枚举的每个元素创建一个bin

时间:2018-11-21 08:38:33

标签: system-verilog

说我有一个枚举,其中包含有效命令或操作码的列表。 有没有办法为枚举的每个元素创建一个bin?

struct Item {
   let num : Int
   var isSelected : Bool
}

var numarr = [Item]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return numarr.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "id", for: indexPath)
    let item = numarr[indexPath.row]
    cell.textLabel?.text = String(item)
    cell.accessoryType = item.isSelected ? .checkmark : .none
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    updateSelection(at: indexPath, value : true)
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    updateSelection(at: indexPath, value : false)
}

func updateSelection(at indexPath: IndexPath, value : Bool) {
    let item = numarr[indexPath.row]
    item.isSelected = value
    tableView.reloadRows(at: [indexPath], with: .none)
}

override func viewDidLoad() {
    super.viewDidLoad()
    (0...100).map{Item(num: $0, isSelected: false)}
}

我尝试过类似的事情:

class command_coverage;
  enum {SEQ_WRITE_16_BIT = 32'hBEEFFOOD, SEQ_READ_16_BIT = 32'hFACEFACE, 
        ... } my_valid_commands

  covergroup cg();
    command_cp : coverpoint cmd {
                   bins valid_commands[] = each element of enum;
                 }
  endgroup

  ...

endclass

bins valid_commands[] = my_valid_commands;

但是它没有按照我的意愿工作。

1 个答案:

答案 0 :(得分:3)

可以做到:

command_cp : coverpoint my_valid_commands {
    bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};

firstlast是枚举的方法,它们分别返回第一个和最后一个值。然后将它们用作范围的一部分。

这是Mentor Questa的显示(其他模拟器可用-我的PC上安装了Questa):

enter image description here

这里是MCVE

https://www.edaplayground.com/x/5rUu

module enum_cg;

  enum {SEQ_WRITE_16_BIT, SEQ_READ_16_BIT} my_valid_commands;

  covergroup cg();
    command_cp : coverpoint my_valid_commands {
      bins valid_commands[] = {[my_valid_commands.first:my_valid_commands.last]};
                 }
  endgroup

  cg cg0 = new;

  initial begin
    my_valid_commands = SEQ_WRITE_16_BIT;
    cg0.sample;
  end    

endmodule