计数器(调用ip核)

调用IP核实现计数器

  1. 打开Quartus II
    在这里插入图片描述

  2. 创建新工程,步骤同https://blog.csdn.net/qq_43110479/article/details/115472241

  3. 引入ip核
    在这里插入图片描述
    如图,选择MegaWizrd plug-in manager
    在这里插入图片描述
    此处选择新建,然后在Arithmetic中找到LPM_COUNTER,选择后保存在项目的ip文件夹内(这里为了方便归类,顺便创建的ip文件夹,也可以放在其他地方,看个人喜好)。
    在这里插入图片描述
    引入之后便进行ip核的配置。output bus代表输出总线宽度,根据自己所需位数而定。例如,若是需要计数1000,则可以设置总线宽度为10位(即1023最大计数值),此处选择了4位。counter direction代表计数方向,这里提供了三个选项:up、down和updown,按需求选择。这里选择的是up,即向上计数。
    在这里插入图片描述
    单机next,出现如下Optional Inputs对话框。
    在这里插入图片描述
    可以选择默认的二进制计数,以及自定义Modulus(计数单位:若设为10,即使选用的是4位计数器,每当计满10位就进行清零)。附加引脚有以下选项:1、clock enable:时钟使能;2、carry-in:进位输入;3、carry-out:进位输出;4、count enable:计数使能。
    其中进位附加引脚可用于级联,或给出溢出信号。全勾上,缺啥用啥。、……继续点击next,出现一堆关于同步异步的端口选项,不勾了,继续next直到finish。
    在这里插入图片描述
    这里简单介绍:当创建ip变量时,ip文件会自动生成。ip文件是用来表示设计中的ip核。这里选择把ip文件加入到项目中即可。在导航栏中点击Files。右键单机Files,添加文件。在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    将以上两个verilog文件添加到项目。打开my_ip.v可以看到,里边有一个根据之前配置的counter,如下图。
    在这里插入图片描述

  4. tb文件编写

在编写tb文件之前,先将该文件设置为顶层。编写tb文件如下:

`timescale 1ns/1ps

module counter_tb;

	reg m_cin;
	reg m_clk_en;
	reg m_clk;
	reg m_cnt_en;
	wire m_cout;
	wire [3:0] m_q;


	 my_ip counter0(
		.cin(m_cin),
		.clk_en(m_clk_en),
		.clock(m_clk),
		.cnt_en(m_cnt_en),
		.cout(m_cout),
		.q(m_q)
		);
	
	initial m_clk_en=1;
	initial m_cnt_en=1;
	initial m_cin=1;
	initial m_clk=1;
	always #10 m_clk=~m_clk;
	
	initial begin
	
		repeat(50) begin
			m_cin=1;
			#10;
			m_cin=0;
			#40;
		end
	   $stop;
	end
endmodule





  1. 编译与仿真

编译。发现报错:my_ip不能够被定义两次,将前面添加的两个文件中的my_ip_bb.v删除,再次编译:通过。
将tb路径添加到仿真路径中,仿真波形如下。(15的时候有两次连续的c_out输出,且和cin同步,不知道问题在哪?)

在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值