概述
一般来说,在进行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编写逻辑。
在altera芯片中,时钟上到全局时钟树上使用:
clk_global_buf inst_clk_global_buf
(
.inclk (clk_in),
.outclk (clk_out)
);
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 中需要使用原语的情况的全部内容,希望文章能够帮你解决Verilog 中需要使用原语的情况所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复