首页 > 试题广场 >

设计者意图实现一个电路,用于寻找一个16位输入向量 `dat

[单选题]
设计者意图实现一个电路,用于寻找一个16位输入向量 `data_in` 中从最低位(LSB)算起第一个为 '1' 的比特位的位置。当以下代码用于 ASIC/FPGA 综合时,最主要的问题是什么?
module first_one_finder(
  input [15:0] data_in,
  output reg [3:0] position
);
  integer i;
  always @(*) begin
    position = 4'd0; // Default value
    for (i = 0; i < 16; i = i + 1) begin
      if (data_in[i] == 1'b1) begin
        position = i;
      end
    end
  end
endmodule
  • `for` 循环在 `always` 块中是不可综合的,会导致综合器报错。
  • 由于循环内没有 `break` 或 `disable` 语句,综合出的硬件逻辑会找到最高位(MSB)的 '1',而不是最低位的 '1'。
  • 在组合逻辑块中使用 `integer` 类型的循环变量 `i` 会产生锁存器 (Latch)。
  • 当 `data_in` 全为0时,`position` 的输出会是不定态 (X)。
不定态不是什么大问题吧
发表于 2025-09-10 21:51:09 回复(0)