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

    文章

    180

    浏览量

    22015

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    cortex-m3中如何将AHB-AP 数据/寄存器中的内容写入RAM中?

    数据/寄存器中写入数据,AHB-AP 转换地址寄存器中写入地址。但是做完上述操作之后,怎样
    发表于 04-26 14:15

    I2C 随机 地址的问题

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

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

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

    想把一个二进制文件回来,里面包含字符串和数值类型的数据,让其分别显示在表格的每一列,并可以打印。

    想把一个二进制文件回来,里面包含字符串和数值类型的数据,让其分别显示在表格的每一列,并可以打印。请问大神们有什么思路啊 ,小弟没分,但真心希望能得到大家的帮助.数组可以直接生成表格,但数组不能同时存放两个
    发表于 08-31 22:53

    用AVR单片机24C16的数据然后输出 程序该怎么,请大神赐教

    数据,24C16随时更换,用编程器给它烧波形文件数据,然后插上去。平时用的时候换存储器就可以了,然后中断输入一个方波脉冲控制着单片机输出
    发表于 09-28 23:12

    I2C组件的数据表如何从从属的子地址读取

    用,但我可以从文件告诉,这只会“碳纳米管”的字节从I2C Slave的基地址数。我能从子地址吗?再次,我已经阅读数据表和我没有办法得到答
    发表于 08-18 06:20

    FIFO使能问题

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

    如何纠正NOR Flash视频中的地址问题?

    注意:如果点击空白处无法输入,则点击字会有输入提示符 | 则可以使用键盘进行输入!此板块为[ARM裸机加强版]问题所在章节: NOR Flash 视频中的地址问题在老师的视频中,
    发表于 04-04 04:24

    请问LCD1602的状态,状态,读数据数据各指的什么?

    单片机和LCD1602的状态,状态,读数据数据各指的什么,不是太明白,请高手帮忙解答,谢谢
    发表于 04-12 06:35

    FPGA学习资料免费领取快来~这里面包含了视频课程,论文,学习笔记,书籍这几个类别!

    的学习资料,综合了大家的意见,今天特意为大家整理了一份FPGA资料大礼包,这里面包含了视频课程,论文,学习笔记,书籍这几个类别! 先给大家看下目录~!如何免费领取这些资料?扫码进群,参与活动,即可免费领取哦~扫码失败,添加微信:mlajsw96<span]`
    发表于 08-08 13:59

    单片机里面“”地址“”与所指向的"数据"有何关系呢

    单片机里面“”地址“”与所指向的"数据"的关系单片机里面“”地址“”与所指向的"数据"的关系对于
    发表于 11-26 08:04

    使用AD5420输出电流时,回不出数据是怎么回事?

    ,实在不知道从哪检查了。还有我的RST脚下拉的是12K的电阻 还有一个问题问一下,AD5420寄存器时,不是一个字节是地址,还有2个是数据。例子中回寄存器为什么用了3个字节。不是
    发表于 12-14 06:53

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

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

    为什么进程地址空间中要包括操作系统(内核)呢?

    这张图就是Linux程序运行起来后所谓的进程地址空间,这里包括我们熟悉的代码区、数据区、以及堆区和栈区。
    的头像 发表于 04-18 09:09 780次阅读