|
本帖最后由 liudingding 于 2017-7-28 11:29 编辑
程序中第一个计数器能计数,想在几个特定数值输出脉冲信号,这几个脉冲信号作为清零信号或者合并后作为下一个计数器的时钟。但是第二个计数器不能计数。
另一个问题,第一个计数器程序中qy、hy、dec、yh等需要设定为reg(我理解reg型数据为寄存器型数据)型数据才能正常编译,我想把它们设定为门电路合并后数据,就是wire型数据,不想成为寄存器数据,怎么办。
第三个问题,三态数据d(程序中加************)想设定为八位,但是无论哪里加上[7:0],就是:d[7:0],程序都报错。我理解程序:assign d =!wr?fh[7:0]:8'bz;是八位但是引脚设置就一位。
module CPLD(cs1,cs2,in,out,ck_out,
fh,d,ra,hs,vs,pclk,wr);
input in, wr;
output out,ck_out,cs1,hs,vs,pclk,cs2;
assign out =!in;
output[9:0] fh; //
reg[9:0] fh;
inout d;//***************************************
output[17:0] ra;//ra:ram地址
reg[17:0] ra;
reg[1:0] fj;
reg[9:0] fi;
reg[1:0] fk;
reg v0,v1,v2,v3,fkk,vv,ve;
reg js,qy,hy,dec,yh,fjk,hs,vs,he,hh;
assign d =!wr?fh[7:0]:8'bz;//*****************************************
assign ck_out = in;
assign pclk = in;
assign cs1 = fj[0];
assign cs2 = pclk;
always @(posedge in)
begin
if(!js) fh <= 0;
else fh <= fh+1;
if(fh==0) qy=1;
if(fh==48) hy=1;
if(fh==88) dec=1;
if(fh==850) yh=1;
if(fh==928) js=1;
fjk=hy|dec|yh;
end
always @(posedge fjk)
begin
if(!qy) fj <= 0;
else fj <= fj+1;
if(fj==0) hh=1;
if(fj==2) he=1;
hs =!hh;
end
always @(posedge qy)
begin
if(!v3) fi <= 0;
else fi <= fi+1;
if(fi==0) v0=1;
if(fi==3) v1=1;
if(fi==29) v2=1;
if(fi==525) v3=1;
fkk = v1|v2;
end
always @(posedge fkk)
begin
if(!v0) fk <= 0;
else fk <= fk+1;
if(fk==0) vv=1;
if(fk==2) ve=1;
vs =!vv;
end
always @(posedge in)
begin ra <=ra+1; end
endmodule
|
|