zoukankan      html  css  js  c++  java
  • verilog HDL 重复运算的问题

    最近的一个项目上需要把512个数随机采样数据,同时相加,求和。也就是说在一个是周期完成,达到一个时钟出一个求和结果。本来这个用verilog hdl来表达是一个很简单的事:

    reg[15:0] addt[511:0];//定义一个512个一维数组
    wire[31:0] sumd;
    assign sumd=addt[0]+addt[1]+addt[2]+addt[3]+addt[4]+addt[5]+....addt[511];

    但问题是,如果按上面的方法写,语句太长,写起来太麻烦了。如何简化写法呢?类似象:{8‘h22,8'h22,8'h22,8'h22,8'h22,8'h22,8'h22},可以简写成{7{8’h22}}一样。

    对于这个问题,我发了帖子到altera中文论坛上请教(http://www.alteraforum.com.cn/showtopic-3458.aspx),也没有什么结果。

    无奈只好采用如下方式: (希望有更好写法的高手给我留言)

    wire[31:0] wsumbuf0[7:0],wsumbuf1[7:0]

    generate
    genvar ii
    for(ii=0;ii<64; ii=ii+1)
    begin:rep1
            wsumbuf0[ii]=addt[8*ii]+addt[8*ii+1]+addt[8*ii+2]+addt[8*ii+3]+addt[8*ii+4]+addt[8*ii+5]+addt[8*ii+6]+addt[8*ii+7];
    end
    endgenerate

    generate
    genvar jj
    for(jj=0;jj<8; jj=jj+1)
    begin:rep2
            wsumbuf1[jj]=wsumbuf0[8*jj]+wsumbuf0[8*jj+1]+wsumbuf0[8*jj+2]+wsumbuf0[8*jj+3]+wsumbuf0[8*jj+4]+wsumbuf0[8*jj+5]+wsumbuf0[8*jj+6]+wsumbuf0[8*jj+7];
    end
    endgenerate
    ///////////////////////////////
    assign sumd=wsumbuf1[0]+wsumbuf1[1]+wsumbuf1[2]+wsumbuf1[3]+wsumbuf1[4]+wsumbuf1[5]+wsumbuf1[6]+wsumbuf1[7]; //8*8*8=512刚好是512个;

    www.shuleikeji.com
  • 相关阅读:
    冒泡排序
    快速排序
    玩转git版本控制软件
    django内容总结
    ajax图片上传功能
    随机验证码
    制作博客系统
    django自带的用户认证和form表单功能
    COOKIE 与 SESSION
    Ajax知识
  • 原文地址:https://www.cnblogs.com/dongchunxiao/p/2747922.html
Copyright © 2011-2022 走看看