微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 大家帮我看下这个错误怎么改(VERILOG)

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

时间:10-02 整理:3721RD 点击:
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

第一,你的这个模块中有两个时钟吗?
第二,你的设计中在两个过程块中对 AD_Start赋值,这应该是不允许的。
第三,你的第一个过程块中用到了三个锁存器,不清楚你的具体设计要求,但感觉你的第一个锁存中是要进行复位操作,不过在第二个锁存中如果条件成立,那么你的复位信号就不起作用了。
你自己在看看,建议你写程序的时候多写点注释,没有注释看起来成麻烦。
我也是初学者,望大家指教。

AD_Start 不能在不同的always block被赋值~

谢过了我已经改过来了,不过仿真波形不对,不知道那不对,唉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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top