时序电路信号赋值
所谓赋值,就是指在某一特征信号的作用下,改变其他某个其他信号的大小的办法。常见的时序电路赋值由三个部分组成:
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的上升沿来定义条件信号。