赞
踩
概述:
原语直接操作FPGA的资源,对FPGA的结构更加清晰,使用原语之前需要对FPGA的资源进行了解,本节为初识原语
学习内容
1. 输入缓冲原语 IBUF
2. 输出缓冲原语 OBUF
3. 查找表原语 LUT
输入输出端口必须添加缓冲后才能进入FPGA内部逻辑,用于与外部隔离。功能就是起到缓冲隔离的作用。
代码
- IBUF b_IBUF (
- .I(b),
- .O(b_IBUF_3)
- );
- OBUF c_OBUF (
- .I(c_OBUF_7),
- .O(c)
- );
结构图
代码 一个 c1=a|b逻辑功能的查找表代码如下
- LUT2 #(
- .INIT ( 4'hE ))
- c11 (
- .I0(a_IBUF_1),
- .I1(b_IBUF_3),
- .O(c1_OBUF_6)
- );
端口简介,LUT2也就是有2个输入地址线,分别对应组合逻辑的两个输入a,b。o为输出端口,也就的是得到的结果c1。具体功能就通过设计.INIT(4'hX)的值来决定,具体的功能看真值表的输出值,直接填上去。原理就是输入地址线的最小项的权重组成的数值。a|b的针织表如下图,也就是4'b1110≡4'hE。所以.INIT (4‘hE)就是这么来的
真值表
RTL结构图
技术原理图
3. verilog c代码与原语代码比较
c代码
- module primitive1(
- input a,b,
- output c,c1
- );
- assign c = a&b;
- assign c1 = a|b;
-
- endmodule
原语代码
-
- module primitive1 (
- a, b, c, c1
- );
- input a;
- input b;
- output c;
- output c1;
- wire a_IBUF_1;
- wire b_IBUF_3;
- wire c1_OBUF_6;
- wire c_OBUF_7;
- LUT2 #(
- .INIT ( 4'hE ))
- c11 (
- .I0(a_IBUF_1),
- .I1(b_IBUF_3),
- .O(c1_OBUF_6)
- );
- LUT2 #(
- .INIT ( 4'h8 ))
- c1_2 (
- .I0(a_IBUF_1),
- .I1(b_IBUF_3),
- .O(c_OBUF_7)
- );
- IBUF a_IBUF (
- .I(a),
- .O(a_IBUF_1)
- );
- IBUF b_IBUF (
- .I(b),
- .O(b_IBUF_3)
- );
- OBUF c_OBUF (
- .I(c_OBUF_7),
- .O(c)
- );
- OBUF c1_OBUF (
- .I(c1_OBUF_6),
- .O(c1)
- );
- endmodule
-
RTL结构图
技术原理图
1. ibuf,obuf是端口缓冲,所有与外部相连接的端口都需要添加,用于电气隔离
2. FPGA使用LUT查找表实现组合逻辑,具体的功能可以通过设置.INIT中的值来实现,设置的值就是真值表的输出结果。
3. 原语是直接对FPGA电路结构进行操作和连接,设计开发效率比较低,但是他可以更好的利用底层资源进行设计,可以获得更加灵活的设计。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。