欢迎来真孝善网,为您提供真孝善正能量书籍故事!

高效计数器解决方案:设计与应用技巧解析

时间:11-22 名人轶事 提交错误

各位老铁们,大家好,今天由我来为大家分享高效计数器解决方案:设计与应用技巧解析,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

计数器设计的三要素

1. 初始值是多少?

每轮计数的初始值。按照习惯,一般可以从0开始数。

在某些情况下,需要加载该值然后进行倒数。

2、加1的条件是什么?

有效信号==1,有效时计数。一般来说,这个+1计数条件会被放在条件判断的低优先级。

在没有有效使能计数的设计中,默认是根据时钟节拍进行计数,相当于用作定时器。

3.结束条件

结束本轮计数的条件一般与累计计数的条件相关,如valid==1 cnt==7

如果是循环计数,记得恢复初始值

计数结束,清除条件一般为计数器控制的高优先级

对于统计计数,一般采用自增计数器。

对于不规则计数,一般采用减量计数器。

常见计数器

二进制计数器

1. 以下是无中止条件的同步二进制加法计数器的框图

根据结构框图可以直接对计数器进行结构建模。

untitled.png 如何用两种样式编写同步二进制计数器

2016-10-15 07:59:24 Screenshot.png 计数器进位输出:cout=(cnt_q==2**N -1) ? 1"b1 : 1"b0;

需要使用组合逻辑直接导出计数器进位有效信号;

如果是寄存输出,则无法级联并按顺序正确计数。

2、异步二进制计数器简介及实际使用中的缺陷

纹波计数器

untitled2.png 这种计数器使用前一级的输出作为后一级的时钟。从触发器的时钟到输出延迟Tco可以看出,到达每个计数器的时钟信号不是同时的;假设此时Q3Q2Q1Q0=0111,那么下一个CP脉冲到来时,整体而言,这四个寄存器的输出将是0111--0110--0100--0000--1000。每次变化的时间间隔为Tco,即从当前状态输出0111。当最终输出稳定到1000时,中间4个Tcos输出不稳定;如果用作计数器,这么长时间的假值会导致严重错误,特别是当计数值用作控制逻辑的判断条件时。也许在同一个镜头中,不同的控制逻辑会收到不同的计数值,导致系统挂起。

3、同步二进制计数器位数增加后的进位链问题(以加法计数器为例)

二进制同步加法计数器状态方程的一般形式

untitled3.png 考虑到现在有20位计数器,FF之间的实际最长组合路径为

Q19(n+1)=Q19n ^ (Q18n Q17n . Q0n)

虽然形式上是2级组合逻辑:用19输入的与门对FF18到FF0的触发器的输出进行与,用2输入的异或门对AND的输出进行异或FF19 的输出门。或者,也可以通过连接FF19的输入端来实现;但在实际的FPGA中,需要3级4输入的LUT,如果这样的逻辑很多,可能会判定子状态输入的LE不能与FF单元排在同一行记录计数值。列,而跨LAB 的线路延迟很明显。假设每个LUT的延迟为0.7ns,线路延迟为0.7ns+。在FPGA中,Fmax=约260MHz。这个速度不能算高。

一般来说,在运算电路中插入流水线寄存器以消除关键路径,

对于控制逻辑中的关键路径,尽量使用寄存器来切断组合逻辑链,以优化时序性能。

但是这里是计数器,所以流水线是不能恰当解决问题的。 (思考脸)

4.采用双口ROM设计实现20位二进制加法高速计数器

利用FPGA中片上RAM资源实现的二进制高速计数器,只要管理好地址与地址空间中存储的数据的对应关系,即当前状态和次要状态。格雷码、BCD码高速计数器。

依次存储在ROM地址0~1023中

{0MSB,拼接10bit数据1~1023},{1MSB,拼接10bit数据0}

这1024个单元的11bit数;

DOUTA[9:0}连接到地址ADDRA[9:0],cnt[9:0]寄存器输出端口DOUTA[9:0]的输出,

cnt[9:0]可以循环输出0~1023;

DOUTB[9:0]连接到地址ADDRB[9:0],

cnt[19:10]直接源自输出端口DOUTB[9:0](非寄存输出),

DOUTA[10]作为B口根据ADDRB读取数据的使能信号;

从而得到计数器输出cnt[19:0];

采用片上双口ROM,数据宽度为11位,深度为1024。

延迟小且固定,实现了不构成系统运算速度瓶颈的高速计数器。

5、在对计数顺序没有要求的场合,可以用LFSR代替传统的二进制计数器。作为高速计数器,它对于提高性能起着关键作用。

有关LFSR 的介绍,请参阅文章《序列产生电路》

Gray码计数器

在异步FIFO设计中,常用格雷码对依次加+1的地址指针进行编码,然后传递到异步时钟域进行比较。

1.格雷码计数器样式#1

设计思路:

按照原来的思路,可以先搭建一个二进制计数器,然后将二进制输出从Binary code转换为Gray code,这样输出就是周期性递增的Gray code。直接方法如下图

untitled4.png 然而,这种组合输出存在毛刺,计数器模块的下游模块往往对毛刺比较敏感,特别是当输出传输到异步时钟域时,因此无法直接从组合逻辑中获得计数器输出。

格雷码计数器样式#2

因此改进了计数器结构,用循环的方法实现了如下所示的闭节点寄存器输出

untitled5.png 有了上面的结构框图,按照结构化设计的思想写代码就不难了;

以4bit格雷码/二进制码为例

格雷码转换为二进制码(G--B)的方法是:

B3=G3

B2=G3^G2

B1=B2^G1=G3^G2^G1

B0=B1^G0=G3^G2^G1^G0

考虑逻辑运算公式A^0=A;所以上面的转换等价于下面的表达式

untitled6.pngRTL 实现

untitled7.png 将二进制结果转换为格雷码(B--G)。方法是

G3=B3^0=B3

G2=B3^B2

G1=B2^B1

G0=B1^B0

即G=(B1)^B

untitled8.png格雷码计数器样式#2 RTL描述

untitled9.png 其中inc作为计数器的低进位输入,同时也作为计数器的计数使能,可以控制是否运行/翻转。

3.格雷码计数器样式#3

untitled10.pngStyle #2

G--B和B--G组合逻辑和半加器,共同消耗1个时钟周期,(Reg2Reg,212MHz);

中号风格#3

仅B--G Comb与半加器一起消耗1个时钟周期,

因此,样式#3 的格雷码计数器将比样式#2 (Reg2Reg,386MHz) 更快。

格雷码计数器样式#3 RTL 描述(推荐)

untitled11.png4.格雷码计数器样式#4

您还可以使用状态机方法对格雷码计数器进行建模。简单的方法是使用格雷码编码序列作为状态机状态码,并在输出编码编码方式上实现摩尔机。状态机输出直接来自Present State寄存器的输出端。

环形计数器

环形计数器也称为移位寄存器计数器。它的输出就像在时钟脉冲的作用下不断移位触发器的输出;

如1000--0100--0010--0001--1000--……

数码管动态扫描采用环形计数器作为数码管的位选择信号输出;

下面是共阳极接法、低电平选通的八个7段数码管选位产生的环形计数器;该移位寄存器采用反馈连接,因此该电路(输出模式)可以自恢复。

untitled12.png 它的输出值根据时钟节拍而变化:

01111111--10111111--11011111--11101111--11110111--

--11111011--11111101--11111110--01111111.

Johnson计数器

环形计数器的一个特例是扭环计数器

而(扭环计数器又称为约翰逊计数器,其计数行为为:

如果当前计数器的最高位为1,则进行左移操作,将最低位补0。

如果当前计数器的最高位为0,则进行最低位加1的左移操作。

如000--001--011--111--110--100--000--001.

untitled13.png 注意,以3位移位寄存器实现的Johnson计数器为例,按照上面RTL中描述的连接方法,该计数器是不能自恢复的;如果在某个时刻,计数器值为010,则下一跳跳动的节拍为101; 101 将在下一个有效时钟沿后跳转到010。

这会在无效状态下循环;思考解决方案。

模M计数器

定义:所谓M基计数器是指总共有M种状态,计数M次产生进位信号的计数器。

也称为Modulo-M 计数器。

1. Modulo-M 计数器的计数范围是0 到M-1,然后返回到0 重新开始计数。

对于简单的模M计数,可以使用下图注释部分惯用的写法。

untitled14.png 模M(加法)计数器是一种非常常见的数字电路基本结构,在一些控制器设计中经常被用作不可缺少的基本部分。

2.看门狗定时器

看门狗定时器(WDT,Watch Dog Timer)是一个常见的电路,它实际上是一个计数/定时器。

在初始状态下,看门狗电路首先加载预设的数字;当状态机或程序开始运行时,看门狗开始倒计时;如果状态机或程序正常运行,则应每隔一段时间发出指令或信号。看门狗重新加载初始值并开始(再次)倒计时;如果看门狗减少到0,则认为程序或状态机工作不正常,需要强制整个系统复位。

(1)下面的计数器电路描述的是看门狗电路

cnt=0 用作看门狗复位状态。如果负载信号有效,则为状态机或软件给出的送狗动作。

模块counter_wdt #(参数N=8) (

输入逻辑时钟,

输入逻辑rst_n,

输入逻辑负载,

输入逻辑up_down,

输入逻辑[N-1:0]预设,

输出逻辑[N-1:0] cnt_q

);

逻辑[N-1:0] cnt;

总是_ff @(posege clk 或negedge rst_n) 开始

如果(!rst_n)

碳纳米管=0;

否则如果(加载)

cnt=预设;

否则如果(向上_向下)

cnt=cnt+1"b1;

别的

cnt=cnt-1"b1;

结尾

赋值cnt_q=cnt;

endmodule(2)另一种写WDT计数器的方法

控制向量和数据向量正交分离的设计原理简化了设计思路。

untitled15.png (3) 设计一个二进制模M计数器。计数器包含:异步清零端、同步加载、加减计数控制;计数模数(/停止位)根据参数设计。

模块counter_fsmd #(参数N=4, M=10)(

输入逻辑rst_n,

输入逻辑时钟,

输入逻辑[N-1:0]预设,

输入逻辑[1:0] func, //控制函数

输出逻辑[N-1:0] q

);

总是_ff @(posege clk 或negedge rst_n) 开始

如果(!rst_n)

q=0;

别的

案例(功能)

2"b00: q=预设;

2"b01: if(q==(M-1)) q=0;

否则q=q+1;

2"b10: if(q==0) q=M - 1;

否则q=q-1;

2"b11: q=q;

端壳

结尾

endmodule 显然,这里的N和M是相关的。预处理时执行(log2(M)舍入+1)即可自动得到相关的N;即使如此,也不建议在RTL描述的模块中使用它。编写不可综合的代码,即使在综合期间会对其进行预处理,看起来也有点混乱;如果有必要,你可以编写一个特殊的预处理文件并用`include 嵌入它。

BCD码计数器

1.区分BCD码(模60)计数器和(二进制)模60计数器

二进制码计数器和BCD码计数器是不同的,

例如,寄存器中二进制模60计数器的每一位输出为5"b111011,表示计数到59。

寄存器中BCD码模60计数器的输出为8"b0101_1001,表示计数到59;

模10以下的二进制码计数器和BCD码计数器的输出是一样的。对于十进制数0~9,

用BCD码和二进制码对它们进行编码,得到的值在形式上是一致的。

BCD码计数器是以BCD码表示计数值的计数器。

BCD 代码计数器的概念层次与二进制代码计数器的概念层次是平行的

2、设计一个BCD码模块60位计数器

计数器的值以BCD 码从0 到59 依次变化。

8421BCD码D(59)对应8"h59

采用十六进制BCD码计数器,方便数字时钟中秒和分数的解码和显示;

例如00:45:59是模60 BCD码计数器-模60 BCD码计数器-模24 BCD码计数器的级联,其中秒计数器的计数使能cin接1;生成的BCD码可以很容易地解码。显示在数码管或12864液晶屏上。

模块counter_bcd (

输入逻辑时钟,

输入逻辑rst_n,

输入逻辑cin, //cnt_en

输出逻辑[7:0] bcd,

输出逻辑cout

);

逻辑[3:0] 低,高;

总是_ff @(posege clk 或negedge rst_n) 开始

如果(!rst_n)

{高,低}=8"b0;

else if(cin==1"b1) 开始

if(low==4"d9) //低4位计数到9,下一个节拍时低4位清为0。

if(high==4"d5) //另外,如果高四位同时为5,则所有位都会清零。

{高,低}=8"b0;

别的

{高, 低}={高+1"b1, 4"b0};

别的

{高,低}={高,低+1"b1};

结尾

结尾

赋值bcd={高,低};

赋值cout=(cin==1"b1 {high,low}==8"h59) ? 1"b1 : 1"b0;

//错误计数

/*

总是_ff @(posege clk 或negedge rst_n) 开始

如果(!rst_n)

输出=1"b0;

else if(cin==1"b1 {高,低}==8"h59)

输出=1"b1;

别的

输出=1"b0;

结尾

*/

结束模块3。 BCD码模块60计数器注意的几点

(1)上述模60与bcd码的位宽8有关,也就是说实例化BCD码计数模块时,可以只提供计数模数,对bcd码的位宽进行预处理即可。

(2) 计数器进位输入cin也起到计数器计数使能的作用。当为1时,计数+1。低电平保持计数值并停止计数。

计数使能避免了计数器在系统空闲状态下仍然闲置,降低动态功耗;

具有进位输入和进位输出端口,可级联计数器,方便分层、结构化复用;

当你不关心或者不需要考虑/使用级联时,你就不需要cin。此时可以使用特殊计数使能cnt_en来控制计数器计数;如果计数器设计时没有计数使能或计数停止条件,则无论系统当前需要什么,都不需要计数,它会不断翻转并消耗功率;

如果计数器用作完整设计的子模块,最好有一个cin 或cnt_en 计数使能信号,

这样,计数器模块是可控的(受控计数)。

(3)关于上面代码的//error注释部分

一般情况下,级联计数器需要有一个超前进位输出(Cout),连接到高位计数器模块的计数使能端(Cin)。两者组合的计数电路整体上将具有更宽的计数范围;

所谓提前进位输出是指当计数器所有位都为1时,同时输出进位信号(采用组合逻辑),且进位输出不能延迟一拍/下一拍;当对应高位计数器的Cin==1时,下一拍计数值就会+1,而同一拍内当高位计数器输出1时,低位计数器恰好全为0,这实现无缝连接;

注释部分的代码描述行为是在{high,low}==8"h59的下一个beat会输出一个高脉冲。如果实例化多个模块直接级联,输出值会错位。

(4) 多个计数器模块级联时的进位链问题

将上述模60 BCD码计数器模块实例化并级联5个,

来自allocate cout=(cin==1"b1 {high,low}==8"h59) 的递归扩展? 1"b1 : 1"b0;这层组合逻辑,cin不断地从上一级cout导出,采用与门+MUX结构向下迭代,然后从最低计数模块进位cin信号到最高模块cout输出,这条路径上的级联组合逻辑,叠加在一起延迟至少有5个AND门和5个MUX那么长,考虑到极端情况,如果叠加的延迟超过了同步计数器操作的时钟周期,那么后级计数器模块实际上无法正确获取前一级送来的进位信号,因此无法继续正确计数。

4、BCD码计数器第二种实现方法

从结构和组合出发:首先搭建一个普通的二进制计数器,然后将其连接到一个组合电路,将二进制码解码并转换为BCD码;这种搭积木的设计思路是比较直观的。

下面的BCD码计数器使用二进制加法计数器将计数值解码为BCD码输出;进位输出保持在第1015次计数,从而实现了计数范围为015的模16 BCD码计数器。

赋值e=bin[3] ~bin[1];

赋值bcd[3]=e ~bin[2];

赋值bcd[2]=~e bin[2];

赋值bcd[1]=e bin[2] | ~bin[3] bin[1];

赋值bcd[0]=bin[0];

赋值cout=bin[3] (bin[2] | bin[1]);由于数字发光管的人眼视觉分辨率时间/响应时间,毛刺引起的瞬态是无法看到的。

因此,数字时钟的BCD码计数器对毛刺不敏感;

因此,这里的组合逻辑译码器直接输出计数器计数值,可以直接使用。

对于位数较少的BCD 码,可以使用组合逻辑进行转换,但这种方法有较大的局限性。

相关issue : 使用状态机实现二进制码转BCD码的功能

5、BCD码计数器第三种实现方法

由模m~10二进制同步计数器拼接而成,带进位输入输出

举个简单的例子,直接级联三个二进制模10计数器,可以计数BCD码0~D(999)(不包括最高进位输出信号)

合理选择上述方法构造BCD码X基计数器。

IP核高速计数器

1. FPGA数字逻辑设计的三种方法

原理图设计方法,不推荐

HDL描述了建模的设计方法,灵活常用

IP核构建方法,适合就用吧

IP核调用节省建模时间;由于功能已经验证,测试过程省略;原型可以重复使用;如果在适合和熟悉的基础上就可以使用,为什么不使用呢?

2.LPM计数器

LPM: 参数化模块库参数化模型IP核库

LPM计数器IP核的接口和参数介绍

无标题16.png无标题17.png3。图形化设置及调用IP核介绍

(1) 打开MegaWizard并选择LPM_COUNTER

输出文件名设置为:/home/shus/svprj/counter_ip/prj/ip/counter.v

ip目录是新建的,所以生成的IP的所有相关文件都在这个目录下。

输出生成的模型文件最好用.v命名,比如这里的counter.v。

(2) 该站点使用LPM_COUNTER IP 生成4 位、仅向上、模数10 计数器。

包含进位输入和进位输出,并设置异步清零

请注意,在图形界面的结构框图中,同步输入信号在左侧,异步信号输入信号在底部。

注意Quartus中的IP使能信号和异步清零信号(aclr)一般都是高电平有效。

(3)自动生成文件

Verilog HDL IP 的顶层文件(.v),

对于Verilog HDL实现,必须生成原型文件,并且参数设置也记录在其中;

Quartus ii 符号文件(.bsf),

可用于原理图设计,保持默认(不生成);

实例化模板文件(_inst.v),

设计中需要实例化的时候,可以直接复制这个模板,一般选择生成;

综合和面积和时序估计网表(_syn.v),保持默认(不生成);

Verilog HDL 黑盒文件(_bb.v),

可以被第三方综合工具使用。如果不做后期模仿,可以保持默认;

在这里检查counter.v 和counter_inst.v

如果是第一次调用该IP核,Quartus会弹出一个对话框询问是否将该IP核添加到当前工程中。

以后MegaWizard生成的IP核文件会默认自动添加到工程中;选择是。

(4)编写一个顶层文件counter_ip.sv,从counter_inst.v中找到实例化模板并复制到顶层文件中。您可以通过简单的修改来实例化它。

untitled18.png

手工设计计数器

1.具有自动递增和自动递减控制的模10计数器

设计一个模10计数器;当X=1时,向上计数;当X=0时,倒数。

请参阅RTL 说明

模块counter_fsmd #(参数N=4, M=10)(

输入逻辑rst_n,

输入逻辑时钟,

输入逻辑up_down,

输出逻辑[N-1:0] q

);

总是_ff @(posege clk 或negedge rst_n) 开始

如果(!rst_n)

q=0;

否则如果(向上_向下)

如果(q==(M-1))q=0;

否则q=

q + 1; else if(~up_down) if(q == 0) q<= M - 1; else q<= q - 1; else q<= q; end endmodule上述行为风格VerilogHDL描述该功能电路 对应的结构示意图 这是我脑补的,不一定同于综合软件给出的结果 untitled19.png2.手工设计一个模10计数器;当M=1时,加法计数;当M=0时减法计数 (当计数满量时,输出Z=1,其余状态Z=0) 同步时序电路的一般性设计流程 1.由给定的功能/文字描述 做STG 2.进行状态编码分配,并试图进行状态化简 3.得到状态迁移表 4.得到状态激励表;对于D触发器实现,状态激励表就是状态迁移表,因为Q(n+1)=D 5.得到激励方程,输出方程 6.检查自启动,若不能自恢复,改变某一级FF的激励函数再检查. 7.画电路图/时序(波形)图说明设计功能 (1)STG 根据问题描述画状态转移图 untitled20.png(2)状态编码 4个触发器共16种状态,此处知识用其中10种,其他6种是invalid态/多余态 untitled21.png(3)得到状态迁移表 对D触发器,状态转移表同于状态激励表 由这个激励表(真值表)化简可以得到激励方程与输出方程 激励方程指的是各触发器输入端的控制方程, 如果使用D触发器,那么就是驱动D信号的激励产生逻辑, 如果使用T触发器,那么就是产生驱动T信号的逻辑, 输出方程指的是产生Z信号的逻辑表达式 使用D触发器时,可由状态转移表,将现态编码作为输入,每个FF的次态作为输出,看做真值表,并分别作卡诺图 (4)检查自启动 如果电路的全部非工作状态都能经过若干个状态转换后,自动进入工作循环,即不存在孤立的状态(环),称这样的时序电路能自启动。只要系统对于进入有效循环的时间没有严格的限制,它仍然是合理的。 (5)得到最终的激励方程,输出方程,完整的状态转移图 这里以TFF为例,激励与输出如下 untitled23.png完整的State Transition Graph untitled24.png3.关于结构与流程框图 在初学HDL数字设计,进行结构建模风格HDL描述前,可画个结构图,心里有数,思路清晰,方便按图索骥,结构化描述模型; 在写了HDL代码后,如果功能不同于预期或有错,可以心里想象,或画个结构图,看看自己写的代码能否对应真实可行电路; 对于状态机,在做RTL描述前,可以手工绘制状态转移图,在综合后检查综合报告里的状态转移图是不是符合自己预期。 手工设计直指本质,有助于加深对数字逻辑电路结构的理解,有其意义。

书写风格补注

组合与时序分开的写法 这种风格是比较方便调试的 1.二进制Modulo-M加法计数器中的块,下面是组合与Reg不分的描述 always_ff @(posedge clk or negedge rst_n) begin if(!rst_n) cnt<= "0; else if (cnt == M-1 ) cnt<= "0; else cnt<= cnt + 1"b1; end2.组合和Reg分开的描述风格 这里约定: 1.若always块中为cnt 与cnt_d 对 则寄存器下一时刻间隔输出cnt_d,寄存器当前时刻(间隔)输出cnt ; 2.若always块中为cnt_r 与cnt_d 对 则寄存器下一拍输出cnt_d,寄存器当前输出cnt_r ; 3.若always块中为cnt_r 与cnt 对 则寄存器输入端接cnt,寄存器输出端接cnt_r; 4.若always块中为cnt 与cnt_n 对 则寄存器次态cnt_n,寄存器现态cnt; always_ff @(posedge clk or negedge rst_n) begin if(!rst_n) cnt_r<= "0; else cnt_r<= cnt_d; end always_comb begin if(cnt_r == M-1) cnt_d = "0; else cnt_d = cnt_r + 1"b1; end assign cnt = cnt_r; // max_tick = (cnt_r == M-1) ? 1"b1 : 1"b0; //这里的always_comb块也可直接替代为用assign数据流建模 //assign cnt_d = (cnt_r == M-1) ? 0 : cnt +1"b1;对于这里简单计数功能的实现,可以用第一种风格; 对于比较方便用结构化模型描述的功能,如上述的格雷码计数器,最好用第二种。 回想一下状态机的2,3段写法中,FSM的描述分解成: 状态转移逻辑(组合/译码电路) 状态保存寄存器 状态输出逻辑 就是时序组合分开写的,方便理解与调试与综合优化。

测试

单纯的计数器是个挺简单的电路,简单的查看波形就能验证。 1.简单的testbench 测试模60 BCD码计数器 `timescale 1ns/1ps localparam PERIOD = 50; //clk=20MHz module counter_bcd_tb #(parameter N=8)(); // source define logic clk; logic rst_n; logic cin; // probe define logic [N-1:0] cout; logic [N-1:0] bcd; // instantiate dut counter_bcd counter_bcd_inst0 ( .clk (clk ), .rst_n(rst_n), .cin (cin ), // cnt_en .bcd (bcd ), .cout (cout ) ); // generate clock initial clk = 1; always #(PERIOD/2) clk = ~clk; // generate reset initial begin rst_n = 1; #PERIOD rst_n = 0; #(PERIOD*5) rst_n = 1; end // initialize initial begin cin = 0; end // load stimulus, testcase initial begin #(PERIOD*10 +1); cin = 1; #(PERIOD*400); $stop; // suspend simulation end endmodule上面注释里的分类是一个testbench中一般构成的几大要素。 2.计数器测试结果波形图 (1)模60 BCD码计数器 8421BCD码编码,01011001对应表示的BCD码为D(59) untitled25.png(2)IP核模10计数器

用户评论

余笙南吟

我经常在程序设计中用到计数器,真希望能够弄懂这个计数器设计的原理!

    有12位网友表示赞同!

男神大妈

学习一下计数器设计,可以提升编程能力啊。

    有6位网友表示赞同!

陌颜幽梦

计数器这东西可真是神奇,一个小部件就能完成许多功能!

    有19位网友表示赞同!

孤廖

现在很多电子产品里都用了计数器,不知道哪个公司最早开发的呢?

    有13位网友表示赞同!

惦着脚尖摘太阳

感觉学习计数器设计需要一定的数学基础吧?

    有6位网友表示赞同!

别伤我i

想问问那些搞嵌入式技术的师傅们,计数器在实际工程中怎么用啊?

    有7位网友表示赞同!

优雅的叶子

网上有好多关于计数器的教程,可惜我太菜没看懂。

    有20位网友表示赞同!

我就是这样一个人

计数器设计真不是一件容易的事,需要仔细考虑很多因素!

    有10位网友表示赞同!

柠夏初开

学习完了记数器的设计,我就能自己动手造一个了吧?

    有13位网友表示赞同!

棃海

想做个简单的计时器,感觉可以用到计数器的知识吧。

    有13位网友表示赞同!

那伤。眞美

这个文章讲的内容还是挺实用,对于学编程的同学很有帮助!

    有5位网友表示赞同!

┲﹊怅惘。

感觉理解计数器设计,和理解计算机的工作原理有关系的吧?

    有9位网友表示赞同!

浮世繁华

我最近在研究数码逻辑电路,需要用到计数器的知识。

    有17位网友表示赞同!

可儿

这篇文章介绍了哪些种类的计数器设计呢?有具体例子吗?

    有12位网友表示赞同!

野兽之美

计数器还可以用于测量频率和周期吗?挺好奇的!

    有13位网友表示赞同!

相知相惜

我以前只知道什么是计数器,没有想过它还有这么多种设计方式。

    有16位网友表示赞同!

泪湿青衫

这个文章读起来挺深入的,对逻辑电路有一定的基础知识要求吧?

    有6位网友表示赞同!

眷恋

要是能结合一些实例代码解析计数器设计,那就更棒了!

    有16位网友表示赞同!

娇眉恨

学习完了计数器的设计,我可以尝试造个简单的玩具出来!

    有11位网友表示赞同!

■孤独像过不去的桥≈

这个标题太吸引人了,我一定要仔细看看这篇文章内容!

    有5位网友表示赞同!

【高效计数器解决方案:设计与应用技巧解析】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活