打怪升级之时序电路信号的赋值问题

文章讲述了时序电路中信号赋值的关键点,强调了时钟信号和条件信号的稳定性对于正确赋值的重要性。为了解决条件信号在上升沿变化导致的问题,建议使用高频时钟定义低频时钟,并通过时钟延迟来确保条件稳定。示例展示了如何通过不同时钟信号的划分来实现这一策略。
摘要由CSDN通过智能技术生成

时序电路信号赋值

所谓赋值,就是指在某一特征信号的作用下,改变其他某个其他信号的大小的办法。常见的时序电路赋值由三个部分组成:
1.条件信号,这种信号往往也是一段又一段的,由某个控制它赋值的时钟信号的上升沿或下降沿像刀子一样切开它的连续信号,让不同的段之间的数据可以完全不同。
2.时钟信号,时钟信号的上升沿或下降沿就是刀子,切开被赋值信号的时序,让它可以随着时间表达不同的信息。
3.被赋值信号,如题。
那么,打怪升级的经验体现在哪里呢?
体现在这样一条规律:时钟信号给被赋值信号赋值时,条件信号最好保持稳定。

举例来说:
在这里插入图片描述
像这样,上升沿信号改变时,条件信号也是变化中的,就容易造成实际电路的信号捕捉不到,信号到了却没响应的问题。

那么怎么解决这一问题呢?
最常见的办法就是设置一个更高频的时钟(或者让实际时钟变得低频一些)。因为上升沿的FPGA往往是好做的,国内做ASCI流片时厂子们很多要求尽可能做的用posedge的一边,所以常见的办法是用高频时钟定义低频时钟。
像这样:
在这里插入图片描述
分别将用于判断的时钟周期与用于条件的时钟周期分开,这样条件语句将由高频时钟给定,这样可以方便的生成纯盖住上升沿的独峰信号。

个人习惯:
比较容易记住的是使用如下方式进行三种时钟的划分:

reg judge_clk;
reg half_clk;
reg half_clk_dly;

always@(posedge half_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        judge_clk<=  1'b0;
    else
        judge_clk<=  ~judge_clk;

assign half_clk_dly = ~half_clk;

这样的三个信号如此含义:
half_clk:单独的高频时钟;
judge_clk:判断时钟;
half_clk_dly;高频时钟延迟时钟;

演示效果如下:
在这里插入图片描述
这样依赖,half_clk与judge_clk同上升沿,可以使用half_clk_dly的上升沿来定义条件信号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考琪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值