• 2006-08-13

    在FPGA使用除法器碰到的问题 - [VHDL]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://darnshong.52blog.net/logs/2187041.html

    由于在设计中需要用到除法器,开始的时候使用是如下的形式
     g<=8192 when S>=0 and S<2 else
    8191 when S=2 else
    5460 when S=3 else
    4095 when S=4 else
    3276 when S=5 else
    2730 when S=6 else
    2340 when S=7 else
    2047 when S=8 else
    1820 when S=9 else
    ...
    4 when S>=3277 and S<4096 else
    3 when S>=4096 and S<5461 else
    2 when S>=5461 and S<8192 else
    1;
    来实现g=16383/s这个除法计算,上述那么长的一大串数据用人工来写是很累的,也容易出错。编个matlab程序就可以轻松实现。以前不是说工业革命让我们可以用机器来制造机器,那么现在我们可以用程序来帮助我们写程序,一个道理。这样做是可以实现的,并且没用延迟,就是所用的资源比较多。
      后来看到ISE中有除法器的IP核,被除数最多可以32位,并且是可以定制的。于是就试着使用。根据需要,我们在程序中设定被除数为28位,商只需整数部分,这样一来,从输入数据到得到商会用28个基本时钟的延迟(我们在定制中已经设定了一个基本时钟计算一位)。我们需要将计算出来的结果写入到一个显示ram中,以供给显示模块使用。在将数据写入ram中是用像素时钟、行时钟、场时钟来控制,如果不作任何的处理,直接写入ram中,显示出来的图像将会整体向右偏移28个像素,而最右边的28个像素跑到了图像的左边来了。最后导师告诉我一个方法,重新产生行时钟,新的时钟比原来的行时钟延迟28个像素,这样一来就没问题了。一试,果然可以,这个方法确实不错。

    收藏到:Del.icio.us




    评论

  • 我用的是VHDL。
  • 终于找到关于“调用除法器的IP核”的文章了,我最近写了一个程序,调用了除法器的IP核,程序代码如下,
    module divider_N(CLK_1M,A,B,C,D,RFD);
    input CLK_1M;
    input [15:0]A;
    input [15:0]B;
    output [15:0]C;
    output [15:0]D;
    output RFD;

    // 实例化除法器divide
    divide U1 (
    .clk(CLK_1M),
    .dividend(A),
    .divisor(B),
    .quotient(C),
    .remainder(Q),
    .rfd(RFD));
    endmodule

    但是,在用ISE自带的仿真工具进行仿真时,出现如下的error提示:
    ERROR:HDLParsers:3482 - Could not resolve instantiated unit DIV_GEN_V1_0 in Verilog module work/divide in any library
    ERROR:Simulator:198 - Failed when handling dependencies for module divider_N_tbw

    功能仿真无法实现,请指教

    我的邮箱是yangyan_0103@163.com

发表评论

您将收到博主的回复邮件
记住我