请教高手Verilog语言程序
时间:10-02
整理:3721RD
点击:
module biyue(clk_48M);
input clk_48M; //rst为全局复位信号(高电平有效),clk_48M为输入时钟信号
reg[1:0] S[79:0]; //S是输入输入出序列
reg reset;
initial
begin
S[0]=0;
S[1]=0;
S[2]=0;
S[3]=0;
S[4]=1;
S[5]=1;
S[6]=1;
S[7]=1;
S[8]=2;
S[9]=2;
S[10]=2;
S[11]=2;
S[12]=3;
S[13]=3;
S[14]=3;
S[15]=3; //S[0]-S[15]序列为路由矩阵的A0项
S[16]=0;
S[17]=1;
S[18]=2;
S[19]=3;
S[20]=0;
S[21]=1;
S[22]=2;
S[23]=3;
S[24]=0;
S[25]=1;
S[26]=2;
S[27]=3;
S[28]=0;
S[29]=1;
S[30]=2;
S[31]=3; //S[16]-S[31]序列为路由矩阵的A1项
S[48]=3;
S[49]=3;
S[50]=2;
S[51]=2;
S[52]=3;
S[53]=1;
S[54]=3;
S[55]=1;
S[56]=0;
S[57]=0;
S[58]=1;
S[59]=1;
S[60]=2;
S[61]=2;
S[62]=0;
S[63]=0; //S[48]-S[63]序列为路由矩阵的A3项
S[64]=3;
S[65]=2;
S[66]=2;
S[67]=3;
S[68]=0;
S[69]=1;
S[70]=1;
S[71]=3;
S[72]=0;
S[73]=1;
S[74]=0;
S[75]=2;
S[76]=0;
S[77]=1;
S[78]=2;
S[79]=3; //S[64]-S[79]序列为路由矩阵的A4项
reset=1;
end
always@(posedge clk_48M)
begin
if(reset==1)//对"桥"矩阵进行编码,即完成对"桥"矩阵的求解,记录在S[32]-S[37]
begin
S[32]=0;
S[33]=1;
S[34]=2;
S[35]=3;
S[36]=0;
S[37]=1;
S[38]=2;
S[39]=3;
S[40]=0;
S[41]=1;
S[42]=2;
S[43]=3;
S[44]=0;
S[45]=1;
S[46]=2;
S[47]=3;
reset=0;
end
end
endmodule
是Verilog语言,在quartus在运行上述程序后,发现只有S[1]~[47]有值,S[48]~S[79]没所预想的值。请教高手这是为什么?有什么办法可以补救?
input clk_48M; //rst为全局复位信号(高电平有效),clk_48M为输入时钟信号
reg[1:0] S[79:0]; //S是输入输入出序列
reg reset;
initial
begin
S[0]=0;
S[1]=0;
S[2]=0;
S[3]=0;
S[4]=1;
S[5]=1;
S[6]=1;
S[7]=1;
S[8]=2;
S[9]=2;
S[10]=2;
S[11]=2;
S[12]=3;
S[13]=3;
S[14]=3;
S[15]=3; //S[0]-S[15]序列为路由矩阵的A0项
S[16]=0;
S[17]=1;
S[18]=2;
S[19]=3;
S[20]=0;
S[21]=1;
S[22]=2;
S[23]=3;
S[24]=0;
S[25]=1;
S[26]=2;
S[27]=3;
S[28]=0;
S[29]=1;
S[30]=2;
S[31]=3; //S[16]-S[31]序列为路由矩阵的A1项
S[48]=3;
S[49]=3;
S[50]=2;
S[51]=2;
S[52]=3;
S[53]=1;
S[54]=3;
S[55]=1;
S[56]=0;
S[57]=0;
S[58]=1;
S[59]=1;
S[60]=2;
S[61]=2;
S[62]=0;
S[63]=0; //S[48]-S[63]序列为路由矩阵的A3项
S[64]=3;
S[65]=2;
S[66]=2;
S[67]=3;
S[68]=0;
S[69]=1;
S[70]=1;
S[71]=3;
S[72]=0;
S[73]=1;
S[74]=0;
S[75]=2;
S[76]=0;
S[77]=1;
S[78]=2;
S[79]=3; //S[64]-S[79]序列为路由矩阵的A4项
reset=1;
end
always@(posedge clk_48M)
begin
if(reset==1)//对"桥"矩阵进行编码,即完成对"桥"矩阵的求解,记录在S[32]-S[37]
begin
S[32]=0;
S[33]=1;
S[34]=2;
S[35]=3;
S[36]=0;
S[37]=1;
S[38]=2;
S[39]=3;
S[40]=0;
S[41]=1;
S[42]=2;
S[43]=3;
S[44]=0;
S[45]=1;
S[46]=2;
S[47]=3;
reset=0;
end
end
endmodule
是Verilog语言,在quartus在运行上述程序后,发现只有S[1]~[47]有值,S[48]~S[79]没所预想的值。请教高手这是为什么?有什么办法可以补救?
你用initial语句来赋值,汗。
?因为在一开始时需要用到两组输入输出数组,所以用了initial语句。用它来赋值有什么特别需要注意的吗?
首先你的initial是不可综合的,要用always
只有与输出关联的reg型变量的值会被保留,否则会被优化掉。