读书笔记:数字逻辑基础与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状态,计数完成信号Done拉高,然后判断S信号是否为0,如果为0,跳转到状态S0,否则保持在状态S2。

 


三、datapath设计

所谓datapath,即描述整个电路所需的基本块以及输入输出信号,基本块包括寄存器、移位寄存器、存储器、计数器、多路选择器、译码器等。本设计中,很明显只需要计数器和移位寄存器这两个数据块。对应的datapath如下所示。

图2 数据路径

 描述完dataoath之后,下一步就是要使用verilog描述datapath。这就是verilog为什么称为硬件描述语言,因为其本质使用来描述硬件电路,而不是凭空写代码。在实用硬件描述语言进行描述之前,还需要确定ASM状态机中的每个状态的控制信号。

四、控制信号

根据图2数据路径图可知,控制移位寄存器的输入信号有load、en、data_in[n-1:0]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值