DSP

Verilog 中需要使用原语的情况

2019-07-13 19:57发布

    一般来说,在进行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)