`timescale 1ps/1ps
/*
从文件中读入ROM的值
2013-4-14
*/
module FILEROM(
iCLK,
iRST_N,
iREAD,
iADDR,
oDATA
);
parameter DATA_WIDTH=8; //数据位宽
parameter ADDR_WIDTH=8; //地址位宽
parameter ADDR_START=0; //地址起始
parameter ADDR_END =255; //地址尾
parameter FILE_NAME="file.txt"; //文件名
input iCLK;
input iRST_N;
input iREAD;
input [ADDR_WIDTH-1:0] iADDR;
output [DATA_WIDTH-1:0] oDATA;
reg [DATA_WIDTH-1:0] oDATA;
reg [DATA_WIDTH-1:0] rMem[ADDR_END:ADDR_START];
integer fp;
integer i;
integer n;
initial begin
fp=$fopen(FILE_NAME,"r");
i=ADDR_START;
while(!($feof(fp)) && i<=ADDR_END) begin
n=$fscanf(fp,"%x",rMem[i]);
i=i+1;
end
$fclose(fp);
end
//oDATA
always@(posedge iCLK or negedge iRST_N)begin
if(!iRST_N) oDATA<=0;
else if(iREAD) oDATA<=rMem[iADDR];
end
endmodule
[verilog]用文件初始化ROM
最新推荐文章于 2024-06-09 00:25:39 发布