📄 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 + -