读书笔记:数字逻辑基础与verilog设计之数字系统设计流程01----------位计数电路设计

位计数电路概念:所谓位计数电路,就是对一个N位寄存器中1或者0的个数进行计数。

例如:要统计一个四位寄存器data_in[3:0]='b1111中1的个数,将该数据输入位计数电路,会输出结果4。

实现位计数电路步骤:

一、首先使用自然语言来描述实现的过程

1、要将data_in[3:0]每次向右移一位,取移位后的结果的最低位data_in[0];

2、判断data_in[0]是否为1,如果是1,计数器count加1,否则,保持不变。输出计数结果;

3、判断右移后的数据data_in[3:0]是否为0,如果为0,结束整个过程,反之循环步骤1~3。

这个描述完了之后,对位计数器的基本工作过程就已经明明白白。接下来要把上述语言转换为流程图,根据最近看《数字逻辑基础与verilog设计》所学知识,使用ASM来描述比用流程图描述要清晰一些,而且更容易画出实现电路的datapath,毕竟Verilog 是硬件描述语言,最高境界就是写代码之前先把datapath画出然后用verilog描述。因此,此处也使用ASM来进行描述上述实现过程。


二、ASM设计

ASM跟FSM的状态迁移图基本功能一致,都有状态转移以及状态转移条件。只不过ASM更详细一些,把在每个状态中所要实现的功能都尽量描述出来,而FSM只描述输入输出及状态转移条件。因此,使用ASM能更好的理解实现电路所需的基本块(寄存器、移位寄存器、存储器、计数器、多路选择器、译码器)

图1 算法状态机
  • ASM如上图所示:首先在rst信号下进入状态S0,在S0对计数器count进行初始化,输入信号S用来控制这个位计数过程,当信号S=0时,在Load信号的控制下加载数据A,当S=1时,进入S1状态,在S1状态,对数据A进行右移,然后判断移位后的A是否为0,如果不等于0,判断A的最低位A[0]是否等于0,如果等于0,计数器保持不变,继续S1状态操作;如果A[0]=1,计数器count加1,然后继续S1状态。如果移位后的A=0,跳转到S2状态,计
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值