搜索
bottom↓
回复: 23

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

[复制链接]

出0入0汤圆

发表于 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周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2014-8-22 14:16:50 | 显示全部楼层
全是占用的逻辑资源,memory占用为0

出0入0汤圆

发表于 2014-8-22 15:16:26 | 显示全部楼层
要占Memory就不能用数组,老老实实的用IP不挺好的嘛

出0入0汤圆

发表于 2014-8-22 16:45:03 | 显示全部楼层
我记得我以前用的了一个二位数组,的确编译成memary了

出0入17汤圆

发表于 2014-8-22 16:48:48 | 显示全部楼层
用IP核建个RAM,写到RAM里去

出0入17汤圆

发表于 2014-8-22 17:00:37 | 显示全部楼层
RTFM

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

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-8-25 10:38:09 | 显示全部楼层
Nuker 发表于 2014-8-22 17:00
RTFM

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

谢谢资料,谢谢提醒

出0入0汤圆

发表于 2014-8-25 13:40:11 | 显示全部楼层
搞个RAM呀

出0入0汤圆

发表于 2014-8-27 22:16:11 | 显示全部楼层
用IP核块状RAM,自己写接口访问,不用白不用

出0入0汤圆

 楼主| 发表于 2014-8-29 09:23:20 | 显示全部楼层
NJ8888 发表于 2014-8-27 22:16
用IP核块状RAM,自己写接口访问,不用白不用

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

出0入0汤圆

发表于 2014-8-29 09:38:51 | 显示全部楼层
我记得,如果定义的是2N次方的大小,会自动生成RAM的,不占逻辑,你试下定义成,128,256试下

出0入0汤圆

 楼主| 发表于 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汤圆

发表于 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汤圆

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

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

出0入0汤圆

发表于 2014-8-29 10:39:55 | 显示全部楼层
bdzhaojing 发表于 2014-8-29 10:13
恩,那是不是需要先生成一个普通的RAM,然后在自己写接口呢,要怎么样生成一个普通的RAM呀?还有那个普通 ...

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

出0入0汤圆

 楼主| 发表于 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汤圆

发表于 2014-8-29 10:58:47 | 显示全部楼层
误入,fpga还没弄过

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2014-9-1 09:13:55 | 显示全部楼层
我把上面的代码换成if else表示的,就综合成memory了

出0入0汤圆

发表于 2014-9-1 10:14:31 | 显示全部楼层
bdzhaojing 发表于 2014-9-1 09:13
我把上面的代码换成if else表示的,就综合成memory了

为什么?是什么原理?

出0入0汤圆

 楼主| 发表于 2014-9-1 10:33:17 | 显示全部楼层
jm2011 发表于 2014-9-1 10:14
为什么?是什么原理?

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

出0入0汤圆

发表于 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汤圆

发表于 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汤圆

发表于 2014-9-19 15:34:21 | 显示全部楼层
在配置选项中可以选择 是综合成寄存器 还是综合成memory  可能通过RTL view查看到底是register 还是memory
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 03:28

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

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