2012-12-06 4 views
1

나는 128 개의 parellel XOR 게이트를 생성하고 Verilog의 64 XOR 게이트에 출력을 연결하려고합니다. "EXOR"라는 이름의 모듈을 사용합니다. 내 문제는 :이 모듈을 "EXOR"루프에 넣을 때 프로그램에서 구문 오류 "예기치 않은 토큰 : 'EXOR'"제공합니다. 그리고 저는 성문 exor0, exor1, ...을 말하고 싶습니다.준비된 모듈을 Verilog의 루프에서 어떻게 사용할 수 있습니까?

어떻게 해결할 수 있습니까?

initial begin 
    for (i=0; i<128 ; i=i +1) 
    EXOR exor[i](.I1(m[2*i]), .I2(m[2*i+1]), .o(t[i])); 
end 

initial begin 
    for (i=0; i<64 ; i=i +1) 
    EXOR exor[i+128](.I1(t[2*i]), .I2(t[2*i+1]), .o(f[i])); 
end 

initial begin 
    for (i=0; i<32 ; i=i +1) 
    EXOR exor[i+192](.I1(f[2*i]), .I2(f[2*i+1]), .o(g[i])); 
end 
+0

문을 생성하면 초기 또는 항상 @ 블록에 인스턴스화를 넣을 수 없습니다. – Morgan

+0

원시 원시 'xor'가 이미있는 경우 EXOR 모듈을 만드는 이유는 무엇입니까? 이것이 성문으로 수행되어야합니까? 예를 들어, (i = 0, i <128, i = i + 1) t [i] = m [2 * i]^m [2 * i + 1]; – Greg

답변

3

Munkymorgy의 답변에 대해 자세히 알아 보려면 여기에서 생성 루프를 찾으십시오. 'initial'및 'always'블록은 "runtime"구문에 사용됩니다. 인스턴스에 배열을 만들려고하기 때문에 정교하게 해석되는 것을 원한다.

genvar i; 

generate 
    for (i = 0; i < 64; i = i + 1) begin : gen_loop 
     EXOR exor(.I1(m[2 * i]), .I2(m[2 * i + 1], .o(t[i])); 
    end 
endgenerate 

두 가지 :

1) 루프 변수는 'genvar'

2) 루프에 대한 명명 될 필요로 선언되어야한다. 이것은 인스턴스의 계층 적 이름에 사용됩니다.

관련 문제