bdzhaojing 发表于 2014-8-22 14:15:24

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

reg member;

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

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



bdzhaojing 发表于 2014-8-22 14:16:50

全是占用的逻辑资源,memory占用为0

McuPlayer 发表于 2014-8-22 15:16:26

要占Memory就不能用数组,老老实实的用IP不挺好的嘛

cxhy 发表于 2014-8-22 16:45:03

我记得我以前用的了一个二位数组,的确编译成memary了

流氓马 发表于 2014-8-22 16:48:48

用IP核建个RAM,写到RAM里去

Nuker 发表于 2014-8-22 17:00:37

RTFM

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

bdzhaojing 发表于 2014-8-25 10:38:09

Nuker 发表于 2014-8-22 17:00
RTFM

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

谢谢资料,谢谢提醒

ice_lyb 发表于 2014-8-25 13:40:11

搞个RAM呀

NJ8888 发表于 2014-8-27 22:16:11

用IP核块状RAM,自己写接口访问,不用白不用

bdzhaojing 发表于 2014-8-29 09:23:20

NJ8888 发表于 2014-8-27 22:16
用IP核块状RAM,自己写接口访问,不用白不用

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

bad_fpga 发表于 2014-8-29 09:38:51

我记得,如果定义的是2N次方的大小,会自动生成RAM的,不占逻辑,你试下定义成,128,256试下

bdzhaojing 发表于 2014-8-29 10:03:19

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

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

NJ8888 发表于 2014-8-29 10:07:53

本帖最后由 NJ8888 于 2014-8-29 10:09 编辑

bdzhaojing 发表于 2014-8-29 10:03
我定义为reg member;
以及reg member;
都不行,我想问一下IP中RAM的使用方法, ...

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

bdzhaojing 发表于 2014-8-29 10:13:29

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

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

NJ8888 发表于 2014-8-29 10:39:55

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

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

bdzhaojing 发表于 2014-8-29 10:45:55

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

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

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

star_tale 发表于 2014-8-29 10:58:47

误入,fpga还没弄过

jm2011 发表于 2014-8-31 18:28:15

在定义的时候加上综合约束,例如:
/* synthesis syn_ramstyle="no_rw_check" */;
这样的,你搜索一下吧,自动的使用FPGA的MEM

bdzhaojing 发表于 2014-9-1 09:13:55

我把上面的代码换成if else表示的,就综合成memory了

jm2011 发表于 2014-9-1 10:14:31

bdzhaojing 发表于 2014-9-1 09:13
我把上面的代码换成if else表示的,就综合成memory了

为什么?是什么原理?

bdzhaojing 发表于 2014-9-1 10:33:17

jm2011 发表于 2014-9-1 10:14
为什么?是什么原理?

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

zaldy30 发表于 2014-9-8 23:37:00

在QII9.1上我试了在定义的时候加上综合约束,如:
(* ramstyle = "M144K" *)reg MYRAM;
(* ramstyle = "M9K" *)reg MYRAM;
(* ramstyle = "no_rw_check" *)reg MYRAM;
(* ramstyle = "M144K,no_rw_check" *) reg MYRAM;等
但是综合后都不占用memory。

jarodzz 发表于 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                        AD;      // address
input                        DI;      // data input
output                        DO;      // data output


// behavior model of ram
reg                        mem;
reg                        DO;
always @(posedge CLK)
begin
        if(WE)
                mem <= #1 DI;
                       
        DO <= #1 mem;
end



endmodule

lansen0815 发表于 2014-9-19 15:34:21

在配置选项中可以选择 是综合成寄存器 还是综合成memory可能通过RTL view查看到底是register 还是memory
页: [1]
查看完整版本: 定义的数组,如何让他占用memory呀