HDLCompiler:44,尝试写入reg中的特定位时

时间:2019-01-06 16:25:24

标签: verilog

我想分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

0 个答案:

没有答案