TLM设计实例.docVIP

  • 16
  • 0
  • 约8.18千字
  • 约 8页
  • 2017-06-17 发布于河南
  • 举报
TLM设计实例

TLM设计实例——简易DMA设计 在一个SoC芯片中,一般由处理器、DMA控制器、中断控制器、存储器、各种接口如UART、USB等组成。DMA往往是总线的主设备,它可以发起存储器之间的数据传输。同时DMA也是总线的从设备,DMA中有若干个控制寄存器,当配置这些寄存器的时候DMA作为总线的从设备。因此DMA(和总线之间有两种接口,一种是主设备接口master_if,另一种则是从设备接口slave_if。作为TLM设计实例的简易DMA(以下简称DMA)中有五个寄存器。DMA使能寄存器用来使能DMA模块,burst传输长度控制器控制每个burst传输的长度,传输控制器控制总的传输长度。源地址寄存器和目的地址寄存器中分别设置数据传输的源地址和目的地址。在DMA中以burst的方式先从源地址读取数据并缓存到DMA内部的buffer中,然后将数据写到目的地址中去。 在下面的内容中将给出两种DMA事务级建模的方法。在第一种模型中没有时钟,而第二种模型是周期精确的。在这两种事务级模型中,都有三种端口分别是初始化端口、总线主设备接口和总线从设备接口。 在没有时钟的事务级模型中有三个进程分别是main_action进程、dma_fsm进程和dma_rst进程。其中main_action进程和dma_fsm进程定义为SC_THREAD类型,在SC_THREAD进程没有时钟。由于进程间的通信需要通过通道,因此定义了两个信号用于进行间的通信,信号是通道的一种。 DMA.h文件如下: #ifndef _dma_h #define _dma_h #include systemc.h #include slave_if.h #include master_if.h enum state_type{idle, read_state, write_state}; SC_MODULE(dma) { public: //ports sc_inbool rst; //初始化信号 sc_portmaster_if master_port; //总线主设备接口 sc_portslave_if slave_port; // 总线从设备接口 //signal sc_signalunsigned int my_state; //用来做进程间通信 sc_signalunsigned int dma_enable; //用来做进程间通信 SC_HAS_PROCESS(dma); //macro definition //DMA构造函数 dma(sc_module_name name_, unsigned int start_address, unsigned int end_address) : sc_module(name_) ,reg_start_address(start_address) ,reg_end_address(end_address) { // process declaration SC_THREAD(main_action); sensitive my_state; SC_THREAD(dma_fsm); sensitive my_state dma_enable; SC_METHOD(dma_rst); sensitive_neg rst; } // process void main_action(); void dma_fsm(); void dma_rst(); //slave interface bool slave_read(int *data , unsigned int address); bool slave_write(int *data , unsigned int address); bool slave_select(unsigned address); private: unsigned int dma_en; //dma_en寄存器; unsigned int transfer_size; //transfer size寄存器; unsigned int burst_length; //burst length寄存器; unsigned int source_address

文档评论(0)

1亿VIP精品文档

相关文档