晓灰灰 发表于 2018-9-21 12:53:32

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

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

第一种写法:

module   count_debug      (

                                     clk,

                                     rst_n,

                                     dout

                                     );

input                  clk;

input                  rst_n;

output         dout;

reg            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         dout;

reg            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消耗的逻辑单元要多。

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

以上结论仅供参考。


仿真波形如下:


Sunlife 发表于 2018-9-21 16:37:33

               学习了

zhangyukun 发表于 2018-9-22 09:39:54

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

晓灰灰 发表于 2018-11-29 20:28:37

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

voiue 发表于 2018-12-10 15:13:27

学习了:lol
页: [1]
查看完整版本: FPGA Verilog中计数器的2中写法对比