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
...
发布评论