【问题标题】:Setting multiple values in a vector to a single value将向量中的多个值设置为单个值
【发布时间】:2014-08-12 17:58:38
【问题描述】:

基本上,在 System Verilog 中以编程方式指定扇出的最佳实践是什么?

module fanout
#(
  parameter N = 4
)
(
  input i, 
  output j [N-1:0]
);
  always @ (*) begin
    for (int k = 0; k < N; k++) begin
      j[k] = i;
    end
  end
endmodule

这允许输出向量的宽度作为参数——这有什么问题吗?这样合成好吗?

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

    您可以使用复制操作符。这允许您复制一个值固定次数并将它们连接起来。

    示例(注意您需要将输出更改为打包数据类型output [N-1:0] j

    module fanout
    #(
      parameter N = 4
    ) 
    (
      input i, 
      output [N-1:0] j
    );
    
      assign j = {N{i}};
    
    endmodule
    

    EDA 操场上的可运行示例:http://www.edaplayground.com/x/9vn

    【讨论】:

      【解决方案2】:

      您可以在分配模式中使用default

      module fanout
      #(
        parameter N = 4
      ) 
      (
        input i, 
        output  j[N]
      );
      
        assign j = '{default:i};
      
      endmodule
      

      【讨论】:

      • 使用default 比复制操作符有什么好处吗?不幸的是,综合工具并不总是完全支持default
      • 你能解释一下default在这里做什么吗?我以前没见过。
      • 参见 IEEE 1800-2012 LRM 中的第 10.9.1 阵列分配模式
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多