【发布时间】:2018-08-16 04:02:54
【问题描述】:
我正在尝试实现一段这样的 C 代码:
if (test_num>0)
result = (test_num + offset) >> coeff;
else
result = -((offset - test_num) >> coeff);
为了实现这一点,我做了这样的设计:
assign abs_result = test_num > signed(0) ? result : -result;
always @(*)
case (coeff)
4'd0: abs_result_tmp = abs_result;
4'd1: abs_result_tmp = {1'b0, abs_result[7:1]};
4'd2: abs_result_tmp = {2'b0, abs_result[7:2]};
.....
default: ...
endcase
assign final_result = test_num > signed(0) ? abs_result_tmp : -abs_result_tmp;
因为我需要尽快完成这个功能,所以我不能使用寄存器来完成这个功能。只允许组合逻辑。我对这个 C 代码的 verilog 实现是最快的吗?还是有其他更好的解决方案来改善时间?谢谢
【问题讨论】: