用文件初始化FIFO2

来源:互联网 发布:哪里有学美工的学校 编辑:程序博客网 时间:2024/05/17 01:51
`timescale 1ps/1psmodule FILEFIFO2(iCLK,iRST_N,iREAD,oDATA,iWRITE,iDATA,oCOUNT);parameter DATA_WIDTH=8;//数据位宽parameter DATA_LENGTH=256;//FIFO深度parameter COUNT_LENGTH=8;parameter FILE_NAME="file.txt";input iCLK;input iRST_N;input iREAD;output [DATA_WIDTH-1:0] oDATA;input iWRITE;input [DATA_WIDTH-1:0] iDATA;output [COUNT_LENGTH-1:0] oCOUNT;reg [DATA_WIDTH-1:0] oDATA;reg [DATA_WIDTH-1:0] rMem[DATA_LENGTH-1:0];reg [COUNT_LENGTH-1:0] oCOUNT;integer fp;integer i;integer n;initial beginfp=$fopen(FILE_NAME,"r");i=0;while(!($feof(fp)) && i<DATA_LENGTH) beginn=$fscanf(fp,"%x",rMem[i]);i=i+1;endoCOUNT=i;$fclose(fp);endinteger readAddr;integer writeAddr;initial beginreadAddr=0;writeAddr=0;endalways@(posedge iCLK or negedge iRST_N)beginif(!iRST_N) oDATA<=0;else if(iWRITE) beginrMem[writeAddr]<=iDATA;oCOUNT<=oCOUNT+1;if(writeAddr==DATA_LENGTH-1) writeAddr<=0;else writeAddr<=writeAddr+1;endelse if(iREAD) beginoDATA<=rMem[readAddr];oCOUNT<=oCOUNT-1;if(readAddr==DATA_LENGTH-1) readAddr<=0;else readAddr<=readAddr+1;endendendmodule

原创粉丝点击