yxm433 发表于 2012-12-18 17:16:09

用cpld检测信号下降沿,有时候检测不到,求指点

本帖最后由 yxm433 于 2012-12-18 17:20 编辑

用epm570检测1个片选信号cs的下降沿,输入电平IO是1.8V的,用示波器测量到cs是1.32V。
emp570内部使用50MHz时钟进行检测,当检测到cs下降沿到来时,neg信号就高电平。

cs信号进来cpld后,我是当它异步复位信号来用,所以先经过“异步复位、同步释放”(参考特权同学的)的方法
如图

信号进来后,用2个触发器+判断,输出neg高电平的

但是现在问题是:大概99%的情况下都能检测到cs低电平的到来,1%检测不到,

会是哪里出问题了呢?是IO电平??请大家指点

not_at_all 发表于 2012-12-18 17:37:49

输入电平IO是1.8V的,用示波器测量到cs是1.32V    80%都不到不太靠谱吧

yxm433 发表于 2012-12-18 18:28:30

cs信号是由arm提供的,io电平也是1.8v,测量是1.32v,之间直接连,这样的话是哪出问题

ab8780000 发表于 2012-12-18 18:53:16

你这个是这么检测的?neg在哪里?

yxm433 发表于 2012-12-18 20:32:49

就是图中的c信号进入进入两级触发器,再判断两个触发器的值来产生neg

chenshengyang 发表于 2012-12-18 21:39:22


分享個人淺見:

1. 內部Clock 50MHz, 必須確認速度要快於外部cs訊號兩倍以上; 也就是說如果ARM的cs操作頻率高於25MHz, CPLD可能會無法正確sampling.

2. 外部低速訊號 (Asychronized ) to 內部同步訊號方法, 就是需要透過 Over-Sampling 這個機製. 內部Clock一定要夠快,最低要超過外部的訊號兩倍以上的頻率.

3. IO 1.8V 可是您測量到只剩下 1.32 V, 這說明有訊號相互打架; 如果訊號沒有衝突, 只會有1.8V 和 0V的狀況, 1.32V 幾乎是你推我搶的狀況. 再確認看看pin assignment到底對不對 !!!

yxm433 发表于 2012-12-19 07:38:12

chenshengyang 发表于 2012-12-18 21:39
分享個人淺見:

1. 內部Clock 50MHz, 必須確認速度要快於外部cs訊號兩倍以上; 也就是說如果ARM的cs操作頻 ...

cs频率大概是1k级别的,这个频率肯定,符合你说的要求。

你3说到,我实际就一个arm输出给cpld,不存在打架的情况,还是你说其它意思?

yxm433 发表于 2012-12-19 12:47:00

今天换了块板,重新测,测到电平电压是1.8v的,但问题依旧

tangfree 发表于 2012-12-19 13:09:04

跟1k频率没关系吧,跟下降时间有关系。如果下降时间为10ns,换成平率是100M,50M够用么。换个思路,always @(posedge cs)直接可以响应沿的变化,跟50M无关。

zxq6 发表于 2012-12-19 13:17:02

不接cpld看看输出波形对不对?

yxm433 发表于 2012-12-19 14:55:12

tangfree 发表于 2012-12-19 13:09
跟1k频率没关系吧,跟下降时间有关系。如果下降时间为10ns,换成平率是100M,50M够用么。换个思路,always...

这个下降得越快对检测下降沿越有利吧,

hejc06 发表于 2012-12-19 16:24:37

为什么不用同步电路呢,从FF的D端采样CS信号,通过连续n级采样值判断是否来临下降沿,一般FF的SR端的setup time是D端的至少几十倍吧,还有如果一定要用CLR端口异步信号采样的话,降低系统时钟可能会降低检测失败的概率

chenshengyang 发表于 2012-12-19 19:38:41

yxm433 发表于 2012-12-19 07:38 static/image/common/back.gif
cs频率大概是1k级别的,这个频率肯定,符合你说的要求。

你3说到,我实际就一个arm输出给cpld,不存在打 ...

我如果要取樣異步訊號, 作法如下:

`timescale 1ps / 1ps

module asynctosync
(
    clk_i,
    rstn_i,
    async_i
    sync_o
);

input        clk_i;
input        rstn_i;
input        async_i;
output        sync_o;

reg        async_r1, async_r2;

wire    async_falling;

always @(posedge clk_i or negedge rstn_i)
begin
    if(~rstn_i) begin
      async_r1 <= #1 1'b1;
      async_r2 <= #1 1'b1;
    end else begin
      async_r1 <= #1 async_i;
      async_r2 <= #1 async_r1;
    end
end

assign async_falling = (~async_r1) && (async_r2);

assign sync_o = async_falling;

endmodule

yxm433 发表于 2012-12-19 20:37:35

hejc06 发表于 2012-12-19 16:24 static/image/common/back.gif
为什么不用同步电路呢,从FF的D端采样CS信号,通过连续n级采样值判断是否来临下降沿,一般FF的SR端的setup...

谢谢啦,明天回去试试用D端采样,看看效果怎样

ab8780000 发表于 2012-12-19 22:58:42

还第一次见拿cs去异步复位再采集啊、
异步复位本来问题就多
直接采cs吧,多打几拍

yxm433 发表于 2012-12-20 12:48:33

yxm433 发表于 2012-12-19 20:37
谢谢啦,明天回去试试用D端采样,看看效果怎样

就按照这样,问题解决了,谢谢大家的指点
页: [1]
查看完整版本: 用cpld检测信号下降沿,有时候检测不到,求指点