如何让等精度频率计实时更新数据?
望各位不吝赐教,谢谢!
肯定有人会的!
DDDDDDDDDD
module Counter
(
CLK, Clear,
Sig_in, Switch,
Cnt_data1, Cnt_data2
);
input CLK, Clear;
input Sig_in, Switch;
output [31:0]Cnt_data1, Cnt_data2;
/********************************************/
parameter Freq_100KHz = 17'd100_000, //Fs = 100,000
Ns0 = 14'd9_999; //Ns0 = 10,000
/****************** 被测信号 *****************/
reg [31:0]count1 =32'd0, count2 = 32'd0;
reg trigger = 1'b0;
reg [13:0]Sig_num = 14'd0;
reg Sig_flag;
always @ ( posedge Sig_in )
begin
if( Clear == 1'b1 )
begin
count1 <= 32'd0;
Sig_flag <= 1'b0;
end
else if( Switch == 1'b1 && count1 <= Sig_num )
begin
trigger <= 1'b1;
count1 <= count1 + 1'b1;
Sig_flag <= 1'b1;
end
else
begin
trigger <= 1'b0;
count1 <= count1;
Sig_flag <= 1'b0;
end
end
/****************** 标准信号 *****************/
always @ ( posedge CLK )
begin
if( trigger == 1'b1 )
count2 <= count2 + 1'b1;
else
count2 <= count2;
end
/********************************************/
always @ ( posedge CLK )
begin
if( ( count2 < Ns0 ) && ( Sig_flag == 1'b1 ) )
begin
Sig_num <= Sig_num + 1'b1;
end
else
begin
Sig_num <= Sig_num;
end
end
/********************************************/
assign Cnt_data1 = count1 * Freq_100KHz;
assign Cnt_data2 = count2;
/********************************************/
endmodule
因为你的模块从设计上看本身就是只能测试一次(是吗?),
同时又没有恢复初始状态的方法啊。
我用状态机做的系统控制,Clear每次计数前都清零了,应该可以不停的测量,您有没有比较好的计数方法?
module Counter
(
CLK, Clear, Sig_in,
Enable_0, Switch,
Cnt_data1, Cnt_data2
// Count_over
);
input CLK, Clear;
input Sig_in, Enable_0, Switch;
output [31:0]Cnt_data1, Cnt_data2;
// output reg Count_over;
/********************************************/
parameter Freq_100KHz = 17'd100_000, //Fs = 100,000
Ns0 = 14'd9_999; //Ns0 = 10,000
/****************** 被测信号 *****************/
reg [31:0]count1 =32'd0, count2 = 32'd0;
reg trigger = 1'b0;
reg [13:0]Sig_num = 14'd0;
reg Sig_flag;
always @ ( posedge Sig_in )
if( Clear == 1'b1 )
begin
count1 <= 32'd0;
Sig_flag <= 1'b0;
// Count_over <= 1'b0;
end
else if( Enable_0 )
begin
if( Switch == 1'b1 && count1 <= Sig_num )
begin
trigger <= 1'b1;
count1 <= count1 + 1'b1;
Sig_flag <= 1'b1;
end
else
begin
trigger <= 1'b0;
count1 <= count1;
Sig_flag <= 1'b0;
// Count_over <= 1'b1; //count_over结束计数标志
end
end
/****************** 标准信号 *****************/
always @ ( posedge CLK )
begin
if( Clear == 1'b1 )
begin
count2 <= 32'd0;
end
else
begin
if( trigger == 1'b1 )
begin
count2 <= count2 + 1'b1;
end
else
begin
count2 <= count2;
end
end
end
/********************************************/
always @ ( posedge CLK )
begin
if( Clear == 1'b1 )
begin
Sig_num <= 14'd0;
end
else
begin
if( ( count2 < Ns0 ) && ( Sig_flag == 1'b1 ) )
begin
Sig_num <= Sig_num + 1'b1;
end
else
begin
Sig_num <= Sig_num;
end
end
end
/********************************************/
assign Cnt_data1 = count1 * Freq_100KHz;
assign Cnt_data2 = count2;
/********************************************/
endmodule
我用状态机做的系统控制,Clear每次计数前都清零了,应该可以不停的测量,您有没有比较好的计数方法?
