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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] verilog里面genvar, generate的问题

[复制链接]
发表于 2011-5-14 20:50:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 greenhope 于 2011-5-14 21:59 编辑

一段小程序,如下:

module VNP_cluster(DIN, counter, DOUT);

input [3:0]counter;

input[27:0]DIN;

output [27:0];

//有问题的一段,用红色标出来了
wire [3:0]counter_new;
genvar i;
   generate
     for(i=0;i<14;i=i+1)    begin: VNP_c

             assign counter_new=((counter+i)>=14)?  (i+counter-14)  :(i+counter);
   
              VNP   VNP_B( .DIN(DIN), .counter(counter_new),  .DOUT(DOUT[2*i+1:2*i])   );
  
    end
      
   endgenerate

endmodule


VNP大概模块接口为:
module VNP( input [27:0]DIN,
                   input [3:0]counter,
                   output [1:0]DOUT);

就是generate里面调用VNP模块之前需要对其中一个输入counter进行检测和转换,如果(counter+i)大于等于14的话就减掉14再作为输入。

可是这样弄的话,最后VNP的输出全是X,相当于counter_new没被传到VNP的输入。

请问这种情况应该怎么解决啊?

我尝试过把counter_new设置为reg变量,这样的话直接报错。貌似只能是wire型的,但是好像wire型的又不能作为模块实例化时候的输入啊。


麻烦请高手指教!不知道问题在哪里,应该怎么改啊
发表于 2011-5-15 07:35:36 | 显示全部楼层
回复 1# greenhope

    这里的问题在于,counter_new应该是被multiple-driven(多驱动了),多个家伙驱动一个信号,所以变成X了,你仔细分析分析,是不是这样呢?每个i循环都只给counter_new赋值,可不是多驱动了?你可以试试把generate展开。
发表于 2011-5-15 10:43:05 | 显示全部楼层
本帖最后由 jackertja 于 2011-5-15 10:48 编辑

wire [3:0]counter_new;
genvar i;
   generate
     for(i=0;i<14;i=i+1)    begin: VNP_c
             assign counter_new[i ]=((counter+i)>=14)?  (i+counter-14)  :(i+counter);
              VNP   VNP_B( .DIN(DIN), .counter(counter_new[i ]),  .DOUT(DOUT[2*i+1:2*i])   );
    end
   endgenerate
可以这样
发表于 2011-5-16 13:30:20 | 显示全部楼层
LS说得没错,就是这原因。
使用generate,生成的代码会展开的,相当于按参数变量把里面的代码反复地写了N遍,而不是C语言里的变量按时间变化。
 楼主| 发表于 2011-5-16 15:50:08 | 显示全部楼层
谢谢各位回复啊。
我开始的想法是:对于每个i,都对counter检测一次,得到counter_new直接就在下面被用掉了。
至于每次被赋新值没关系。

如果用二楼说的方法,估计最开始counter_new得设置成 wire [3:0] counter_new[13:0],感觉很浪费资源啊
发表于 2013-7-16 11:35:31 | 显示全部楼层
回复 4# eaglelsb


    多谢,正有此疑问,看到你的解答了
发表于 2015-6-29 16:28:41 | 显示全部楼层
多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-16 15:08 , Processed in 0.033521 second(s), 10 queries , Gzip On, Redis On.

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