前面一篇文章介绍了在FPGA仿真中如何利用ModelSim将仿真过程中产生的数据保存到txt中进行后续分析,具体见:
ModelSim中将仿真数据/波形/wave保存到txt文件的方法
今天就来讲一讲如何将txt文本中的的十六进制数据导入到工程中作为信号源进行仿真:
parameter LINUX = 1'b0 ;
parameter IMG_LEN = 256*256;
reg [47:0] ddr_img_mem[IMG_LEN-1:0];//定义memory型寄存器
initial
begin
if ( LINUX == 1'b0 )begin//Win
$readmemh("E:/to_fpga/test.txt",ddr_img_mem);
end else begin//Centos
$readmemh("/home/to_fpga/test.txt",ddr_img_mem);
end
end
reg [19:0] img_cnt;
reg [3*16-1:0] rd_data ;//
always@(posedge iclk)begin
if(rst)begin
img_cnt <= 0;
rd_data <= 'd0;
end else if(rd_en)begin
img_cnt <= img_cnt+1;
rd_data <= ddr_img_mem[img_cnt];
end else begin
img_cnt <= img_cnt;
rd_data <= 'd0;
end
end
其中test.txt格式如下图所示:

上图示例中的txt数据格式为:{RL,RH,GL,GH,BL,BH}
若需要在仿真时将其转换为{BH,BL,GH,GL,RH,RL}格式的,则可通过如下字节序翻转模块实现:
wire [3*16-1:0] rd_data_w ;//
byte_swap #(
.WIDTH(48)
)byte_swap_u(
.data_i(rd_data),
.data_o(rd_data_w)
);
字节序翻转模块源码:
module byte_swap#(
parameter WIDTH = 32
)(
input [WIDTH-1:0] data_i,
output [WIDTH-1:0] data_o
);
parameter a= WIDTH/8;
genvar i;
generate
for(i=0;i<a;i=i+1) begin:mult_gen
assign data_o[i*8+7:i*8] = data_i[WIDTH-i*8-1:WIDTH-i*8-8];
end
endgenerate
endmodule
FPGA中TXT数据导入与字节序转换
本文介绍如何在FPGA项目中将TXT文件的十六进制数据作为信号源导入,并通过字节序翻转模块实现数据格式转换,适用于不同操作系统环境。
769

被折叠的 条评论
为什么被折叠?



