搜索
bottom↓
回复: 6

在 vhdl 或 Verilog 中如何读取 二进制的数据文

[复制链接]

出0入0汤圆

发表于 2010-8-14 19:23:16 | 显示全部楼层 |阅读模式
在 vhdl 或 Verilog 中如何读取 二进制的数据文件。 已经郁闷有一段时间了。

以下蓝色文字由站长:armok 于:2010-08-15,00:07:36 加入。
你的原标题:“<font color=black>哪位资深高人知道?
” 不合符规定。请更改成能说明帖子大意的标题
试想一下,如果本论坛的帖子标题清一色的‘帮助!’,‘ADC求救!’等笼统的标题,你在阅读的过程中会造成许多麻烦。
所以本论坛规定:一定要起一个能说明帖子大意的标题。不允许“关于 AVR 的 ADC 使用!”这种笼统标题。作为标题,必须说明清楚:
 ①你是在请教问题,还是在介绍有关的知识?
 ②ADC的问题有许多,你是想说那方面的内容?
注意以上两点,标题应该改成如:“请教:ADC 可以不使用中断吗?”。
起一个能说明帖子大意的标题,除了减轻我们的帖子分类整理工作,还方便其它人阅读,节省大家的时间。
注:使用合格的标题,对你来说只是举手之劳,但却会为我们的管理工作提供很大的便利。谢谢你的支持。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-8-14 20:21:19 | 显示全部楼层
文件如果来源是想SD卡等标准介质中的文件系统管理的文件,你就惨了,FPGA做文件管理通常要个微处理器的软核,并且要有个兼容标准格式的文件系统。不然你从读物理扇区开始,工程非常大,一个人难

出0入0汤圆

发表于 2010-8-14 20:21:55 | 显示全部楼层
这是我做滤波器用的一个测试文件,里面包含文件的读写

`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 [IDATA_WIDTH-1:0]   fir_in;
wire [OUT_WIDTH-1:0]   fir_out;


reg [IDATA_WIDTH-1:0]   memb [1:NOOFDATA];
reg [OUT_WIDTH-1:0]     membyte [0:NOOFDATA-1];

reg   write;
/*
integer   count_w;
integer   regcount;
integer   handle;
integer   k;
*/
integer   handle;
reg [18:0]   count_w;
reg [5:0]    regcount;
reg [18:0]   k;
reg [18:0]   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[k];
      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[k0] <= 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[count_w]);
      $display("%d",membyte[count_w]);
   end
   $fclose(handle);
end

endmodule

出0入0汤圆

发表于 2010-8-14 20:41:30 | 显示全部楼层
一楼说得好   我弄过一下读写FAT32格式的SD卡  是用AVR来做的   感觉蛮复杂的    如果改写成FPGA就更   麻烦了,所以加个软核就比较好了

出0入0汤圆

 楼主| 发表于 2010-8-14 21:16:12 | 显示全部楼层
总算找到了

看来 Verilog和 VHDL 都能读 二进制文件。
用    File_Open(Status        => fStatus_v,
                 F             => DataIn_f,   
                 External_Name => "IntOut.txt",  
                 Open_Kind     => Read_Mode);    -- Or Write_Mode
就可以了。

操作二进制文件是如此简单。真是不用完全不知道。

出0入0汤圆

发表于 2010-8-14 22:17:50 | 显示全部楼层
1楼有些危言耸听了,如果FPGA只是读SD卡等标准介质中的文件,用纯逻辑来实现并不是件难事,用一个臭长的状态机就可以搞定

出0入0汤圆

发表于 2010-8-15 12:18:49 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表