|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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本身也不是个好主意。。。)
谢谢各位大侠了。 |
|