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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3095|回复: 3

大家帮我看下这个错误怎么改(VERILOG)

[复制链接]
发表于 2008-5-23 20:06:08 | 显示全部楼层 |阅读模式

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

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

x
module Sample(EN,Reset,over,CLK,EOC_AD,fin,AD_Start);
input   EN,Reset,EOC_AD,CLK,fin;
output AD_Start,over;
reg AD_Start;
reg over;
reg sampling;
reg[7:0] Fin_cnt;
reg[7:0] delt_cnt1;  
reg[7:0] delt_cnt2;
always @(posedge fin)
begin
if(Reset==1||EN==0)
begin
    Fin_cnt<=0;
delt_cnt1<=0;
end
  if(EOC_AD==1)
  begin
   if(Fin_cnt==99)
   begin
       Fin_cnt<=0;
       AD_Start=1;
       sampling=1;
       delt_cnt1<=delt_cnt1+1;
      end
   Fin_cnt<=Fin_cnt+1;
  end
end
always @(posedge CLK)
begin
  
if(sampling==1)
   if(delt_cnt2>=100)
   begin
   delt_cnt2<=101; //停止AD采样 直到重起信号来临
   over=1;         //采完100个点
   end      
   if(delt_cnt1==delt_cnt2)
         begin      
         AD_Start=0;
      delt_cnt2<=0;
   end
   delt_cnt2<=delt_cnt2+1;
end
endmodule
错误如下:
Error (10028): Can't resolve multiple constant drivers for net "AD_Start" at Sample.v(18)
Error (10029): Constant driver at Sample.v(37)
Error: Can't elaborate top-level user hierarchy
发表于 2008-5-23 21:59:28 | 显示全部楼层
第一,你的这个模块中有两个时钟吗?
第二,你的设计中在两个过程块中对 AD_Start赋值,这应该是不允许的。
第三,你的第一个过程块中用到了三个锁存器,不清楚你的具体设计要求,但感觉你的第一个锁存中是要进行复位操作,不过在第二个锁存中如果条件成立,那么你的复位信号就不起作用了。

你自己在看看,建议你写程序的时候多写点注释,没有注释看起来成麻烦。

我也是初学者,望大家指教。
发表于 2008-5-23 22:02:25 | 显示全部楼层
AD_Start 不能在不同的always block被赋值~
 楼主| 发表于 2008-5-24 00:26:42 | 显示全部楼层


原帖由 nd9525 于 2008-5-23 21:59 发表
第一,你的这个模块中有两个时钟吗?
第二,你的设计中在两个过程块中对 AD_Start赋值,这应该是不允许的。
第三,你的第一个过程块中用到了三个锁存器,不清楚你的具体设计要求,但感觉你的第一个锁存中是要进行复 ...

谢过了我已经改过来了,不过仿真波形不对,不知道那不对,唉module Sample(EN,Reset,over,CLK,fin,AD_Start);
input   EN,Reset,CLK,fin;
output AD_Start,over;
reg AD_Start;
reg over;
reg sampling;
reg[7:0] Fin_cnt;
reg[7:0] delt_cnt1;  
reg[7:0] delt_cnt2;
always @(posedge fin)
begin
if(Reset==1||EN==0)
begin
    Fin_cnt<=0;
delt_cnt1<=0;
end
  
   if(Fin_cnt==100) //对fin上升沿计数100次
   begin
       Fin_cnt<=0;
      sampling=1; //延时开始信号
       delt_cnt1<=delt_cnt1+1;//计下一个采样点延时的N值
      end
   else
   begin
   Fin_cnt<=Fin_cnt+1;//对fin上升沿计数100次
          sampling=0;
         end
end
always @(posedge CLK)
begin
  
if(sampling==1)
   AD_Start=1;
begin
   if(delt_cnt2==100)
    //停止AD采样 直到重起信号来临
   over=1;         //采完100个点
        
   if(Fin_cnt==100&&(delt_cnt1==delt_cnt2))
         begin      
         AD_Start=0;//开始采样
      delt_cnt2<=0;
   end
else  delt_cnt2<=delt_cnt2+1;//短延时n个系统时钟脉冲
end
end
endmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-23 05:50 , Processed in 0.020077 second(s), 8 queries , Gzip On, Redis On.

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