|
今天在搞频率计的时候发发现一个问题:部分原程序如下:
module Fxprocess (Fx_count,Fs_count,Fh_count,Fx_valu,Fx_Duty);
input [31:0] Fx_count;
input [31:0] Fs_count;
input [31:0] Fh_count;
output [31:0] Fx_valu;
output [7:0] Fx_Duty;
parameter Fs = 50_000_000; //板载标准频率50MHz
reg [31:0] Fx_valu;
reg [7:0] Fx_Duty;
always @(Fx_count or Fs_count or Fh_count)
begin
Fx_valu <= Fs/Fs_count*Fx_count;
Fx_Duty <= Fh_count/Fs_count*100;
end
endmodule
1)、在之前的计数模块里面我是设计了一个“十进制计数器”来计算Fs_count、Fx_count、Fh_count
假设我之前的计算模块得到的十进制值分别是50_000_000、1000、25_000_000
经过 Fx_valu <= Fs/Fs_count*Fx_count;
Fx_Duty <= Fh_count/Fs_count*100;
计算后输出居然是都是0,真是郁闷啊。
2)、要是在之前的计数模块里面我是设计了一个“二进制计数器”来计算Fs_count、Fx_count、Fh_count
32位二进制计数器
always @(posedge Clk or negedge CLR)
begin
if(! CLR)
Data_out = 0;
else if(EN)
begin
if(Data_out==MAX)
Data_out = MAX;
else
Data_out = Data_out + 1;
end
end
经过
Fx_valu <= Fs/Fs_count*Fx_count;
计算后就可以得出正确的输出。
不知是什么原因,请高手指教! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|