在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3972|回复: 6

[求助] 新手求助,请问累加操作,如何用生成块实现?

[复制链接]
发表于 2012-7-26 05:19:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 ttxs2009 于 2012-7-26 05:23 编辑

一下是我的代码的一部分:
generate for (i=1; i<10; i=i+1)
       MyUnit abc1(c, a, b);   // c=a*b
endgenerate

assign sum=c[1]+c[2]+c[3]+c[4]+c[5]....+c[10];   //如果用matlab就是累加了sum=0;  for i=1:10 ;  sum=sum+c; 这样,但是用verilog我就不会了——!//

always @(posedge clk)
    ......
    for(j=1; j<10; j=j+1)
         begin
           a[j]=........;
           b[j]=........;
         end
...................

因为我已经在always里面用for并行地实现了a和b的计算,同时用generate语句并行地实现了c的计算,所以c也是并行计算出来的。
但是最终需要c的累加: c[1]+c[2]+....c[10].
我想过用always来迭代着算c的累加,但是这个累加一定要在clk的一个周期内完成,也就是说累加c时用的是最快的时钟,而上例中的always @(clk)要用慢10倍的时钟。。。(小弟对数字电路的时序控制,和时钟分配不怎么懂,请问大侠们面对类似问题时是如何处理的呢?)
以上迭代累加貌似是主流的设计方法,但是因为我没有信心实现好时钟分配,就用了assign 直接算了(总感觉用wire心里没底,但是仿真结果是对的)。但是,因为目前只有10个数相加,我可以assign sum=++++++, 但是假如有100个数呢?用generate可以完成这种累加吗??(也可能assign本身也不是个好主意。。。)
谢谢各位大侠了。
发表于 2012-7-26 10:28:23 | 显示全部楼层
“这个累加一定要在clk的一个周期内完成”?我劝你不要这样固执,对于n个数相加,需采用并行结构,每个加法器最好不要多于4~6个输入,输出给register,能在log2(n)个周期内完成,软件算法转换为硬件实现不是那么容易的
reg sum;
reg c11,c22,c99,c1010;
always@(posedge clk)
begin
c11 <= c1 + c2 + c3 + c4;
c22 <= c5 + c6 + c7 + c8;
c99 <= c9;
c1010 <= c10;
sum <= c11 + c22 + c99 + c1010;
end
2个周期完成,很丑陋吧?但这就是verilog,这就是硬件
发表于 2012-7-26 17:14:50 | 显示全部楼层
累加?这里貌似不是累加的意思,就是一个加法而已。楼主的表达也要问题,你的需求和解决方法,自己的考虑等等都混杂在一起说,一点层次都没有。
发表于 2012-7-26 19:58:24 | 显示全部楼层
如果想硬件综合的话,不要在always中加入for语句。
 楼主| 发表于 2012-7-27 04:12:47 | 显示全部楼层
回复 2# gaobaitong
谢谢大侠指点。
从你的例子中学到不少东西。
我本想: 每一个clk周期并行地算出c[1]到c[100], 所以如果用多个clk周期来完成这些c[1]到c[100]的相加的话,计算结果就错了。
所以我还是得放慢更新c的频率才行吧。如果和您的这个例子联系起来,10个数相加的话,c的更新频率就减小一半对吧?
如果是100个数相加,每个加法操作4个数,那么第一个周期得到25个和,第二个周期得到7个和,第三个周期得到2个和,第四个周期是2个数相加,对吗?
我太笨了,不知道这么理解对不对,以后的选专业课上上,请高手们不吝拍砖。
 楼主| 发表于 2012-7-27 04:15:50 | 显示全部楼层
回复 3# ishock1
多谢回复。
我之前总是想用软件的思考方式,for循环里sum=sum+c这么做。
请问你认为累加的定义是什么?以后我好问出有层次的问题。
 楼主| 发表于 2012-7-27 04:25:57 | 显示全部楼层
回复 4# davincikk

always里用for不能被综合吗?我初学者, 用的是Verilog HDL数字设计与综合(第二版)14.3节讲的是综合问题, always 和 循环都是可综合的啊?不太懂,请大侠指点,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-6 17:07 , Processed in 0.028664 second(s), 9 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表