在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3531|回复: 12

[求助] verilog代码设计

[复制链接]
发表于 2021-12-1 10:40:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
各位大神,请教一下:
一个时钟信号是一段时间为0,一段时间为0-1那种方波信号,verilog代码怎么写可以使一个标志信号在方波信号从开始到结束都为1?尽量用自身时钟来实现。
谢谢!

发表于 2021-12-1 13:39:35 | 显示全部楼层
楼主的意思是:有一个会停止(为'0')的时钟信号,想利用此时钟信号本身设计一个检测此时钟信号运行状态的电路,当时钟停止时,标志信号为'0',时钟有效翻转时标志信号为'1'?
 楼主| 发表于 2021-12-1 14:06:53 | 显示全部楼层


innovation 发表于 2021-12-1 13:39
楼主的意思是:有一个会停止(为'0')的时钟信号,想利用此时钟信号本身设计一个检测此时钟信号运行状态的 ...


对,是这个意思,在时钟有效翻转期间标志信号输出1,其余输出0
发表于 2021-12-1 14:37:44 | 显示全部楼层
本帖最后由 innovation 于 2021-12-1 14:56 编辑


小花321 发表于 2021-12-1 14:06
对,是这个意思,在时钟有效翻转期间标志信号输出1,其余输出0


这个跟使用什么HDL硬件描述语言关系不大,我个人反倒觉得和目标电路平台的关系比较大(ASIC? FPGA?),提供一个思路吧:
1)将输入时钟CLK_IN延时半个周期,得到CLK_DLY信号;
2)将输入时钟CLK_IN和延时时钟CLK_DLY异或,得到标志信号CLK_VLD。

输出的CLK_VLD至少有一个问题需要考虑:
1)CLK_IN和CLK_DLY边沿处的潜在毛刺风险,即CLK_VLD输出可能存在毛刺,需要作毛刺滤除处理;

如下的时序图,供参考:

image.png
发表于 2021-12-1 15:25:47 | 显示全部楼层
本帖最后由 fengbohan1 于 2021-12-1 15:28 编辑

我认为仅依靠自身时钟很难实现时钟检测的时序电路。因为标志信号其实是时钟有效标志位。若依托自身时钟,电路只有在时钟上升沿和下降沿才能变化。自身时钟停止后电路无法在改变自己的状态。所以依托自身时钟无法检测时钟停止,无法更新标志位。4楼提出的clk_dly半个时钟周期在仅依靠自身时钟的限制条件下,我觉得也很难实现。电路中一般用到时钟或者数据标志位都是和时钟信号或者数据信号一起产生的。
发表于 2021-12-1 15:39:21 | 显示全部楼层
我觉得上层楼说的有道理
发表于 2021-12-1 16:18:35 | 显示全部楼层


fengbohan1 发表于 2021-12-1 15:25
我认为仅依靠自身时钟很难实现时钟检测的时序电路。因为标志信号其实是时钟有效标志位。若依托自身时钟,电 ...


楼上两位分析得太到位了。都是我在对这个问题分析时的痛点。

楼主希望把输入信号自身用作检测电路(如果使用了触发器)的时钟,这也是我认为的难点之一,所以首先是在2#进一步确认楼主的需求。

事实上我也是觉得很难(尤其是就我从事的FPGA逻辑设计来说),所以提出这个需求可能跟目标电路平台有很大关系。

所以,只提出了设计思路,并没有提出实现方式,可以看作针对楼主的需求分析,所以:
1)CLK_DLY是CLK_IN的延时信号(怎么延时?输入时钟周期不知道怎么办?输入时钟的占空比失真和抖动怎么考虑?)
2)CLK_VLD是CLK_IN xor CLK_DLY,所以,又引入了毛刺问题。。。

楼上二位,是跟我一样,弄FPGA的?也许对ASIC芯片设计来说,这不是难事儿,我曾经用过安森美一款时钟延时芯片:NB6L295,也许对从事芯片设计的朋友来说,这个真的不难,我不知道。
发表于 2021-12-1 16:44:29 | 显示全部楼层
利用自身时钟来实现,问你如何鉴定当前时钟的0电平是时钟正常周期内的“0电平”,还是停振造成的“0延展”?你想延迟半个周期,ASIC内部并不能做到精确延迟半个周期,更何况时钟自身还有抖动。而且都停振了,你滤波怎么做?
发表于 2021-12-1 18:11:40 | 显示全部楼层
本帖最后由 innovation 于 2021-12-1 18:19 编辑


Mucar 发表于 2021-12-1 16:44
利用自身时钟来实现,问你如何鉴定当前时钟的0电平是时钟正常周期内的“0电平”,还是停振造成的“0延展” ...


我和5#、6#、8#的朋友的意见是一致的,所以4#仅能用作一个参考的思路而不是设计的实现。

8#的朋友问得好:


问你如何鉴定当前时钟的0电平是时钟正常周期内的“0电平”,还是停振造成的“0延展”?


正是想解决这个问题,所以提出了将输入延时后与原信号异或的这样一个思路。
至于怎么延迟,5#阐明FPGA应该搞不定,8#阐明ASIC能搞也效果不好:


你想延迟半个周期,ASIC内部并不能做到精确延迟半个周期


至于:输入信号抖动怎么办?占空比失真怎么办?包括CLK_VLD本身由一个异或门输出,这都会导致输出的CLK_VLD有毛刺,所以4#专门提到,如果按这个思路弄,输出毛刺问题是至少需要额外考虑的一个问题。所以8#问道:

而且都停振了,你滤波怎么做?


这个没办法,延时信号与输入信号异或比较,后续毛刺滤波是省不了的,搞不定毛刺滤波,只有放弃这个思路。

因为楼主需要的是一段代码,但我觉得能不能实现,在各种平台怎么实现,都得需要楼主进一步确认需求?有待各平台的达人来帮助楼主。

另外,结合我使用的Xilinx的FPGA来看,也许这个问题对ASIC设计来说,没那么悲观。
1)比如Xilinx FPGA的时钟切换电路BUFGMUX,有SYNC和ASYNC两种工作模式,在ASYNC模式时,其中一路输入时钟停止翻转时,仍然能切换到另一路输入;
2)Xilinx FPGA的DCM或PLL有输入时钟停止翻转、输出时钟停止翻转、锁定与否等状态信号输出,这似乎说明ASIC好像能搞定?当然如果按4#举例那样,就3个突发时钟周期的输入,Xilinx FPGA的DCM/PLL也不能正确输出输入时钟有效的状态信号,包括这个状态信号与输入时钟有效时间之间也不精确对应。

写到这里,我都开始猜测楼主是不是想做一个类似PLL输入时钟丢失的检测电路?
 楼主| 发表于 2021-12-2 16:10:44 | 显示全部楼层


innovation 发表于 2021-12-1 18:11
我和5#、6#、8#的朋友的意见是一致的,所以4#仅能用作一个参考的思路而不是设计的实现。

8#的朋友问得好 ...


谢谢各位的回复,我做的这个是用在存储器接口上的,在时钟翻转期间发送数据,因为数据接收端接收到最后一个数据不确定是最后一个还是重复的数据,所以想输出一个标志;具体我也不是很清楚,只是被告知想实现这样一个功能。我也试了,确实自身时钟是难以检测最后一个翻转的情况,加延迟形成另一个时钟再与初始时钟逻辑运算会产生毛刺;如果增加其他时钟,可能在时钟边沿出现问题。这样不好实现,就找找其他的方法避开这个问题吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-24 20:34 , Processed in 0.024291 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表