FPGA 学习 10 基础 counter IP 核的使用


title: FPGA
date: 2020/11/08
cover: /img/fpga.png
categories: FPGA学习
tags: FPGA学习


FPGA 学习 10 基础 counter IP 核的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amSxguPJ-1627394885887)(img/blog_img/fpga/image-20210720112353055.png)]

主要功能 :当cin为高电平,且时钟上升沿到来的时,计数器开始计数,否则不进行计数。

​ q[3:0] : 表示的是输出的当前计数值。

​ cout : 表示计数器计满的进位信号。

主要目的: 通过学习调用IP 核,掌握基本 IP 的使用(调用)流程.,并且使用了 两个IP核模块实现级联,完成 0-99的计数功能.

​ LPM(Library Parameterized Modules) 即 :参数化的宏功能模块库

IP 核配置操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTKjFCdc-1627394885891)(img/blog_img/fpga/image-20210329142846696.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2o0MXPV-1627394885893)(img/blog_img/fpga/image-20210329142926447.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFnurDih-1627394885895)(img/blog_img/fpga/image-20210329142956412.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FRndToch-1627394885896)(img/blog_img/fpga/image-20210329143014652.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VqFcphsx-1627394885897)(img/blog_img/fpga/image-20210329143040650.png)]

可以看到,当cin为高电平的时候,且时钟上升沿到来的时,计数器开始计数,否则不会进行计数

counter_tb.v 文件

`timescale  1ns/1ns
`define clock_period 20

module counter_tb ;

	reg cin ; 	//进位输入( +1)
	reg clk;	//计数基准时钟
	
	wire	cout ;	//进位输出
	wire  [3:0]q ;		//计数器输出

	counter counter0 (
	.cin(cin),
	.clock(clk),
	.cout(cout),
	.q(q)
	);

	
	initial clk =1 ;
	always #(`clock_period/2) clk =~clk ;
	
	initial begin 
		repeat (25) begin	// repeat : 这里表示重复5次
			cin = 0; //先初始化 cin =0 ; 低电平
			#(`clock_period * 5) cin = 1 ;  //隔5个时钟周期后,cin =1 变为高电平 
			#(`clock_period) 		cin = 0 ;  //隔1个时钟周期后,cin =0 变为低电平 
			end	
			#(`clock_period * 200) ;
			$stop ;
	end
	
endmodule

counter_top.v文件

module counter_top(
	cin ,
	clk ,
	
	cout ,
	q 
);
	input cin ;
	input	clk ;
	
	output cout;
	output [7:0]q ;
	
	wire cout_0 ;
	
	counter counter_0(
	  .cin(cin),
	  .clock(clk),
	  .cout(cout_0),
	  .q(q[3:0])
	);
	
	counter counter_1(
	  .cin(cout_0),
	  .clock(clk),
	  .cout(cout),
	  .q(q[7:4])
	);
	
endmodule




counter_top_tb .v 文件

`timescale  1ns/1ns
`define clock_period 20

module counter_top_tb ;

	reg cin ; 	//进位输入( +1)
	reg clk;	//计数基准时钟
	
	wire	cout ;	//进位输出
	wire  [7:0]q ;		//计数器输出

	counter_top counter_top_0(
		.cin(cin) ,
		.clk(clk) ,
		.cout(cout) ,
		.q(q) 
	);

	
	initial clk =1 ;
	always #(`clock_period/2) clk =~clk ;
	
	initial begin 
		repeat (320) begin	// repeat : 这里表示重复5次
			cin = 0; //先初始化 cin =0 ; 低电平
			#(`clock_period * 5) cin = 1 ;  //隔5个时钟周期后,cin =1 变为高电平 
			#(`clock_period) 		cin = 0 ;  //隔1个时钟周期后,cin =0 变为低电平 
			end	
			#(`clock_period * 200) ;
			$stop ;
	end
	
endmodule





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值