2017-01-05 11 views
-1

어떻게 wdata [((8 * j) +7)를 쓸 수 있습니까 : (8 * i)] = $ random; Verilog 프로그래밍 언어로? 여기서 i와 j는 reg 타입 변수입니다. Modelsim은 상수 범위 변수에 오류를 발생시킵니다. 나는 어떻게 그것을 적절한 방식으로 쓸 수 있을까?Verilog에서 비트 슬라이싱

답변

0

더 자세한 설명을 찾을 수 있습니다.

다음은 하나의 해결책입니다. 그것이 당신을 도울 것이라고 희망.

module temp(clk); 
    input clk; 
    reg i, j; 
    reg [23:0] register, select; 
    wire [23:0] temp; 

    initial 
    begin 
     i = 'd1; 
     j = 'd1; 
    end 

    generate 
    for(genvar i = 0; i<24; i++) 
    begin 
     assign temp[i] = select[i] ? $random : register[i]; 
    end 
    endgenerate 

    always @ (posedge clk) 
    begin 
     register <= temp; 
    end 

    always @ * 
    begin 
     select = (32'hffff_ffff << ((j<<3)+8))^(32'hffff_ffff << (i<<3)); 
    end 
endmodule 
+0

감사합니다. Karan에게 도움을주십시오. – Xeroxpop

+0

문제가 해결 된 경우 질문에 대한 답변을 표시하십시오. –

0

어레이 분할 구조를 사용하십시오. 당신은 당신은 솔루션을위한 미래의 하드웨어에서 생각해야 Array slicing Q&A

bit [7:0] PA, PB; 
int loc; 

initial begin 
    loc = 3; 
    PA = PB;      // Read/Write 
    PA[7:4] = 'hA;    // Read/Write of a slice 
    PA[loc -:4] = PA[loc+1 +:4]; // Read/Write of a variable slice equivalent to PA[3:0] = PA[7:4]; 
end 

의 Verilog 2001 구문에

[M -: N] // negative offset from bit index M, N bit result 
[M +: N] // positive offset from bit index M, N bit result 
+0

도움 주셔서 감사합니다. – Xeroxpop