在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 12683|回复: 18

[求助] Xilinx Spartan6 block ram调用问题

[复制链接]
发表于 2013-11-19 15:26:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
本人是fpga菜鸟,菜鸟到问题都可能有些没头绪,请大家多帮助。
我现在想要fpga内部的block ram和flash通信,flash是spi接口的,一个基本的flash controller我已经写好了,现在就是ram的数据读取问题。

我非常困惑的是这样reg [15:0] bram[(128-1):0]; 定义一个ram的意思是让fpga自己分配地址吗?还是这只是在仿真软件中的一种应用,不能在硬件中成立?

另外我看到一些有关例化ram的帖子,类似:
module bramtest(
    input clk,input rst_n,
input ram1_en,
input [7:0] dina,
input [2:0] addr,
input wea,
output [7:0] douta

);

  ram1 sp_ram (
      .clka(clk), // input clka
      .rsta(rst_n), // input rsta
      .ena(ram1_en), // input ena
      .wea(wea), // input [0 : 0] wea
      .addra(addr), // input [2 : 0] addra
      .dina(dina), // input [7 : 0] dina
      .douta(douta) // output [7 : 0] douta
      );

endmodule
-------------------------引用自cqugjw  
[求助] Xilinx开发板Block RAM的使用
这个是放在哪里呢?芯片的说明文件,Spartan-6 Libraries Guide for HDL Designs.pdf中也有例化ram的verilog,这段代码是放在哪里?单独建立一个模块?

最后一个问题是,我希望ram能够读写flash,同时也希望别的host能读写ram,应该如何应用?

希望大家多多帮助水深火热中的程序媛,谢谢了。
发表于 2013-11-20 10:57:31 | 显示全部楼层
可以直接在硬件中使用啊,类似寄存器数组一样,一般会例化成Block RAM,有的综合时打散使用寄存器reg1, reg2, reg3,
代码放在你想调用的模块那里,作为底层例化,至于.v文件,加入到project中即可,和普通的module一样处理。你问的是这个吗?

最后的问题,RAM能读写FLASH,别的HOST能读写RAM,你这说的啥意思?RAM只是存储对象,你有控制逻辑去读写RAM,自身无法主动访问别的对象啊。
应该是有段代码,读一段数据,然后把数据通过SPI写到FLASH,或者反过来从FLASH中读取数据,写到RAM中,简单的实现即可,要高效就要使用DMA之类的了。
别的HOST当然可以访问RAM,只要有读写通道过来就行。
发表于 2013-11-20 16:04:18 | 显示全部楼层
不会,友情帮顶
 楼主| 发表于 2013-11-20 16:33:50 | 显示全部楼层
回复 2# eaglelsb


   非常感谢,我今天有点理清头绪了,TDP ram也成功例化了,下面就是写一个你说的让ram 和spi flash通信的东西了。
   我以前用的是HDL designer,是可以模块化设计的,不知道ISE是不是也可以这样呢?我这个例化的ram只要当成其中一个模块就可以了是吗?
发表于 2013-11-21 10:00:38 | 显示全部楼层
对啊,ISE只是工具,HDL通用的东西ISE自然也支持,只是ISE是专门用于FPGA的,所以会支持些具体的器件和原语,比如coregen生成的IP,比如时钟生成模块,block memory等,
发表于 2013-11-24 17:26:58 | 显示全部楼层
我现在直接用XPS 中的IP核的
 楼主| 发表于 2013-11-25 13:46:06 | 显示全部楼层
回复 5# eaglelsb

schematic里面,我想要把输入信号赋值为零如何操作呢? 比如我想把RSTA赋值为零的话有办法吗?
图像 1.png
 楼主| 发表于 2013-11-25 15:24:33 | 显示全部楼层
回复 5# eaglelsb


   再补充一个问题 true dual port ram的clka 和clkb不能用同一个信号吗?我试图都用系统时钟,结果提示这样相当于他俩短路。
发表于 2013-11-25 16:30:57 | 显示全部楼层
回复 8# alice_xx14

电路图模式的我不会,通常直接代码搞定。当然两时钟可以用同一source,这个没关系,我们用得更多的模式就是一个口写,另外个口读;你要是配置成两口都可读写也没问题。
 楼主| 发表于 2013-11-25 17:36:20 | 显示全部楼层
回复 9# eaglelsb

真的很谢谢你,我又碰到一个新问题,我程序在modelsim里面仿真没有问题,但是放到ISE上就报错,程序如下,我实在看不出问题,不好意思了Assignment under multiple single edges is not supported for synthesis
INFO - You can change the severity of this error message to warning using switch -change_error_to_warning "HDLCompiler:1128"
  

always@(posedge sclk or posedge reset)
  begin
    if((delay_count_page>=4)&&(delay_count_page<=259)&&(~delay_count_page%2)&&read_en)
      begin
        case(delay_count_byte)
          4'd1:data[7]<=miso;
          4'd2:data[6]<=miso;
          4'd3:data[5]<=miso;
          4'd4:data[4]<=miso;
          4'd5:data[3]<=miso;
          4'd6:data[2]<=miso;
          4'd7:data[1]<=miso;
          4'd8:data[0]<=miso;
          default: data<=0;  
        endcase
      end
    else if((delay_count_page>=4)&&(delay_count_page<=259)&&(delay_count_page%2)&&read_en)
      begin
        case(delay_count_byte)
          4'd1:data[15]<=miso;
          4'd2:data[14]<=miso;
          4'd3:data[13]<=miso;
          4'd4:data[12]<=miso;
          4'd5:data[11]<=miso;
          4'd6:data[10]<=miso;
          4'd7:data[9]<=miso;
          4'd8:data[8]<=miso;
          default: data<=0;  
        endcase
      end
    else if((delay_count_page>=3)&&program_enable)
      begin
        if(delay_count_page>=3&&delay_count_page<=258&&(delay_count_page%2))
          begin
            if (delay_count_byte==8)
              data<=dob;
          end
      end
    else
      data<=16'd0;
   end
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 08:36 , Processed in 0.025448 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表