reg [16*8-1:0]D_x; //一大串个16位的数据,8个连续的样本全放在这个寄存器中
always @ (posedge clk or rst_n)
if(!rst_n)
D_x <= 0;
else
D_x <= { D_x[16*7-1:16] , Xi};//舍去高16位,低16位由新数据补齐
genevar i;
reg [15:0]data_x[0:7];//8个16位的数组
generate
for(i=0;i<8;i=i+1)]
always @ (posedge clk or rst_n)
begin:data_to_memory
if(!rst_n)
data_x[i] <= 0;
esle
data_x[i] <= D_x[16*(i+1)-1 :[16*(i+1) ]; //把D_x分成8段,每段存到数组data_x的一个单元
end
endgenerate
以上代码没错,仿真的时候前8个数据都存到了数组中,关键是之后的数据这个数组就不更新了 求解
data_x[i] <= D_x[16*(i+1)-1 :[16*i ]; //把D_x分成8段,每段存到数组data_x的一个单元
这后面确实写错了
不过这个问题被我解决了,借了一个是时钟信号把这个数组复位
for语句在verilog还是用的呢 尤其是在generate语句里面
对 我写错了 是16*(i+1)-1 :16*(i)的
这个问题别我解决了 借了个时钟吧memory复位了一下,意思就是数组要刷新
你说的不对 for在generate里面跟always外面的情况还是用的比较多
for跟if语句如果直接用在always外面的的话,那会条件编译,里面的判断条件不能使reg或者是wire,一定要是 常量