我想分4步用8位数据增量填充32位reg。我正在使用此行:
always @(STATE) begin
...
OUTPUT_REG[7+(8*i):0+(8*i)] <= DATA_IN;
当“状态”更改时,接下来的8位应填充输入数据。 “ i”是reg类型。 但是我得到以下错误:ERROR:HDLCompiler:44:我不是一个常数。 我无法使“ i”为常数,因为我需要对其进行更改以在OUTPUT_REG中循环。这样不能使用另一个reg来移位reg中的位数吗?
整个代码:
module INTPRT2(CLK,
DATA_IN,
STATE,
DATA_AMP,
DATA_FREQ,
DATA_WAVE);
input CLK;
input [7:0] DATA_IN;
input STATE;
output reg [7:0] DATA_AMP;
output reg [31:0] DATA_FREQ;
output reg [7:0] DATA_WAVE;
reg [1:0] mode = 0;
reg [31:0] OUTPUT_REG;
reg i = 0;
always @(posedge CLK) begin
if (DATA_IN==8'b01100001) begin //amplitude
mode <= 1;
end
else if (DATA_IN==8'b01100110) begin //frequency
mode <= 2;
end
else if (DATA_IN==8'b01110111) begin //waveform
mode <= 3;
end
else begin
mode <= 0;
end
end
always @(STATE) begin
if (mode == 2) begin
OUTPUT_REG[7+(8*i):0+(8*i)] <= DATA_IN;
i <= i + 1;
if(i == 3) begin
i <= 0;
DATA_FREQ <= OUTPUT_REG;
mode <= 0;
end
end
else begin
DATA_FREQ <= 32'b00000000111111110000000011111111;
end
end
endmodule