搜索
bottom↓
回复: 17

关于双时钟时序控制问题,求思路!!!

[复制链接]

出0入0汤圆

发表于 2012-3-31 08:49:19 | 显示全部楼层 |阅读模式
本帖最后由 zhanshenguilai 于 2012-3-31 14:47 编辑



我想实现的功能是 已知 clk1 clk2 ,clk2的频率要高,
在clk1开始时 产生start信号开始处理若干个clk2周期处理结束后自动产生 Done信号一个clk2周期,同时start置低,
下一个clk1开始时 又产生start信号..........

试着用状态机写了一下,还是实现不了,大侠能不能指点一下呢,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-3-31 08:52:30 | 显示全部楼层
本帖最后由 lixiangwen 于 2012-3-31 08:54 编辑

这种逻辑关系用CPLD 应该很容易实现啊~

用状态机应该也可以啊,用中断优先级呢?

出0入0汤圆

发表于 2012-3-31 08:56:25 | 显示全部楼层
最简单状态机就是计数器到节拍就动作

出0入0汤圆

 楼主| 发表于 2012-3-31 08:56:28 | 显示全部楼层
lixiangwen 发表于 2012-3-31 08:52
这种逻辑关系用CPLD 应该很容易实现啊~

能提示下吗 我想了半天没想出来

出0入0汤圆

发表于 2012-3-31 08:58:25 | 显示全部楼层
将速度低的那个当成一个普通的信号,而不是时钟就可以了。

出0入0汤圆

 楼主| 发表于 2012-3-31 08:59:03 | 显示全部楼层
NJ8888 发表于 2012-3-31 08:56
最简单状态机就是计数器到节拍就动作

我考虑的是,如果不用计数器, 而是执行若干周期自动产生结束信号, 是不是也能实现呢,后来觉得这个思路可能不对

出0入0汤圆

 楼主| 发表于 2012-3-31 09:02:38 | 显示全部楼层
ahuang227 发表于 2012-3-31 08:58
将速度低的那个当成一个普通的信号,而不是时钟就可以了。

我也这样想过,感觉有点怪就没敢用,这样貌似可以

出0入0汤圆

发表于 2012-3-31 09:04:04 | 显示全部楼层
先说说你为啥没有成功哈?

我认为用clk2做时钟脉冲,低速的那个用中断 判断

出0入0汤圆

 楼主| 发表于 2012-3-31 09:28:58 | 显示全部楼层
本帖最后由 zhanshenguilai 于 2012-3-31 14:57 编辑
lixiangwen 发表于 2012-3-31 09:04
先说说你为啥没有成功哈?

我认为用clk2做时钟脉冲,低速的那个用中断 判断  ...


我想的大体结构是这样的,但是Start信号由clk1 产生,没有办法从clk2清零, 不能在两个always内对Start 赋值:
/**********************************/
module test_module
(
    clk1,clk2,RSTn,Done
);

  input clk1;
  input clk2;
  input RSTn;
  output Done

  reg Start ;
  reg [3:0] i ;

  always@(posedge clk1 or negedge RSTn )
  if(!RSTn) begin
      Start <= 1'b0;
  end
  else  begin
      Start <= 1'b1;  
  end

  always@(posedge clk2 or negedge RSTn )
  if(!RSTn) begin
      i <= 1'b0;
  end
  else  if(Start)  begin
       case(i)

       0,1,2,3...:
              i <= i+1'b1 ;

       n-1: begin
          Start <= 1'b0;         
          Done <= 1'b1;
          i <= i+1'b1 ;
       end
      
       n:  begin
           Done <= 1'b0;
           i <= 1'b0;
       end

      endcase
  end

endmodule
/**********************************/

出0入0汤圆

发表于 2012-3-31 11:24:24 | 显示全部楼层
本帖最后由 lanliang714 于 2012-3-31 11:32 编辑

楼上的有问题吧,怎么能够在两个进程里对同一个变量赋值
个人以为:在clk1中产生start起始信号,同步到clk2中,再产生start结束信号,done在clk2中产生
或者使用clk1做使能信号:
always@(posedge clk2 )
  if(!RSTn) begin
      Start <= 1'b0;
  end
  else begin
       if(clk1)
      Start <= 1'b1;
      else   Start <=................;
  end

出0入0汤圆

 楼主| 发表于 2012-3-31 15:13:57 | 显示全部楼层
lanliang714 发表于 2012-3-31 11:24
楼上的有问题吧,怎么能够在两个进程里对同一个变量赋值
个人以为:在clk1中产生start起始信号,同步到clk2 ...

上面的例子是有问题,所以我过来跟大家求教的 ,谢谢你的回复

出0入0汤圆

发表于 2012-4-1 08:01:34 | 显示全部楼层
状态机+双时钟计数器

出0入0汤圆

 楼主| 发表于 2012-4-1 08:42:06 | 显示全部楼层
fishplj2000 发表于 2012-4-1 08:01
状态机+双时钟计数器

双时钟计数器是什么呢 大侠能详细点吗

出0入0汤圆

发表于 2012-4-1 09:25:28 | 显示全部楼层
本帖最后由 linjpxt 于 2012-4-1 09:26 编辑

有几个细节问题,请楼主解释一下,START是同步于clk1还是clk2的,clk1,clk2是不同频率的,那么它们的相位是独立的还是有关系的,然后DONE是输出的还是外面输入的.

出0入0汤圆

 楼主| 发表于 2012-4-1 09:57:24 | 显示全部楼层
linjpxt 发表于 2012-4-1 09:25
有几个细节问题,请楼主解释一下,START是同步于clk1还是clk2的,clk1,clk2是不同频率的,那么它们的相位是独立 ...

你好,是这样的:
1.START是同步于clk1的,  我想的是在一个clk1周期开始时产生
2.初步想的是clk1是clk2分频产生,相位什么的还没考虑
3.Done 是输出,由clk2产生


我的初衷是 clk1是clk2分频产生,
1.每个clk1时钟从外部读取一个数据并发出控制信号Start
2.Start信号使能后,用较高的clk2时钟来处理读取的数据,处理完后自动停止,产生Done信号
3.下一个clk1开始时,又产生Start......

不知道这样是不是逻辑上有问题

出0入0汤圆

发表于 2012-4-1 10:17:53 | 显示全部楼层
本帖最后由 linjpxt 于 2012-4-1 10:20 编辑

这样很好办,因为clk1是clk2产生的,所以他们的开始边沿都是同步的,可以不用考虑clk1的问题,直接拿clk2做时钟.而clk1由分频计数器从clk2来产生就好了.
大致代码如下,楼主看一下是不是你的愿意.
reg [N:0] clk_dev;
reg clk1;
reg start,done;
always@(posedge clk2)
clk_dev <= clk_dev +1;
if(clk_dev == DEV_NUM)
     begin
     clk_dev <= 0
     clk1 <= ~clk1;
     if(~clk1) start <= 1;
     end
else
    begin   
    if(DATA_RDY)
          begin
          done <= 1;
          start <=0;
          end
    end
end

出0入0汤圆

 楼主| 发表于 2012-4-1 10:34:10 | 显示全部楼层
linjpxt 发表于 2012-4-1 10:17
这样很好办,因为clk1是clk2产生的,所以他们的开始边沿都是同步的,可以不用考虑clk1的问题,直接拿clk2做时钟 ...

非常感谢,这样确实可以,谢谢!

出0入0汤圆

发表于 2012-4-1 15:13:20 | 显示全部楼层
这个貌似需要用到多时钟域同步技术吧,,,需要把clk1中得start信号进过同步,才能在clk2时钟域内使用
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 11:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表