赞
踩
在数字电路中,将常用的且比较复杂的功能模块设计成参数可修改的模块,让其他用户可以直接调用这些模块,这就是IP核。
1、随着FPGA的规模越来越大,它的设计也是越来越复杂。
2、随着设计规模增大,复杂度提高,使用IP核可以提高开发效率,减少设计和调试时间,加速开发进程,降低开发成本,是业界的发展趋势.
创建工程
进入IP核目录。
搜索LPM_COUNTER 这是我们要是用的IP核
双击后,存放位置选择prj文件夹下的ip文件夹 ,如果没有的话,自行创建一个。
进行IP核参数配置
我们先选择输出为4位,只选择增计数(Up only)
我们设置计数最大值是10,因为4位输出的计数范围是0-15,所以选择范围内的数作为计数最大值。附加端口按照需要来选择即可。我们不选使能端,选上进位输入输出端。
Carry-in 有效时,计数器才会计数;当计数达到预设的最大值时,Carry-out输出。
等学到级联会仔细讲解。
在File可以看到生成的IP核文件
这里面都是一些基本信息
我们需要看的是counter.v,点ip左边的展开符号
先把counter.v设置为顶层文件,然后进行分析与综合
没有问题。下面写testbench
分析与综合没问题,配置testbench,开始RTL仿真(前仿真)
只有cin高电平时才计数。在代码里设置的是repeat 5次,所以只计数到5,没有达到预设值,无进位,cout无变化。现在我们把repeat改成20次,再来观察
到9的时候cout高电平,产生进位。如果不设置预设值(纯二进制),就是在15进位
这是在数电里很常见的一个问题,两片计数器分别作为低位片和高位片,
现在来编写top文件,把两块计数器联合使用。先新建一个verilog文件
top文件的编写流程:端口命名——输入输出——类型定义——例化
按照设计图来进行编写,高位片的输入cin是低位片的输出,但是这个输出不是整体电路的进位输出cout,所以需要定义一个wire类型的cout0来作为这个“中介输出”。计数输出q有8位,每片负责4位,进行位拼接来“凑”齐完整的q
将counter_top设为顶层文件,然后进行分析和综合。
没有错误。接下来编写测试文件
其实就是拷贝之前的tb文件,然后进行相应的修改
重新设置仿真tb文件
这里要手动切换一下,不然还会保持原来的。
接下来进行RTL仿真(前仿真)
我们发现,当q到153的时候,count进位输出。这是因为之前我们设置的计数器最大值为10,所以计数到9就进位。低位片到1001时,高位片计一位,计数到10011001时 count进位输出。10011001的十进制就是153。
这个就是用两片同步十进制计数器接成百进制计数器(并行进位)。数电书299页
注意两片用的是同一个clk。当低位片1001时,cout0=1,但是将cout0=1状态传给高位片时要在下一个clk了。所以高位片计数要迟一次。
当cin=0时,进位输出cout锁0。所以高位片在1001时没有立刻输出,而是等到下一次cout0=1时才输出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。