关于FPGA中如何运用sdram的问题
首先强调一下,不是嵌软核的应用,而是用verilog写的时候怎么用。前几天在网上看了一些资料,也找到了一些写好的实例工程,可以读写sdram。但是我有一点不明白,以前在单...
首先强调一下,不是嵌软核的应用,而是用verilog写的时候怎么用。
前几天在网上看了一些资料,也找到了一些写好的实例工程,可以读写sdram。但是我有一点不明白,以前在单片机中或其他处理器中,直接定义一个变量,它会自动被分配在某一地址,那么,在用FPGA时,我该如何把变量定义在sdram中呢?
请解答,谢谢 展开
前几天在网上看了一些资料,也找到了一些写好的实例工程,可以读写sdram。但是我有一点不明白,以前在单片机中或其他处理器中,直接定义一个变量,它会自动被分配在某一地址,那么,在用FPGA时,我该如何把变量定义在sdram中呢?
请解答,谢谢 展开
4个回答
展开全部
这个问题,你实际已经问到CPU的工作原理了。首先你要了解单片机的内核--CPU的逻辑原理。给单片机定义的变量的确也是存储在SDRAM(多数是SRAM)中的,操作时是这样的:首先,CPU用固定的时序到指令寄存器(Flash或ROM)中读取指令,发现有一条指令说:来,我这有个数,呆会要用,帮我分配个地方,这个地方编译器已经帮我定好了。好,CPU就按指令要求的把这个地方打扫干净(清零),这个过程就是CPU写SDRAM。完了CPU每执行下面的指令,如果指令要操作这个数,它都会读写一次SDRAM中的那个地址。好,说到这里,你大概知道我的意思了吧?实际你在FPGA中定义的reg,相当于是CPU的特殊功能寄存器,是必须占用资源的。要完成你的想法,你要写一个CPU。最简单的,你在FPGA上挂个Flash,和一个SDRAM,Flash里面是你定义的变量在SDRAM中的地址(看清这句话),于是Flash有多少个存储单元,你就可以定义多少个变量了。在FPGA里定义两个reg:POINTER和ACC,只要两个。资源够少吧?用FLASH控制器读FLASH得到一个数据,存储到POINTER,以POINTER为地址,读取SDRAM,得到的数据放到ACC中,一顿加减乘除后,再给它存储到SDRAM中。用这样的方法你可以拥有和操作无数个变量,而只费两个reg。完成这个,其实你就实现了一个最简单的CPU。
更多追问追答
追问
大家说的都很好,但是你说的最明白。我以前把这事儿想简单了,以为一个简单的算法就可以搞定。刚才看了一下SDRAM控制器的实例,占用了很多很多资源,我想问一下,SDRAM的优势体现在什么地方了?
追答
由于半导体工艺的问题,SDRAM容量可以做很大。速度可以很快。较早的内存颗粒就是SDRAM的(一个周期读取一次数据Single)。后来又有了改进的DDRAM(在一个周期的上升沿和下降沿分别读一次数据,Double),DDR2,DDR3等等。
展开全部
不能这样玩的,sdram用fpga来控制是用fpga产生控制sdram的时序,然后在作用sdram实现一些读写的功能,跟变量分配没有什么关系,fpga是硬件是数字逻辑电路和单片机的软件是两码事
追问
那sdram只能在嵌软核的时候使用?
要是FPGA所有的逻辑都用光了怎么办?
我是这么理解的:既然嵌软核的时候sdram可以作为存储空间,那么在用verilog写的时候,同样可以写出相同的功能。
追答
那sdram只能在嵌软核的时候使用? 都可以用
要是FPGA所有的逻辑都用光了怎么办? 感觉你没有理解软件和fpga ,有点把这两个混成一团了
verilog是可以写出类似的功能的,
ps 软核和花哨,在外面没有什么实用价值,可以多弄点数字逻辑设计方面的东西。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看到的可以读写sdram的工程,一般实现的是一个sdram控制器。
控制器上有接口,地址线、数据线、写使能、读使能等等。
把想存储的数据放到数据线上,给sdram控制器相应的控制信号,数据就存储到sdram里了,这些功能需要使用verilog编写。读也一样。
控制器上有接口,地址线、数据线、写使能、读使能等等。
把想存储的数据放到数据线上,给sdram控制器相应的控制信号,数据就存储到sdram里了,这些功能需要使用verilog编写。读也一样。
追问
谢谢。
我举个例子:
比如在C语言中定义一个变量,unsigned int a;这个变量a可以自动或手动给他分配在内存空间中;
类似地,在verilog中定义一个寄存器(相当于变量),reg[15:0] a;但如果我这样定义的话就会占用FPGA的硬件资源,所以我想肯定有方法,用verilog把sdram和FPGA做一个硬件接口,实现随意存取中间变量的功能。但是应该怎么办呢,没有头绪。麻烦您帮个忙。
追答
硬件接口就是你看到的那些sdram控制器
你在使用软核的时候调用的fpga厂商提供的sdram控制器也是使用hdl写的
一或者两个个寄存器不会占用很多资源吧 在资源充足的情况下去计较几个寄存器没什么必要了(我觉得哈,不一定对) 你要建立的工程对于你板子上的fpga资源很紧张么? 如果少两个寄存器资源就够了么?
根据楼下的答案,我回想了下,那些寄存器可能是必须的。
使用软核,软核也要有堆栈什么的,临时数据还是要存储在堆栈里面,堆栈还是利用fpga资源实现的。只不过你在生成软核的时候,没有看到而已。(O(∩_∩)O哈哈~ 处理器结构好久没没看,不知道对不对哈!)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个一般开发板带的例程里面都有
找不到的我可以传给你一个
找不到的我可以传给你一个
追问
谢谢你,这个开发板是我自己做的,但是我刚刚学这个东西,一些基本的操作我都能应付,例程也有,但就是主流的技术仍然不会。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询