Verilog 中需要使用原语的情况

    一般来说,在进行HDL代码编写时,不需要直接或间接地进行原语调用,因为随着FPGA设计规模越来越庞大,人脑应该集中于抽象层次较高的工作中去,而将这些具体实现细节交给编译器来完成。不过有些时候,原语或者库中底层模板的调用还是十分必要的。

1.    时钟相关原语

    如果时钟信号不是由专门FPGA芯片的专用时钟管脚引入FPGA的,那么它通常就需要在FPGA内部被显式地连接到时钟树资源上,否则,知己恩使用这种不经过时钟树的时钟信号,会给FPGA设计的时序带来非常麻烦的问题,进而导致逻辑行为失败。

eg:

    wire    innerclk,    gclk;

    BUFG    onToGlobalClockTree

    (

        .I        (innerclk        ),

        .O       (gclk            )

    );

    always @ (posedge gclk)

    begin

        ... 

    end 

    通过显式调用BUFG这样一个库中的底层模块,告诉编译器,我们希望将innerclk信号引入全局时钟树,而其经过全局时钟树后的名字就改为gclk。后续HDL代码便可以放心地基于gclk编写逻辑。


2.    差分输入、输出原语

eg:

    IBUFGDS    clklvds

    (

        .I            (LVDSCLK_p        ),

        .IB          (LVDSCLK_n        ),

        .O           (sclk                    )

    );

    BUFG    onToGlobalClockTree

    (

        .I        (sclk            ),

        .O       (gclk           )

    );

示例中,将差分时钟转换成单端时钟sclk,并通过GUFG原语将其引至全局时钟网络。


3.    接口相关原语

    当需要使用接口资源中的寄存器来实现高速数据采集时。


4.    UDP

    用户自定义原语(User Defined Primitive)

Verilog 中需要使用原语的情况_第1张图片


你可能感兴趣的:(学习笔记)