0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

vLUT表:写 读地址输入、数据输出 入这里面包括

FPGA之家 来源:陈年丽 2019-07-13 09:24 次阅读

最近的项目逻辑资源不够,因为应用需求,要一组256个四输入的模块,后来改吧改吧,改成了一组165个6输入的模块,解决了需求问题,为什么啊,因为四输入的那个模块浪费xilinx的资源了,xilinx的LUT是六输入的,xilinx在7系列前的LUT还是五输入的,现在都变成了六输入(其实是两个五输入共享连接线)。

具体应用不说了,来看看关于LUT表这件事。

LUT表是最基本的逻辑单元,入门书籍必有的内容,基本原理这里不说了。

一般的,有SLICEM和SLICEL两种,M代表存储,L代表逻辑,好记吧。

L的功能M也能实现,M比L更复杂,所以我们直接去看SLICEM。

图上面时直接从工具里面截的,这里面包括了:

6位读地址输入(A1-A6)

8位写地址输入(WA1-WA7)

时钟(CLK)

写使能(WEN)

数据输入(DI1)

数据输出(O6)

移位寄存器输出(MC31)

除此之外,由于DI2输入线和O5输出的存在,这片LUT还可以被配置为32-depth,2-bit-data-wide的RAM

为什么写是8位,读是6位呢?有疑惑就看datasheet或者user guide啊,翻出UG474,里面有张图,看了就明白了:

拿一个SLICEM的四个LUT搭一个256的单口RAM,看到了吧,写地址8位直接用,读地址用6位,然后高两bit,一个给F7MUX,一个给F8MUX,相当于做了两级二选一。

还有一个重点要说的是移位寄存器,移位寄存器用的最多的地方就是做delay 了。

下面是简单的两段代码:

always @(posedge clk )begin

shift_r <= {shift_r[62:0],rxp} ;

end

always @(posedge clk )begin

txp <= shift_r[63];

end

大概的意思就是将rxp输入延迟64个时钟周期,然后输出。在很多文档里面都说过了,LUT单元是可以直接生成移位寄存器的,当然必须是SLICEM里面的LUT的,我们看看最后生成的结果是啥样的:

有点不好看啊,我俩简单解释一下:

1.红线代表LTU读地址输入,读地址代表了移位寄存器输出的位数,写31就是延迟32位,可见所有的地址都被连接在一个高电平上,5h11111=31,一般情况下,是A[5:1]表征地址,A[0]固定为高

2.青色是时钟,这对于SLICEL来说是没有的,因为有了时钟,才可能同步操作;

3.蓝色是需要移位的数据,程序里面的rxp,直接输入到了LUT-B的数据DI1口

4.黄色从LUT-B的MC31输出的结果,一个LUT可以作为32位的移位寄存器,因为需要移位64次, 所以需要两个LUT级联才能完成完整的移位结果

5.白色是最后的输出,注意是从O6输出的,即级联之后64位移位后的结果,再过一级FF之后,就是txp 。

这种写法比较简单直观,也有一些同学想要规范,那我们调用一下官方的原语试试:

SRL16E #(

.INIT(16'h0000), // Initial contents of shift register

.IS_CLK_INVERTED(1'b0) // Optional inversion for CLK

)

SRL16E_inst (

.Q(SRL10_r), // 1-bit output: SRL Data

.CE(1), // 1-bit input: Clock enable

.CLK(clk), // 1-bit input: Clock

.D(rxp ), // 1-bit input: SRL Data

// Depth Selection inputs: A0-A3 select SRL depth

.A0(0),

.A1(1),

.A2(0),

.A3(1) //0x1010= 10

);

这是一个经典的16位寄存器的小模块,看看布线后成啥样:

1.红线代表LTU读地址输入,读地址代表了移位寄存器输出,一般情况下,是A[5:1]表征地址,但是我们看到黄色线代表的数据激怒的是DI2,也就是用了两个5输入LUT中的一个,所以真实的地址是4‘h1010 = 10,也就是移位10+1次,A[0]固定为高

2.青色是时钟;

3.黄色是输入,rxp ,注意是从DI2口输入的

4.白色是最后的输出,注意是从O6输出的,即10位移位后的结果,也就是SRL10_r。

7系列因为LUT表地址位增加,因此还支持32位移位的原语,我们来看看:

SRLC32E #(

.INIT(32'h00000000), // Initial contents of shift register

.IS_CLK_INVERTED(1'b0) // Optional inversion for CLK

)

SRLC32E_inst (

.Q(SRL20_r), // 1-bit output: SRL Data

.Q31(SRL31_r), // 1-bit output: SRL Cascade Data

.A(5'd20), // 5-bit input: Selects SRL depth

.CE(1), // 1-bit input: Clock enable

.CLK(clk), // 1-bit input: Clock

.D(rxp ) // 1-bit input: SRL Data

);

看看会是怎样布线的:

1.红线代表LTU读地址输入,读地址代表了移位寄存器输出,一般情况下,是A[5:1]表征地址,是5‘h10100 = 20,也就是移位20次,A[0]固定为高

2.青色是时钟;

3.黄色是输入,rxp ,注意是从DI1口输入的

4.白色时最后的输出,注意是从O6输出的,即20+1位移位后的结果,也就是SRL20_r。

5.咖啡色是32位移位后的结果,也就是SRL31_r

这个移位跟信号实际delay的关系,还要看个仿真才能看明白:

图要放大看,rxp_r信号delay了11个时钟节拍(计数器从750到761)得到信号SRL10_r,delay了21个时钟节拍得到了信号SRL20_r,delay了32个时钟节拍得到信号SRL31_r。

也就是delay的时钟节拍N,与配置的LUT地址A之间的关系为:

N = A + 1

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移位寄存器
    +关注

    关注

    2

    文章

    258

    浏览量

    22227

原文标题:二大爷聊FPGA(8).LUT与移位寄存器

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview基于的简单的循环采集数据包括命令及报警功

    (Resource Name)、比特率(Baud Rate)、命令输入栏(Write String)及其开关控件、命令输出栏(Read String)及其开关控件、关闭采集函数开关
    发表于 12-05 12:14

    I2C 随机 地址的问题

    I2C 随机 操作过程 开始--发送器件地址)--ack--发送字节地址--ack--开始--发送器件地址
    发表于 12-05 08:59

    零基础学FPGA(十一)初江湖之i2c通信

    位,这里要送地址,即1010_0000;下面我来解释一下上图的代码为什么这样(1)首先在SCL在低电平期间属于数据稳定期,我们可以向
    发表于 04-07 17:09

    FIFO使能问题

    , wr, rst, clk; //,复位,时钟output [7:0] dataout;//数据输出output full, empty;//满,空wire [7:0] dat
    发表于 10-07 15:02

    电池管理器件的/操作

    电池管理器件的/操作 Dallas Semiconductor 的电池管理IC 采用相同的通信协议和相同的存储器地址不同类型的存储器可以分别进行/
    发表于 04-12 08:50 21次下载

    Linux下flash操作、擦除步骤

    的一段区域。 需要注意的是,在对NOR FLASH进行读写数据时,需要参考对应的datasheet,例如这里选用的NOR FLASH、擦除步骤如下: 通过上面的表格就知道进行相应
    发表于 06-30 09:49 1.5w次阅读
    Linux下flash操作<b class='flag-5'>读</b>、<b class='flag-5'>写</b>、擦除步骤

    如何使用寄存器级&控制基于PXI平台的FPGA

    如何使用寄存器级&控制基于PXI平台的FPGA
    发表于 10-16 15:20 14次下载
    如何使用寄存器级<b class='flag-5'>读</b>&<b class='flag-5'>写</b>控制基于PXI平台的FPGA

    MCS-51单片机指令系统“-改-”指令

    单片机首先将欲修改的寄存器的内容回ALU,对相应位进行修改,然后再整个写回原来的寄存器地址,完成该功能的指令就叫做“-改-”指令。
    发表于 11-23 13:38 1664次阅读

    利用VHDL语言和格雷码对地址进行编码的异步FIFO的设计

    信号包括异步的时钟(wr_clk)和时钟(rd_clk)、与时钟同步的写有效(wren)和数据
    的头像 发表于 08-02 08:10 2204次阅读
    利用VHDL语言和格雷码对<b class='flag-5'>地址</b>进行编码的异步FIFO的设计

    具有/遥测功能的μ模块调节器

    具有/遥测功能的μ模块调节器
    发表于 04-30 11:18 3次下载
    具有<b class='flag-5'>读</b>/<b class='flag-5'>写</b>遥测功能的μ模块调节器

    PIC何谓-修改-,导致的问题及其解决之道

    何谓-修改-,导致的问题及其解决之道: 只要PICmicro的命令,所处理的FILE (暂存器,内存,和I/O的统称),其最终的值,和命令处理前的值有关,那么,这种命令便是所谓的-修改-
    发表于 11-16 15:51 2次下载
    PIC何谓<b class='flag-5'>读</b>-修改-<b class='flag-5'>写</b>,导致的问题及其解决之道

    单片机里面“”32bit地址“”与所指向的“8bit数据“的关系

    单片机里面“”地址“”与所指向的"数据"的关系单片机里面“”地址“”与所指向的"数据"的关系对于
    发表于 11-18 20:06 10次下载
    单片机<b class='flag-5'>里面</b>“”32bit<b class='flag-5'>地址</b>“”与所指向的“8bit<b class='flag-5'>数据</b>“的关系

    车载ECU嵌入式设备的诊断测试–

    本篇讲述UDS中的服务,读写服务几乎是工程师日常使用最为频繁的服务,特别是服务。
    的头像 发表于 10-28 15:43 880次阅读
    车载ECU嵌入式设备的诊断测试–<b class='flag-5'>读</b>和<b class='flag-5'>写</b>

    优化数据库性能使用LSI MegaRAID CacheCade Pro 2.0/缓存软件

    电子发烧友网站提供《优化数据库性能使用LSI MegaRAID CacheCade Pro 2.0/缓存软件.pdf》资料免费下载
    发表于 08-10 17:38 0次下载
    优化<b class='flag-5'>数据</b>库性能使用LSI MegaRAID CacheCade Pro 2.0<b class='flag-5'>读</b>/<b class='flag-5'>写</b>缓存软件

    为什么异步fifo中地址同步在时钟域时序分析不通过?

    只考虑了地址的同步,而未考虑其他相关的电路。例如,当地址同步到时钟域时,需要同时将指针和
    的头像 发表于 10-18 15:23 681次阅读