⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fpja程序

📁 频率计的fpja部分程序
💻
字号:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    19:46:28 03/15/2007 
// Design Name: 
// Module Name:    plj 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module plj(sysclk,tclk,rst,gate,data,cs,clk_1M,clk_100K,clk_10K,clk_1K);//测频率

	input sysclk;//系统时钟
	input tclk;//待测时钟
	input rst;//复位信号,来自单片机
	output gate;//门限信号
	
	output [7:0]data;//计数结果,32位分4次传
	input cs;//单片机接受中断,低电平有效
	output clk_1M,clk_100K,clk_10K,clk_1K;
	
	reg [7:0]data;
	reg clk_1M,clk_100K,clk_10K,clk_1K;
	
	reg [31:0]sysnum,tnum;//计数
	
	reg [7:0]num,num_1M,num_100K;
	reg [15:0]num_10K,num_1K;
		
	reg [31:0]count;
	
	always @(posedge sysclk or negedge rst)
		begin
			if(~rst)
				begin
					clk_1M=0;clk_100K=0;clk_10K=0;clk_1K=0;
					num_1M=1;num_100K=1;num_10K=1;num_1K=1;
				end
			else if(num_1M==25)
				begin
					num_1M=0;
					clk_1M=~clk_1M;
				end
			else if(num_100K==250)
				begin
					num_100K=0;
					clk_100K=~clk_100K;
				end
			else if(num_10K==2500)
				begin
					num_10K=0;
					clk_10K=~clk_10K;
				end
			else if(num_1K==25000)
				begin
					num_1K=0;
					clk_1K=~clk_1K;
				end
			else
				begin
					num_1M=num_1M+1;num_100K=num_100K+1;num_10K=num_10K+1;num_1K=num_1K+1;
				end
		end
	
	always @(posedge sysclk or negedge rst)
		begin
			if(~rst)
				begin
					count=1;
					gate_m=1;
				end
			else if(count==25000000)
				begin
					gate_m=~gate_m;
					count=1;
				end
			else
				count=count+1;
		end
	
	always @(posedge tclk or negedge rst)
		begin
			if(~rst)
				gate=1;
			else
				gate=gate_m;
		end
	
	always @(posedge sysclk or negedge rst)//计数系统时钟
		begin
			if(~rst)
				begin
					sysnum=0;
				end
			else if(gate)
				begin
					sysnum=sysnum+1;
				end
		end
	
	always @(posedge tclk or negedge rst)//计数待测时钟
		begin
			if(~rst)
				begin
					tnum=0;
				end
			else if(gate)
				begin
					tnum=tnum+1;
				end
		end
	
	always @(posedge cs or negedge rst)//分次传送
		begin
			if(~rst)
				begin
					data=0;
					num=0;
				end
			else if(num==0)//系统时钟计数高8位
				begin
					data=sysnum[31:24];
					num=num+1;
				end
			else if(num==1)//
				begin
					data=sysnum[23:16];
					num=num+1;
				end
			else if(num==2)//
				begin
					data=sysnum[15:8];
					num=num+1;
				end
			else if(num==3)//
				begin
					data=sysnum[7:0];
					num=num+1;
				end
			else if(num==4)//待测时钟高8位
				begin
					data=tnum[31:24];
					num=num+1;
				end
			else if(num==5)//
				begin
					data=tnum[23:16];
					num=num+1;
				end
			else if(num==6)//
				begin
					data=tnum[15:8];
					num=num+1;
				end
			else if(num==7)//
				begin
					data=tnum[7:0];
					num=0;
				end
			else
				begin
					num=0;
				end
		end

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -