首页 > 技术文章 > verilog之时钟信号的编写2

electricdream 2020-07-16 23:16 原文

verilog之时钟信号的编写2

1、时钟信号的特点

时钟信号除了可以根据时序一个个变化列举出来,还可以利用其循环的变化的特点,使用循环执行语句always来实现。这种方法实现的时钟信号可以一直执行且不需要关注每个变化点的延时。

2、基于begin-end块的时钟信号

initial begin
    clk=0;
    clk1=0;
    clk2=0;
end
//way1
always #1 clk=~clk;
//way2
always begin
    #1 clk1=~clk1;
    #1 clk2=~clk2;
end

方法1是最方便的时钟信号,只有一条执行语句,甚至不需要使用块来封装。

方法2则是使用begin-end来实现两个时钟信号clk1和clk2,可以简单地分析出clk2的周期是clk1的两倍。clk1是2系统周期,clk2是4系统周期。占空比就是50%,一条语句是无法实现其他占空比的时钟信号的。

3、基于fork-join块的时钟信号

initial begin
    clk=1;
    clk1=1;
end
always fork
#1 clk=~clk;
#2 clk1=~clk1;
#3 ;
#50 ;
join

可以观察到fork-join的时钟信号的周期是最大延时的两倍。每个时钟信号的周期都是一致的。其他延时只会改变时钟信号的相位。从这里也可以看出fork-join的块的工作原理:先找到最大延时,其他延时执行语句在其子期间中显示。使用fork-join可以仿真有时钟延时的信号输入。

4、小结

使用循环执行语句来实现时钟信号是常用的方法。一般的时钟信号的激励也是利用循环执行来模拟的。

推荐阅读