大家帮我看下这个错误怎么改(VERILOG)
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
