打印

基于SRL实现的shift register可以加reset吗?

[复制链接]
3417|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AutoESL|  楼主 | 2011-5-18 15:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
xst_v6s6-ug.pdf文档里面说到shift register可以实现成SRL的,FF的或者RAM的。
在所有给的模板里面,基于SRL的实现总是没有reset信号,这是必须的吗?
还是说即使我加上reset信号,xst也会添加额外的逻辑用SRL来实现呢?
有人了解这个吗?
评分
参与人数 1威望 +6 收起 理由
SuperX-man + 6

相关帖子

沙发
vivisa| | 2011-5-18 22:07 | 只看该作者
不好意思,不太了解。

使用特权

评论回复
板凳
AutoESL|  楼主 | 2011-5-19 09:35 | 只看该作者
顶起来

使用特权

评论回复
地板
atua| | 2011-5-19 09:37 | 只看该作者
这个问题比较有趣,如果文档和示例中没有reset,最好的办法就是自己编码,加上个reset,再看rtl是什么样的

使用特权

评论回复
5
AutoESL|  楼主 | 2011-5-19 21:50 | 只看该作者
我自己试过了,只要是加上reset就不能映射成SRL了,ISE综合出来就纯粹用FF来实现的。
可是公司老大一直坚信一定有可以reset的基于SRL实现的方案。

使用特权

评论回复
6
sleepybear| | 2011-5-19 22:00 | 只看该作者
应该不能加reset,因为基于LUT的SRL其实本质上是使用了LUT的SRAM单元。比如4-LUT,相当于有2^4=16个SRAM单元,将这些单元连接起来做成的SRL。其中SRAM单元可以有抽头,所以可以通过调整地址来调整移位的长度。但是那些SRAM单元应该是没有置位或者复位端的(有的话,岂不是可以当FF来用了?),应该不能实现带复位的SRL。如果用带复位的,就会综合成基于FF的。

使用特权

评论回复
评分
参与人数 3威望 +4 收起 理由
AutoESL + 1
SuperX-man + 2
atua + 1 我很赞同
7
atua| | 2011-5-20 08:43 | 只看该作者
我自己试过了,只要是加上reset就不能映射成SRL了,ISE综合出来就纯粹用FF来实现的。
可是公司老大一直坚信一定有可以reset的基于SRL实现的方案。
AutoESL 发表于 2011-5-19 21:50


嗯,有复位,有时钟,综合器肯定会认定为是FF。你可以把RTL给你们老大看看

使用特权

评论回复
8
AutoESL|  楼主 | 2011-5-20 09:32 | 只看该作者
6# sleepybear
嗯,分析的很有道理

使用特权

评论回复
9
AutoESL|  楼主 | 2011-5-20 13:23 | 只看该作者
7# atua
终于搞明白了,是这样的:
比如一个数据宽度32bits,深度为12的shift register
1. 没有reset,这样是最节省资源的,纯粹用SRL实现, 32个LUT4就可以搞定
2. 有reset, 并且把ISE的shift register extract option 打开(默认就是打开的),这样也可以用SRL实现,另外需要一些额外的逻辑来实现reset的功能,综合出来的资源是LUT#69,FF#76.
3. 有reset,并且把ISE的shift register extract option 关掉,也就是完全用FF来实现,最后的结果是:LUT#:188, FF#385
对于第三条,LUT主要用在这里,不是太明白具体含义:
    Number used exclusively as route-thrus:    187
      Number with same-slice register load:    187

使用特权

评论回复
10
atua| | 2011-5-20 14:06 | 只看该作者
7# atua
终于搞明白了,是这样的:
比如一个数据宽度32bits,深度为12的shift register
1. 没有reset,这样是最节省资源的,纯粹用SRL实现, 32个LUT4就可以搞定
2. 有reset, 并且把ISE的shift register extract option  ...
AutoESL 发表于 2011-5-20 13:23


1和3都比较好理解,第2个的rtl能贴出来看下吗?reset的目标应该是FF,而不是lut吧?

使用特权

评论回复
11
AutoESL|  楼主 | 2011-5-20 14:51 | 只看该作者
10# atua
module v_shift_registers_10 (
    clk,
    ce,
    reset,
    din,
    addr,
    dout);

parameter DATA_WIDTH = 32'd32;
parameter ADDR_WIDTH = 32'd5;
parameter DEPTH = 32'd32;

input clk;
input ce;
input reset;
input [DATA_WIDTH-1:0] din;
input [ADDR_WIDTH-1:0] addr;
output [DATA_WIDTH-1:0] dout;

reg[DATA_WIDTH*DEPTH-1:0] shiftRegMem;
integer i;

always @ (posedge clk)
begin
    if (reset)
        shiftRegMem <= {DATA_WIDTH*DEPTH{1'b0}};
    else if (ce)
        shiftRegMem <= {shiftRegMem[DATA_WIDTH*(DEPTH-1)-1:0], din};
end

assign dout = shiftRegMem[DEPTH*DATA_WIDTH-1:(DEPTH-1)*DATA_WIDTH];

endmodule

2和3的RTL代码都一样,只是ISE的选项改称我说的那样

使用特权

评论回复
12
SuperX-man| | 2011-5-21 09:51 | 只看该作者
分析的这么清楚,顶起来.
如果在加入一个Else,将信号保持住的话,可能更好些.

使用特权

评论回复
13
AutoESL|  楼主 | 2011-5-22 15:49 | 只看该作者
12# SuperX-man
多谢版主的建议

使用特权

评论回复
14
atua| | 2011-5-23 09:32 | 只看该作者
我没说清楚:L

能把映射后的rtl图贴一下吗?这样比较清楚

使用特权

评论回复
15
jennyzheng| | 2011-6-17 16:30 | 只看该作者
学习学习~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:天使宝贝 博客IT人生 From C/C++/SystemC to Xilinx FPGA

0

主题

2517

帖子

3

粉丝