利用LPM生成RAM(Quartus II)、C++文件流生成.mif文件

  • 预备
  • 8位数据寄存器VHDL描述
  • 采用LPM_RAM_IO定制一个256*8的RAM
  • 生成mif文件
  • 与八位寄存器配合实现对RAM中读取和写入操作
  • 参考资料

一、预备:

LPM(Library Parameterized Modules):参数化的宏功能模板库
lpm_ram_io:输入输出复用的参数化RAM
RAM(Random Access Memory):随机存取存储器
ROM(Read Only Memory):只读存储器
mif:(memory initialzation file):存储器初始化文件

 

二、8位数据寄存器VHDL描述

1、代码

2、符号及功能
            

3、功能仿真

 

三、采用LPM_RAM_IO定制一个256*8的RAM

1、原理图。如图,下拉选择lpm_ram_io。
        
2、设置相关参数。双击右上角的方框,弹出“Symbol Properties”窗口。
选择Ports,设置outclock和memenab为Unused。
选择Parameters,如图。其中LPM_FILE的Setting填的是存储器初始化文件的路径,关于设置test.mif在后文中介绍。

3、符号及功能
     

 

四、生成mif文件

1、利用Quartus自带的mif编辑器
【file】->【new】->【Merory Initialzation file】

2、利用mif软件生成

3、使用高级语言(C++等)

CSDN博客:https://blog.csdn.net/qq_40889820
#include<iostream>
#include<sstream>
#include<fstream> 
#include<algorithm>
#include<string>
#include<cstring>
#include<iomanip>
#include<vector>
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<map>
#define mem(a,b) memset(a,b,sizeof(a))
#define e 2.71828182
#define Pi 3.141592654
using namespace std;
const int DEPTH=256;//数据深度,存储单元的个数 
const int WIDTH=8;//存储单元的深度 
int main()
{
	ofstream outfile("test.mif",ios::out);
	if(!outfile)
	{
		cerr<<"open error!\n";
		exit(-1);
	}
	
	//生成文件头 
	cout<<"create sucessfully!\n";
	outfile<<"DEPTH = "<<DEPTH<<";\n";
	outfile<<"WIDTH = "<<WIDTH<<";\n";
	outfile<<"ADDRESS_RADIX = HEX;\n";
	outfile<<"DATA_RADIX = HEX;\n";
	outfile<<"CONTENT\n";
	outfile<<"BEGIN\n";
	
	//以十六进制设置地址和数据 
	for(int i=0;i<DEPTH;i++)
	{
		//周期为128个点的正弦波 
		float s=sin(Pi*i/64);
		//将-1到1之间的正弦波的值扩展到0~255之间 
		int temp=(int)((s+1)*255/2);
		//以十六进制输出 
		outfile<<hex<<i<<"\t:";
		outfile<<"\t"<<hex<<temp<<";\n";
	}
	
	outfile<<"END;\n";
	outfile.close();
	return 0;
}

生成后用记事本打开,如图。将其放置在RAM工程所在文件夹,用Quartus打开,如图。右键单击左侧地址值,可以修改地址和数据的显示格式,此处修改为二进制,如图。(将.mif文件拖入Quartus即可打开)

        

 

五、与八位寄存器配合实现对RAM中读取和写入操作

1、最终原理图

2、功能仿真
a.读取测试

b.写入测试

需要注意的是,这里的RAM的操作是上升沿触发而寄存器是下降沿触发。

 

六、参考资料
寄存器——百度百科
参数化模块库(LPM)的使用
如何生成mif文件

  • 11
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值