在 vhdl 或 Verilog 中如何读取 二进制的数据文
在 vhdl 或 Verilog 中如何读取 二进制的数据文件。 已经郁闷有一段时间了。以下蓝色文字由站长:armok 于:2010-08-15,00:07:36 加入。你的原标题:“<font color=black>哪位资深高人知道?” 不合符规定。请更改成能说明帖子大意的标题
试想一下,如果本论坛的帖子标题清一色的‘帮助!’,‘ADC求救!’等笼统的标题,你在阅读的过程中会造成许多麻烦。
所以本论坛规定:一定要起一个能说明帖子大意的标题。不允许“关于 AVR 的 ADC 使用!”这种笼统标题。作为标题,必须说明清楚:
①你是在请教问题,还是在介绍有关的知识?
②ADC的问题有许多,你是想说那方面的内容?
注意以上两点,标题应该改成如:“请教:ADC 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。
./bbs_upload/files_6/armok01122228.gif 文件如果来源是想SD卡等标准介质中的文件系统管理的文件,你就惨了,FPGA做文件管理通常要个微处理器的软核,并且要有个兼容标准格式的文件系统。不然你从读物理扇区开始,工程非常大,一个人难 这是我做滤波器用的一个测试文件,里面包含文件的读写
`define auto_init
`timescale 1ns/1ns
`define INPUT_FILE "fir_in8.txt"
`define OUTPUT_FILE "fir_out31.txt"
module test_ser_fir ();
parameter NOOFDATA = 40000;
parameter FIR_TAP = 125;
parameter FIR_TAPHALF = 63;
parameter IDATA_WIDTH = 8;
//parameter PDATA_WIDTH = 9;
parameter COEFF_WIDTH = 24;
parameter OUT_WIDTH = 31;
parameter CLK_CYCLE = 20;
parameter CLK_HCYCLE = 10;
reg clk;
reg rst_n;
reg fir_in;
wire fir_out;
reg memb ;
reg membyte ;
reg write;
/*
integer count_w;
integer regcount;
integer handle;
integer k;
*/
integer handle;
reg count_w;
reg regcount;
reg k;
reg k0;
ser_fir dut ( clk,rst_n,fir_in,fir_out );
`ifdef auto_init
initial
begin
$readmemb(`INPUT_FILE,memb);
regcount = 0;
count_w = 0;
handle = 0;
clk = 1'b0;
k =0 ;
k0 = 0;
rst_n = 1'b0;
#(10*CLK_CYCLE + CLK_HCYCLE) rst_n = 1'b1;
end
`endif
always #CLK_HCYCLE clk = ~clk;
always @ ( posedge clk or negedge rst_n )
begin
if ( !rst_n )
regcount <= 6'b0;
else
if ( regcount == 6'd63 )
regcount <= 6'b0;
else
regcount <= regcount + 1'b1;
end
always @ ( posedge clk or negedge rst_n )
begin
if ( !rst_n )
begin
fir_in <= 10'b0;
k <= 19'd1;
end
else
if ( regcount==6'd63 )
begin
k <= k + 1'b1;
fir_in <= memb;
end
end
always @ ( posedge clk or negedge rst_n )
begin
if ( !rst_n )
k0 <= 19'b0;
else
if ( regcount==6'b0 )
begin
k0 <= k0 + 1'b1;
membyte <= fir_out;
end
end
always @ ( posedge clk or negedge rst_n )
begin
if ( !rst_n )
write <= 1'b0;
else
begin
if ( k == NOOFDATA )
write <= 1'b1;
end
end
always @ ( posedge write )
begin
handle = $fopen(`OUTPUT_FILE);
$display("writing results to file...");
for ( count_w=0;count_w<NOOFDATA;count_w=count_w+1 )
begin
$fdisplay(handle,"%d",membyte);
$display("%d",membyte);
end
$fclose(handle);
end
endmodule 一楼说得好 我弄过一下读写FAT32格式的SD卡是用AVR来做的 感觉蛮复杂的 如果改写成FPGA就更 麻烦了,所以加个软核就比较好了 总算找到了
看来 Verilog和 VHDL 都能读 二进制文件。
用 File_Open(Status => fStatus_v,
F => DataIn_f,
External_Name => "IntOut.txt",
Open_Kind => Read_Mode); -- Or Write_Mode
就可以了。
操作二进制文件是如此简单。真是不用完全不知道。 1楼有些危言耸听了,如果FPGA只是读SD卡等标准介质中的文件,用纯逻辑来实现并不是件难事,用一个臭长的状态机就可以搞定 mark
页:
[1]