我有各种不同的输入,宽度不同。我必须检测每个输入是否在某些特定范围内。例如,输入可以是6位,因此理论上的值为0-63。但是,我想看看它是否恰好是2-5,8,14-50,52,54,56-58,61-63。有没有哪种方法比直接上升范围或相等的比较更适合于区域综合?目前我会:
always_comb begin
value_is_in_special_range = 1'b0;
if (
(value >= 'd2 && value <= 'd5) ||
(value == 'd8) ||
(value >= 'd14 && value <= 'd50) ||
(value == 'd52) ||
(value == 'd54) ||
(value >= 'd56 && value <= 'd58) ||
(value >= 'd61 && value <= 'd63) ||
) begin
value_is_in_special_range = 1'b1;
end
end各种输入的特定范围是相当随机的,可以很好地落在相对较少的大范围内,或者它们可以分散在整个地方。
发布于 2022-08-14 17:18:52
您应该能够将这段代码放入合成工具中,优化应该负责共享公共子表达式,以使所有这些比较最有效。这假设要比较的所有值和范围都是常量。
顺便说一句,用SystemVerilog编写这个表达式的一种更简单的方法是使用set成员资格运算符:
assign value_is_in_special_range =
value inside {[2:5], 8, [14:50], 52, 54, [56:58], [61:63]};https://stackoverflow.com/questions/73352607
复制相似问题