⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data_memory.h

📁 SystemC 实现 MIPS 处理器 源代码
💻 H
字号:
#ifndef DATA_MEMORY_H
#define DATA_MEMORY_H

#include "STDAFX.h"

SC_MODULE(Data_Memory)
{
	//内存访问地址,写入数据
	sc_in<sc_uint<32> > address,write_data;
	//读写标志
	sc_in<bool> MemWrite,MemRead;

	//时钟
	sc_in_clk clk;

	//输出数据
	sc_out<sc_uint<32> > data_out;

	//内存数据
	sc_uint<32> mem_data[1024];

	void read()
	{
		unsigned int t=address.read().to_uint()/4;
		if (t>=1024) return;

		if (MemRead==true) data_out.write(mem_data[address.read().to_uint()/4]);
	}

	void write()
	{
		unsigned int t=address.read().to_uint()/4;
		if (t>=1024) return;

		if (MemWrite==true) mem_data[address.read().to_uint()/4]=write_data.read().to_uint();
	}

	SC_CTOR(Data_Memory)
	{
		int i;
		for (i=0;i<1024;++i) mem_data[i]=0;

		mem_data[0]=15;
		mem_data[1]=100;
		mem_data[2]=1000;
		mem_data[3]=10000;
		mem_data[4]=100000;

		SC_METHOD(read);
		sensitive<<address<<write_data<<MemWrite<<MemRead;
		//sensitive_neg<<clk;

		SC_METHOD(write);
		sensitive_neg<<clk;
	}
};

/*
SC_MODULE(Data_Memory_Test)
{
	sc_out<sc_uint<32> > address,write_data;
	sc_out<bool> MemWrite,MemRead;

	sc_in_clk clk;

	sc_in<sc_uint<32> > data_out;

	void gen()
	{
		address.write(0);
		write_data.write(0);
		MemRead.write(true);
		MemWrite.write(false);
		wait();
		Print(data_out.read());

		address.write(1);
		write_data.write(0);
		MemRead.write(true);
		MemWrite.write(false);
		wait();
		Print(data_out.read());

		address.write(2);
		write_data.write(0);
		MemRead.write(true);
		MemWrite.write(false);
		wait();
		Print(data_out.read());

		address.write(0);
		write_data.write(10000);
		MemRead.write(false);
		MemWrite.write(true);
		wait();
	
		address.write(0);
		write_data.write(0);
		MemRead.write(true);
		MemWrite.write(false);
		wait();
		Print(data_out.read());

	}

	SC_CTOR(Data_Memory_Test)
	{
		SC_THREAD(gen);
		sensitive_neg<<clk;
	}

};

void Test_Data_Memory()
{
	Data_Memory memory("Data_Memory");
	Data_Memory_Test test("Data_Memory_Test");

	sc_signal<sc_uint<32> > address,write_data,data_out;
	sc_signal<bool> MemRead,MemWrite;

	memory.address(address);
	memory.write_data(write_data);
	memory.data_out(data_out);
	memory.MemRead(MemRead);
	memory.MemWrite(MemWrite);

	test.address(address);
	test.write_data(write_data);
	test.data_out(data_out);
	test.MemRead(MemRead);
	test.MemWrite(MemWrite);

	sc_clock clk("clk",10);
	memory.clk(clk);
	test.clk(clk);

	sc_start(100);


}
*/

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -