FPGA 计数器IP核调用与验证 Verilog语言

案例:计数器

1.设计定义–>分析,将问题转化控制电路

调用IP核设计一个模10的四位计数器。

计数器模块设计

2.综合

添加单个文件需手动Add

修改.v文件-->如何修改修改IP核?

四位计数器模块仿真

`timescale 1ns/1ns
`define clock_period 20//时钟周期20ns 也就是频率为50MHz
module counter_tb;

reg cin;//进位输入
reg clock;//计数基准时钟
wire cout;//进位输出
wire[3:0] q;

counter counter0(//调用模块
	.cin(cin),
	.clock(clock),
	.cout(cout),
	.q(q)
	);

initial
 begin
  repeat(20)//重复20次,cin低电平保持5个时钟周期,高电平保持1个时钟周期
   begin
   cin=0;
   #(`clock_period*5) cin=1;
   #(`clock_period) cin=0;	
	end
  #(`clock_period*200) $stop;
 end

initial clock=1;
always #(`clock_period/2)
clock=~clock;
 
endmodule

3.布局布线

4.时序仿真与功能仿真

右击tb文件,右击recomplie,没有错误和警告,点击restart


5.编程下载和在线测试

四位计数器级联成八位计数器

调用IP核设计一个四位计数器,并在此基础之上级联成八位计数器。 

1.设计定义–>分析,将问题转化控制电路

四位计数器级联成八位计数器模块设计

2.综合

四位计数器级联成八位计数器模块.v

module counter_top(cin,clock,cout,q);
/*
四位计数器级联成八位计数器,计数记到1111_1111(255),进位输出1
*/
input cin;//计数使能信号
input clock;//计数基准时钟
output cout;//进位输出信号
output[7:0] q; 

wire cout0;//counter0的进位输出作为counter1的进位使能信号

 counter counter0(
	.cin(cin),
	.clock(clock),
	.cout(cout0),
	.q(q[3:0])//低四位计数
	);
	
counter counter1(
	.cin(cout0),
	.clock(clock),
	.cout(cout),
	.q(q[7:4])//高四位计数
	);
		
endmodule

四位计数器级联成八位计数器模块仿真

`timescale 1ns/1ns
`define clock_period 20//时钟周期20ns 频率为50MHz
module counter_top_tb;

reg cin;//进位输入
reg clock;//计数基准时钟
wire cout;//进位输出
wire[7:0] q;

counter_top counter_top0(
	.cin(cin),
	.clock(clock),
	.cout(cout),
	.q(q)
	);

initial
 begin
  repeat(300)//重复300次,cin低电平保持5个时钟周期,高电平保持1个时钟周期
   begin
   cin=0;
   #(`clock_period*5) cin=1;//cin=1时,计数使能,时钟到,计数++
   #(`clock_period) cin=0;	
	end
  #(`clock_period*200) $stop;
 end

initial clock=1;
always #(`clock_period/2)
clock=~clock;
 
endmodule

3.布局布线

4.时序仿真与功能仿真


5.编程下载和在线测试

猜你喜欢

转载自blog.csdn.net/weixin_43319452/article/details/112836196