求助,才学Verilog很多语法都不清楚。
module TEST1(A,B,C,D,E,CLK,RESET);output A,B,C,D,E;
reg A,B,C,D,E;
input CLK,RESET;
reg counter;
always @(posedge CLK or posedge RESET)
begin
if(RESET==1)
begin
counter<=0;A<=B<=C<=D<=E<=0;
end
else
begin
if(counter==255)
counter<=0;
else
counter<=counter+1;
if(counter==51)
begin A<=1;B<=C<=D<=E<=0; end
else if(counter==102)
begin B<=1;A<=C<=D<=E<=0; end
else if(counter==153)
begin C<=1;A<=B<=D<=E<=0; end
else if(counter==204)
begin D<=1;A<=B<=C<=E<=0; end
else if(counter==255)
begin E<=1;A<=B<=C<=D<=0; end
end
end
endmodule
我上面代码的意思是在计数器counter的值到51的时候A输出1,到102的时候B输出1,一直这样下去。但是好像仿真的时候,C,D,E三个都直接就是高电平,前面A,B两个的波形也不对。这个我的代码到底出错在那里呢?
望高手指点。 这句话是经典:
A<=B<=C<=D<=E<=0;
原来人能懒到这个地步的。 啊,这样写不行吗?要A<=0;B<=0;C<=0;D<=0;E<=0;这样写吗? 改写了好像结果对了,在去看看语法,谢谢楼上的大哥啦。 汗呀! 如果A<=B<=C<=D<=E<=0; 这是ABCDE五个触发器级联,后面每级触发器上都会有一级延迟,不会一次性都是0.至少要五个clk才能全部为零 回复【5楼】liuxuemin2010 老鼠
-----------------------------------------------------------------------
我错了 这个有点无语...
假设:
module smg
(
CLK, RSTn,
SDO...
)
input CLK;
input RSTn;
output SDO;
/********************************************/
reg rSDO;
always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
rSDO = 1'b0;
else
rSDO = 1'b1;
assign SDO = rSDO;
/********************************************/
给了一个假设..自己看吧。
楼主代码“风格”要多多进步呀。
这样写出来,别人看得懂才怪。即使看得懂也不知道如何解释:
建议看
特权同学的视频教程,有好心人上转了 回复【2楼】shushi0123
-----------------------------------------------------------------------
呵呵,写C用语言也不必这样吧?
页:
[1]