5838|16

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请大家帮我看看这个FPGA的频率计的程序 [复制链接]

接入信号发生器老不能正常显示频率,因此我把程序简化再简化。。。最后就让信号发生器来一个高脉冲,计数器就加1,但是即使如此数码管上的数还是乱跳。。。我都不知道是什么问题。。。数码管显示程序是无问题的,因为我在其他程序中用过。
我把程序简略的发上来大家帮我看看,多余的东西我都删了(包括输出)。。我感觉就是这部分有问题,不知道用什么进制来计数有限制吗?
        input sw;
        input clk;
        input xinhao;
        reg [15:0] cntt;
        reg [15:0] sum;
        always@(posedge clk)
                if(xinhao)
                        begin
                        if(sw)
                                begin
                                sum<=0;
                                end
                        else
                                sum<=sum+16'b0000_0000_0000_0001;
                        end

最新回复

至少两种方法: 1、加施密特触发器 2、以较低采样频率进行多点采样,缺点是采样频率要随信号频率调整  详情 回复 发表于 2010-5-8 09:47
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮你顶
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的这段代码是没有问题的
确认你的时序通过了,没有timing violation
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
2L仁兄帮我仿真了?我现在就是无法仿真啊,modelsim老不出波行,所以我只能一步步调程序……
现在状况就是一取消复位,后三位数码管就数字乱跳,最高位倒是从一到九计数了…但是不应该是低位先变化再高位么…我输入的是2hz正弦波频率,有没有可能是和下面的数码管程序起冲突了还是怎么回事?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢各位
现在频率计算是能测出来了,但是只能测方波的,不知道正弦波的能测吗?我一测正弦波数会很大。。。不知道是代码的问题?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
从原理上来说,方波和正弦波对数字电路来说是一样的。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

7
 
我也这么认为,可是不知道为什么一测正弦波他的数字就特别大,比如4HZ他就测到9000多,而方波就不会
话说波形的-5V是算高电平还是低电平?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
我的天啦,这哪是计数的程序啊,程序本来就有问题,怎么可能成功。应该这样写
input sw;
input clk;
input xinhao;
reg [15:0] cntt;
reg [15:0] sum;


reg xinhao_buf;
always@(posedge clk)
xinhao_buf<=xinhao;

wire xinhao_edge;
assign xinhao_edge = ({xinhao_buf,xinhao}==2'b10)?1:0;

always@(posedge clk)
if(sw)
begin
sum<=0;
end
else
begin
    if (xinhao_edge)
        sum<=sum+16'b0000_0000_0000_0001;
end
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
恩,我知道楼上的意思,就是等他的上升沿是吧,我开始也是这么写的,就是用always@(posedge xinhao)判断,一来上升沿就计数加一,请问这么写和你的程序有什么不同么?不然怎么出不来?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
没有想到这个,不过是对的
寄存信号,是用抓沿电路产生脉冲比直接用信号当时钟好
时钟信号是比较麻烦的,一般不可以在时钟信号上加逻辑或者使用非时钟信号当时钟
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
always@(posedge xinhao)是学院派的做法,而且实际应该是
always@(posedge xinhao or negedge rst)
if (!rst)
   清零
else
   开始计数
原理上是对的,不过,公司做产品是没人这么用的

fpga编程最忌讳时钟满天飞
也忌讳always@(posedge clk)和always@(negedge clk)同时出现
也就是除非万不得已,否则只能有一个全局时钟信号,且这个全局时钟信号硬件上是连在芯片的全局时钟脚上的

另外,捕获信号边沿的最健壮程序是
reg xinhao_buf[1:0];
always@(posedge clk)
xinhao_buf<={xinhao_buf[0],xinhao};

wire xinhao_edge;
assign xinhao_edge = (xinhao_buf==2'b10)?1:0;


 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
多谢楼上的解答
这里我知道了,不过正弦波无法正常测频的问题还是没有解决。。。不知道你们有什么高招?
 
 
 

回复

3

帖子

0

TA的资源

禁止访问

13
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

14
 
多谢楼上,这个方法我会考虑
不过我就是不明白为何方波行正弦波不行。。。不都是靠临界点来识别高低电平的么。。。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 
TTL电平规定输出输入高电平>=2.0V,输入低电平<=0.8V
所以在0.8V到2.0V之间,电平处于不稳状态,在不稳状态,读入的是高低未知,可能读入了无数个高低变化

因此,要加施密特触发器
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
对数字电路来说,接近0和0以下都是低
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

17
 
至少两种方法:
1、加施密特触发器
2、以较低采样频率进行多点采样,缺点是采样频率要随信号频率调整
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表