2024年6月14日发(作者:)

FPGA中的有关资料中提到不要同时使用时钟的上升沿和下降沿,这个说法曾让很多

人迷惑过,今天就我的看法发表出来和大家探讨下:

第一种写法:在一个always 语句里面直接对上升沿和下降沿进行赋值

always @(posedge clk or negedge clk)

第二种写法:在不同的alwys语句里面在时钟的上升沿和下降沿对同一个寄存器进行

赋值

always @(posedge clk ) begin .......reg1<=....end //对寄存器1赋值

always @(negedge clk) begin .......reg1<=....end // 对寄存器1赋

第三种写法:在不同的alwys语句里面在时钟的上升沿和下降沿对不同寄存器进行赋

always @(posedge clk ) begin .......reg1<=....end //对寄存器1赋

always @(negedge clk) begin .........reg2<=....end // 对寄存器1

赋值

很明显,第1和第一种写法是不可行的,在verilog的语法里面有说明,编译也明显

通不过,

现在对第三种进行讨论,第三种是在时钟的上升沿和下降沿分别对不同的寄存器进行

赋值处理,

上升沿和下降沿都使用,就相当于是电平触发,电平触发比时钟沿触发更容易受到干

扰,在高速时

容易受干扰,也不够好。

解决方法

方法1.先通过PLL锁相环产生两个频率相同相位差为180度的clk1,clk2,然后在每

个clk的上升沿输出

always@(posedge clk1)

begin

...

end

always@(posedge clk2)

begin

...