📄 data_memory.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 + -