FPGA Verilog中计数器的2中写法对比

描述

功能是,计数记到24,清零,重新计数….

第一种写法:

module   count_debug        (

                                    clk,

                                    rst_n,

                                    dout

                                    );

input                    clk;

input                    rst_n;

output         [4:0]  dout;

reg              [4:0]  cnt;

always @(posedgeclk or negedge rst_n) begin

        if(rst_n == 1'b0) begin

                  cnt <= {5{1'b0}};

        end else if(cnt == 5'd24)begin

                  cnt <= {5{1'b0}};

        end else begin

                  cnt <= cnt + 1'b1;

        end

end

assign                  dout = cnt;

endmodule

        这种写法是我常用的方式,现在来看看消耗的逻辑单元



; Family                             ; Cyclone II                                    ;

; Device                             ; EP2C8Q208C8                                 ;

; TimingModels                      ; Final                                           ;

; Total logicelements               ; 9 / 8,256 ( <1 % )                     ;

;     Total combinational functions  ; 9 / 8,256 ( < 1 % )           ;

;     Dedicated logic registers      ; 5 / 8,256 ( < 1 % )               ;

; Totalregisters                    ; 5                                              ;

; Total pins                         ; 7 / 138 ( 5 % )                                ;

; Total virtualpins                 ; 0                                              ;

; Total memorybits                  ; 0 / 165,888 ( 0 %)                    ;

; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % )              ;

RTL图如下:



第二种写法:

module   count_debug        (

                                     clk,

                                  rst_n,

                                        dout

                                    );



input                    clk;

input                    rst_n;

output         [4:0]  dout;

reg              [4:0]  cnt;

always @(posedgeclk or negedge rst_n) begin

        if(rst_n == 1'b0) begin

                  cnt <= {5{1'b0}};

        end else if(cnt < 5'd24)begin

                  cnt <= cnt + 1'b1;

        end else begin

                  cnt <= {5{1'b0}};

        end

end

assign                  dout = cnt;

endmodule

消耗的逻辑单元:

; Family                             ; Cyclone II                                    ;

; Device                             ; EP2C8Q208C8                                 ;

; TimingModels                      ; Final                                           ;

; Met timingrequirements            ; Yes                                         ;

; Total logicelements               ; 6 / 8,256 ( <1 % )                      ;

;     Total combinational functions  ; 6 / 8,256 ( < 1 % )            ;

;     Dedicated logic registers      ; 5 / 8,256 ( < 1 % )                ;

; Totalregisters                    ; 5                                                ;

; Total pins                         ; 7 / 138 ( 5 % )                                  ;

; Total virtualpins                 ; 0                                                ;

; Total memorybits                  ; 0 / 165,888 ( 0 %)                       ;

; EmbeddedMultiplier 9-bit elements ; 0 / 36 ( 0 % )                 ;


RTL图如下:




第一种写法比第二种写法多耗了3个逻辑单元。

从上面的逻辑单元和RTL图对比,在用计数器实现相同的功能时,可以看出  ==  COUNT 消耗的逻辑单元比   <   COUNT  消耗的逻辑单元要多。

这只是从例子上看出来的,那具体其他情况是不是,就不知道了。目前我在学习中,

以上结论仅供参考。


仿真波形如下:

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分