|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2018-10-19 11:20:20
|
显示全部楼层
回复 42# wjcdx
首先还是非常欢迎大家积极投入讨论哈,信号命名长度这个确实可以优化,比如DATA_WIDTH, 我们可以缩写定义为DW,但是这个东西不用再重命名,其他有些在搞一些重名也是可以,但是重名的含义要清楚,而不能是通用的PAD之类的,比如正数最大值,就是PMAX,复数最大就用NMAX。
另外对于负最大处理,我之前的讲述提到过,尽可能用接近行为的RTL描述方式,不要自己优化成接近门级的电路,因为行为级在跟贴近我们的阅读习惯,具体用几个与,非门,或门实现,目前的综合工具优化效果非常好。 你可以把我描述和代码和你写之前对din取反的综合一把试试,两个综合结果不会相差太大。我们希望呈现出来大家读到代码,看到13行的时候,就很快明白我们的设计意图是赋值一个正最大值,而不是看到一个非门,还要去逻辑推算一下,这个东西是啥,这个才是真正的可读性。
优化代码如下:
01.module ABS
02. #(
03. parameter DW = 8
04. )
05. (
06. input [DW-1:0] din,
07. output reg [DW-1:0] dout
08. );
09. localparam PMAX = {1'b0,{(DW-1){1'b1}}};
10. always @(*) begin
11. if (din[DW-1] == 1'b1) begin // negative data
12. if (din[DW-2:0] == {(DW-1){1'b0}}) begin // Max
13. dout = PMAX;
14. end
15. else begin
16. dout = {1'b0,((~din[DW-2:0])+1'b1)};
17. end
18. end
19. else begin
20. dout = din;
21. end
22. end
23.endmodule |
|