搜索
bottom↓
回复: 23
打印 上一主题 下一主题

定义的数组,如何让他占用memory呀

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2014-8-22 14:15:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
reg [15:0]member[99:0];

always @ (posedge clk)
if(wrn == 1)
begin
        case(ab)
        3'b000:addr <= db;
        3'b001:member[addr[7:0]] <= db;
        endcase
end

always @ (posedge clk)
if(rdn == 1)
begin
        case(ab)
        3'b000:;
        3'b001:data <= member[addr[7:0]];
        endcase
end



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

24
发表于 2014-9-19 15:34:21 | 只看该作者
在配置选项中可以选择 是综合成寄存器 还是综合成memory  可能通过RTL view查看到底是register 还是memory

出0入0汤圆

23
发表于 2014-9-10 02:23:20 | 只看该作者
下面是我自己建的generic sram module,使用多年,
altera, xilinx, lattice 相關的 tool 都可以 compile 成 memory。
給你參考


//============================================================================//
// Filename: ramsp.v                                                          //
// Module:   ramsp                                                            //
// Function:                                                                  //
//           Sync single-port simulation and FPGA-synthesizable model         //
//                                                                            //
// Author:   Jarod                                                            //
// Date:     2005/11/25,                                                      //
//                                                                            //
//============================================================================//

module ramsp_1024x18
                (
                CLK,
                WE,
                RD,
                AD,
                DI,
                DO
                );


parameter                        ADDR_BITS = 10;
parameter                        MEM_SIZE = 1024;
parameter                        DATA_BITS = 18;

input                                CLK;     // clock
input                                WE;      // write
input                                RD;      // read
input        [ADDR_BITS-1:0]                AD;      // address
input        [DATA_BITS-1:0]                DI;      // data input
output        [DATA_BITS-1:0]                DO;      // data output


// behavior model of ram
reg        [DATA_BITS-1:0]                mem[0:MEM_SIZE-1];
reg        [DATA_BITS-1:0]                DO;
always @(posedge CLK)
begin
        if(WE)
                mem[AD] <= #1 DI;
                       
        DO <= #1 mem[AD];
end



endmodule

出0入0汤圆

22
发表于 2014-9-8 23:37:00 | 只看该作者
在QII9.1上我试了在定义的时候加上综合约束,如:
(* ramstyle = "M144K" *)  reg [7:0]  MYRAM[0:15];
(* ramstyle = "M9K" *)  reg [7:0]  MYRAM[0:15];
(* ramstyle = "no_rw_check" *)  reg [7:0]  MYRAM[0:15];
(* ramstyle = "M144K,no_rw_check" *) reg [7:0]  MYRAM[0:15];  等
但是综合后都不占用memory。

出0入0汤圆

21
 楼主| 发表于 2014-9-1 10:33:17 | 只看该作者
jm2011 发表于 2014-9-1 10:14
为什么?是什么原理?

不太清楚,我觉得是不是RAM的时序就是这样的,毕竟if else和case还是有差别的

出0入0汤圆

20
发表于 2014-9-1 10:14:31 | 只看该作者
bdzhaojing 发表于 2014-9-1 09:13
我把上面的代码换成if else表示的,就综合成memory了

为什么?是什么原理?

出0入0汤圆

19
 楼主| 发表于 2014-9-1 09:13:55 | 只看该作者
我把上面的代码换成if else表示的,就综合成memory了

出0入0汤圆

18
发表于 2014-8-31 18:28:15 | 只看该作者
在定义的时候加上综合约束,例如:
/* synthesis syn_ramstyle="no_rw_check" */;
这样的,你搜索一下吧,自动的使用FPGA的MEM

出0入0汤圆

17
发表于 2014-8-29 10:58:47 | 只看该作者
误入,fpga还没弄过

出0入0汤圆

16
 楼主| 发表于 2014-8-29 10:45:55 | 只看该作者
NJ8888 发表于 2014-8-29 10:39
你就直接写代码,让综合其自动分配空间,你用的不是FPGA内部块状RAM资源,用的是与代码合用的资源,只要你资 ...

reg [15:0]member[63:0];
always @ (posedge clk)
begin
if(wrn == 1&&rdn==0)
        case(ab)
        3'b000:addr <= db;
        3'b001:member[addr[7:0]] <= db;
        endcase
end

always @ (posedge clk)
begin
if(rdn == 1&&wrn==0)
        case(ab)
        3'b000:;
        3'b001:data <= member[addr[7:0]];
        endcase
end
我的代码是这样写的,就是资源不够,才想要让他能综合成memory bit

出0入0汤圆

15
发表于 2014-8-29 10:39:55 | 只看该作者
bdzhaojing 发表于 2014-8-29 10:13
恩,那是不是需要先生成一个普通的RAM,然后在自己写接口呢,要怎么样生成一个普通的RAM呀?还有那个普通 ...

你就直接写代码,让综合其自动分配空间,你用的不是FPGA内部块状RAM资源,用的是与代码合用的资源,只要你资源够这样用也没坏处

出0入0汤圆

14
 楼主| 发表于 2014-8-29 10:13:29 | 只看该作者
NJ8888 发表于 2014-8-29 10:07
所以你要自己写接口啊,不过你占用很少,那可以考虑普通方式实现占用常规RAM ...

恩,那是不是需要先生成一个普通的RAM,然后在自己写接口呢,要怎么样生成一个普通的RAM呀?还有那个普通方式占用常规RAM是什么意思呀

出0入0汤圆

13
发表于 2014-8-29 10:07:53 | 只看该作者
本帖最后由 NJ8888 于 2014-8-29 10:09 编辑
bdzhaojing 发表于 2014-8-29 10:03
我定义为reg [15:0]member[63:0];
以及reg [16:0]member[128:0];
都不行,我想问一下IP中RAM的使用方法, ...


所以你要自己写接口啊,不过你占用很少,那可以考虑普通方式实现占用常规RAM

出0入0汤圆

12
 楼主| 发表于 2014-8-29 10:03:19 | 只看该作者
bad_fpga 发表于 2014-8-29 09:38
我记得,如果定义的是2N次方的大小,会自动生成RAM的,不占逻辑,你试下定义成,128,256试下 ...

我定义为reg [15:0]member[63:0];
以及reg [16:0]member[128:0];
都不行,我想问一下IP中RAM的使用方法,只看到有单口和双口RAM,但是它的读写跟我想要的方式不一样。

出0入0汤圆

11
发表于 2014-8-29 09:38:51 | 只看该作者
我记得,如果定义的是2N次方的大小,会自动生成RAM的,不占逻辑,你试下定义成,128,256试下

出0入0汤圆

10
 楼主| 发表于 2014-8-29 09:23:20 | 只看该作者
NJ8888 发表于 2014-8-27 22:16
用IP核块状RAM,自己写接口访问,不用白不用

只看到IP核里面有双口RAM和单口RAM,块状RAM是什么呀,以前没怎么接触过,不太懂。

出0入0汤圆

9
发表于 2014-8-27 22:16:11 | 只看该作者
用IP核块状RAM,自己写接口访问,不用白不用

出0入0汤圆

8
发表于 2014-8-25 13:40:11 | 只看该作者
搞个RAM呀

出0入0汤圆

7
 楼主| 发表于 2014-8-25 10:38:09 | 只看该作者
Nuker 发表于 2014-8-22 17:00
RTFM

另外,请问LZ,当wrn和rdn都为1的时候,怎样的干活?

谢谢资料,谢谢提醒

出0入17汤圆

6
发表于 2014-8-22 17:00:37 | 只看该作者
RTFM

另外,请问LZ,当wrn和rdn都为1的时候,怎样的干活?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入17汤圆

5
发表于 2014-8-22 16:48:48 | 只看该作者
用IP核建个RAM,写到RAM里去

出0入0汤圆

4
发表于 2014-8-22 16:45:03 | 只看该作者
我记得我以前用的了一个二位数组,的确编译成memary了

出0入0汤圆

3
发表于 2014-8-22 15:16:26 | 只看该作者
要占Memory就不能用数组,老老实实的用IP不挺好的嘛

出0入0汤圆

2
 楼主| 发表于 2014-8-22 14:16:50 | 只看该作者
全是占用的逻辑资源,memory占用为0
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 02:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表