【问题标题】:Making a vector of wires have the same value as one wire使线向量与一根线具有相同的值
【发布时间】:2019-02-05 20:29:05
【问题描述】:

我正在制作一个电路,我需要多条线来获取单个输入线的值。

现在我单独分配它们并且它有效,我只是好奇是否有更好更有效的方法来做到这一点。我当前的代码如下所示:

input [15:0] a;
wire [15:0] select;
assign select[0] = a[15];
assign select[1] = a[15];
assign select[2] = a[15];
assign select[3] = a[15];
assign select[4] = a[15];
assign select[5] = a[15];
assign select[6] = a[15];
assign select[7] = a[15];
assign select[8] = a[15];
assign select[9] = a[15];
assign select[10] = a[15];
assign select[11] = a[15];
assign select[12] = a[15];
assign select[13] = a[15];
assign select[14] = a[15];
assign select[15] = a[15];

【问题讨论】:

    标签: verilog


    【解决方案1】:

    使用重复操作符:

    assign select = {16{a[15]}};
    

    这:{16{..}} 产生内部大括号之间的重复连接。
    因此:{16{a[15]}} 将 a[15] 连接了 16 次。

    【讨论】:

      【解决方案2】:

      虽然重复操作符是最好和最明显的方法,但您也可以在组合 always 块中使用 for 循环:

      input [15:0] a;
      reg [15:0] select;
      
      always @* begin
        for (int i=0; i<16; i++) begin
          select[i] = a[15];
        end
      end
      

      所有这三种解决方案综合起来得到完全相同的结果。虽然在这种情况下我推荐使用重复运算符,但如果您需要执行一些更复杂的分配,您可能会发现此解决方案在以后很有用。

      【讨论】:

      • 我已将答案更改为使用 always @* 而不是 always_comb,以使代码与标准 Verilog 兼容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2018-03-10
      相关资源
      最近更新 更多