amobbs.com 阿莫电子技术论坛

标题: 定义的数组,如何让他占用memory呀 [打印本页]

作者: bdzhaojing    时间: 2014-8-22 14:15
标题: 定义的数组,如何让他占用memory呀
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


[attach]213994[/attach]

作者: bdzhaojing    时间: 2014-8-22 14:16
全是占用的逻辑资源,memory占用为0
作者: McuPlayer    时间: 2014-8-22 15:16
要占Memory就不能用数组,老老实实的用IP不挺好的嘛
作者: cxhy    时间: 2014-8-22 16:45
我记得我以前用的了一个二位数组,的确编译成memary了
作者: 流氓马    时间: 2014-8-22 16:48
用IP核建个RAM,写到RAM里去
作者: Nuker    时间: 2014-8-22 17:00
RTFM
[attach]214035[/attach]
另外,请问LZ,当wrn和rdn都为1的时候,怎样的干活?
作者: bdzhaojing    时间: 2014-8-25 10:38
Nuker 发表于 2014-8-22 17:00
RTFM

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

谢谢资料,谢谢提醒
作者: ice_lyb    时间: 2014-8-25 13:40
搞个RAM呀

作者: NJ8888    时间: 2014-8-27 22:16
用IP核块状RAM,自己写接口访问,不用白不用
作者: bdzhaojing    时间: 2014-8-29 09:23
NJ8888 发表于 2014-8-27 22:16
用IP核块状RAM,自己写接口访问,不用白不用

只看到IP核里面有双口RAM和单口RAM,块状RAM是什么呀,以前没怎么接触过,不太懂。
作者: bad_fpga    时间: 2014-8-29 09:38
我记得,如果定义的是2N次方的大小,会自动生成RAM的,不占逻辑,你试下定义成,128,256试下
作者: bdzhaojing    时间: 2014-8-29 10:03
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,但是它的读写跟我想要的方式不一样。
作者: NJ8888    时间: 2014-8-29 10:07
本帖最后由 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
作者: bdzhaojing    时间: 2014-8-29 10:13
NJ8888 发表于 2014-8-29 10:07
所以你要自己写接口啊,不过你占用很少,那可以考虑普通方式实现占用常规RAM ...

恩,那是不是需要先生成一个普通的RAM,然后在自己写接口呢,要怎么样生成一个普通的RAM呀?还有那个普通方式占用常规RAM是什么意思呀
作者: NJ8888    时间: 2014-8-29 10:39
bdzhaojing 发表于 2014-8-29 10:13
恩,那是不是需要先生成一个普通的RAM,然后在自己写接口呢,要怎么样生成一个普通的RAM呀?还有那个普通 ...

你就直接写代码,让综合其自动分配空间,你用的不是FPGA内部块状RAM资源,用的是与代码合用的资源,只要你资源够这样用也没坏处
作者: bdzhaojing    时间: 2014-8-29 10:45
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
作者: star_tale    时间: 2014-8-29 10:58
误入,fpga还没弄过
作者: jm2011    时间: 2014-8-31 18:28
在定义的时候加上综合约束,例如:
/* synthesis syn_ramstyle="no_rw_check" */;
这样的,你搜索一下吧,自动的使用FPGA的MEM
作者: bdzhaojing    时间: 2014-9-1 09:13
我把上面的代码换成if else表示的,就综合成memory了
作者: jm2011    时间: 2014-9-1 10:14
bdzhaojing 发表于 2014-9-1 09:13
我把上面的代码换成if else表示的,就综合成memory了

为什么?是什么原理?
作者: bdzhaojing    时间: 2014-9-1 10:33
jm2011 发表于 2014-9-1 10:14
为什么?是什么原理?

不太清楚,我觉得是不是RAM的时序就是这样的,毕竟if else和case还是有差别的
作者: zaldy30    时间: 2014-9-8 23:37
在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。

作者: jarodzz    时间: 2014-9-10 02:23
下面是我自己建的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

作者: lansen0815    时间: 2014-9-19 15:34
在配置选项中可以选择 是综合成寄存器 还是综合成memory  可能通过RTL view查看到底是register 还是memory




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4