verilog高级语法-原语-ibuf-obuf-LUT

概述:

原语直接操作FPGA的资源,对FPGA的结构更加清晰,使用原语之前需要对FPGA的资源进行了解,本节为初识原语

学习内容

1. 输入缓冲原语 IBUF

2. 输出缓冲原语 OBUF

3. 查找表原语    LUT

1. IBUF,OBUF原语简介

输入输出端口必须添加缓冲后才能进入FPGA内部逻辑,用于与外部隔离。功能就是起到缓冲隔离的作用。

代码

  IBUF   b_IBUF (
    .I(b),
    .O(b_IBUF_3)
  );
  OBUF   c_OBUF (
    .I(c_OBUF_7),
    .O(c)
  );

结构图

 

2. LUT查找表简介

代码 一个 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结构图

技术原理图

3. 总结

1. ibuf,obuf是端口缓冲,所有与外部相连接的端口都需要添加,用于电气隔离

2. FPGA使用LUT查找表实现组合逻辑,具体的功能可以通过设置.INIT中的值来实现,设置的值就是真值表的输出结果。

3. 原语是直接对FPGA电路结构进行操作和连接,设计开发效率比较低,但是他可以更好的利用底层资源进行设计,可以获得更加灵活的设计。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值