|  | 
 
| 
本帖最后由 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本身也不是个好主意。。。)
 谢谢各位大侠了。
 | 
 |