高人,帮忙,verilog语句编译不对啊???!急急急急急。。。。。

module pp(datain,dataout,clk,wr);
input [1:0] datain;
input clk;
output [15:0] dataout;
output wr;
integer i=3'b0;
reg dataout;
reg wr;
always @ (posedge clk)
begin
if (i<=7)
i<=i+1;
else
i=0;
begin
case(i)
0:dataout[1:0]=datain[1:0];
1:dataout[3:2]=datain[1:0];
2:dataout[5:4]=datain[1:0];
3:dataout[7:6]=datain[1:0];
4:dataout[9:8]=datain[1:0];
5:dataout[11:10]=datain[1:0];
6:dataout[13:12]=datain[1:0];
7:dataout[15:14]=datain[1:0];
endcase
if(i==7) wr=1;
else wr=0;
end
end
endmodule

Error (10053): Verilog HDL error at pp.v(17): can't index object "dataout" with zero packed or unpacked array dimensions
这是咋么回事儿???????

这个地方
reg dataout; 改为
reg [15:0] dataout;
另外不建议使用integer,也不建议使用 “++” 等这些符号

module TEST(datain,dataout,clk,wr);
input [1:0] datain;
input clk;
output [15:0] dataout;
output wr;
reg [2:0] i=3'b0;
reg [15:0] dataout;
reg wr;
always @ (posedge clk)
begin
if (i<=3'h7)
i = i + 3'h1;
else
i=0;
begin
case(i)
3'h0:dataout[1:0]=datain[1:0];
3'h1:dataout[3:2]=datain[1:0];
3'h2:dataout[5:4]=datain[1:0];
3'h3:dataout[7:6]=datain[1:0];
3'h4:dataout[9:8]=datain[1:0];
3'h5:dataout[11:10]=datain[1:0];
3'h6:dataout[13:12]=datain[1:0];
3'h7:dataout[15:14]=datain[1:0];
endcase
if(i==7) wr=1;
else wr=0;
end
end
endmodule
我帮你改过来了,编译成功了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-23
module pp(datain,dataout,clk,wr);
input [1:0] datain;
input clk;
output [15:0] dataout;
output wr;
reg [2:0] i;
reg [15:0] dataout;
reg wr;
always @ (posedge clk)
begin
if (i<=7)
i<=i+1;
else
i<=0;
begin
case(i)
0:dataout[1:0]=datain[1:0];
1:dataout[3:2]=datain[1:0];
2:dataout[5:4]=datain[1:0];
3:dataout[7:6]=datain[1:0];
4:dataout[9:8]=datain[1:0];
5:dataout[11:10]=datain[1:0];
6:dataout[13:12]=datain[1:0];
7:dataout[15:14]=datain[1:0];
endcase
if(i==7) wr=1;
else wr=0;
end
end
endmodule
==============================================================
1.i和dataout都要reg型
2.i的阻塞赋值和非阻塞赋值要一直

修改后编译过了,望及时采纳!!
第2个回答  2011-06-23
你把
if (i<=7)
i<=i+1;
else
i=0;
改成
if (i<7)
i=i+1;
else
i=0;
试试。追问

试了,不行,悲剧啊,谢谢了

相似回答