2016-12-04 1 views
0

모듈 배열을 초기화하려고하는데 각각 3 개의 매개 변수가 있습니다. 그 중 2 개는 상단의 reg 묶여진 배열 쌍에 정의한 값을 기반으로합니다 이런 모듈을 인스턴스화배열 매개 변수에 바인딩 매개 변수 오류 (Verilog)

reg[31:0] k [0:63] = '{ 
32'hd76aa478, 32'he8c7b756, 32'h242070db, 32'hc1bdceee, 
32'hf57c0faf, 32'h4787c62a, 32'ha8304613, 32'hfd469501, 
32'h698098d8, 32'h8b44f7af, 32'hffff5bb1, 32'h895cd7be, 
32'h6b901122, 32'hfd987193, 32'ha679438e, 32'h49b40821, 
32'hf61e2562, 32'hc040b340, 32'h265e5a51, 32'he9b6c7aa, 
32'hd62f105d, 32'h02441453, 32'hd8a1e681, 32'he7d3fbc8, 
32'h21e1cde6, 32'hc33707d6, 32'hf4d50d87, 32'h455a14ed, 
32'ha9e3e905, 32'hfcefa3f8, 32'h676f02d9, 32'h8d2a4c8a, 
32'hfffa3942, 32'h8771f681, 32'h6d9d6122, 32'hfde5380c, 
32'ha4beea44, 32'h4bdecfa9, 32'hf6bb4b60, 32'hbebfbc70, 
32'h289b7ec6, 32'heaa127fa, 32'hd4ef3085, 32'h04881d05, 
32'hd9d4d039, 32'he6db99e5, 32'h1fa27cf8, 32'hc4ac5665, 
32'hf4292244, 32'h432aff97, 32'hab9423a7, 32'hfc93a039, 
32'h655b59c3, 32'h8f0ccc92, 32'hffeff47d, 32'h85845dd1, 
32'h6fa87e4f, 32'hfe2ce6e0, 32'ha3014314, 32'h4e0811a1, 
32'hf7537e82, 32'hbd3af235, 32'h2ad7d2bb, 32'heb86d391 
}; 

reg[4:0] s [0:63] = '{ 
7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 
4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 
6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 
}; 

I 그 값에 접근하고있어 : 이런 모듈

hash_op #(0,s[0],k[0]) hash_op_0(// <- ERROR HERE! 
    .clk(clk), 
    .a(a_initial), 
    .b(b_initial), 
    .c(c_initial), 
    .d(d_initial), 
    .m(message_padded), 
    .a_out(bl_a[1]), 
    .b_out(bl_b[1]), 
    .c_out(bl_c[1]), 
    .d_out(bl_d[1]), 
    .m_out(bl_m[1]) 
    ); 

generate 
    genvar i; 
     for(i = 1; i<64; i=i+1) 
     begin : generate_hash_ops 
      hash_op #(i,s[i],k[i]) hash_op_i(// <- ERROR HERE! 
       .clk(clk), 
       .a(bl_a[i]), 
       .b(bl_b[i]), 
       .c(bl_c[i]), 
       .d(bl_d[i]), 
       .m(bl_m[i]), 
       .a_out(bl_a[i+1]), 
       .b_out(bl_b[i+1]), 
       .c_out(bl_c[i+1]), 
       .d_out(bl_d[i+1]), 
       .m_out(bl_m[i+1]) 
       ); 
     end 
endgenerate 
,369

λ iverilog -o test -c file_list.txt 
md5-core.v:49: error: Unable to bind parameter `k['sd0]' in `md5core' 
md5-core.v:49: error: Unable to bind parameter `s['sd0]' in `md5core' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[1]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[1]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[2]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[2]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[3]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[3]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[4]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[4]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[5]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[5]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[6]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[6]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[7]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[7]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[8]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[8]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[9]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[9]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[10]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[10]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[11]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[11]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[12]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[12]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[13]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[13]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[14]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[14]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[15]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[15]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[16]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[16]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[17]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[17]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[18]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[18]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[19]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[19]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[20]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[20]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[21]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[21]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[22]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[22]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[23]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[23]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[24]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[24]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[25]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[25]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[26]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[26]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[27]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[27]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[28]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[28]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[29]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[29]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[30]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[30]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[31]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[31]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[32]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[32]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[33]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[33]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[34]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[34]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[35]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[35]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[36]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[36]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[37]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[37]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[38]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[38]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[39]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[39]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[40]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[40]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[41]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[41]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[42]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[42]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[43]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[43]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[44]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[44]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[45]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[45]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[46]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[46]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[47]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[47]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[48]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[48]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[49]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[49]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[50]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[50]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[51]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[51]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[52]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[52]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[53]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[53]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[54]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[54]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[55]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[55]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[56]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[56]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[57]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[57]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[58]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[58]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[59]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[59]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[60]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[60]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[61]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[61]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[62]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[62]' 
md5-core.v:67: error: Unable to bind parameter `k[i]' in `md5core.generate_hash_ops[63]' 
md5-core.v:67: error: Unable to bind parameter `s[i]' in `md5core.generate_hash_ops[63]' 
128 error(s) during elaboration. 

사람이 어떤 조언이 있습니까 : 1,363,210

하지만 나는이 오류가 계속? 배열을 잘못 초기화 한 것일 수도 있습니다. 또는 verilog가 배열 값을 기반으로 매개 변수를 정의하는 것을 지원하지 않을 수도 있지만 의심 스럽습니다. 내 매개 변수를 정의하는 데 더 효율적인 리소스가 있습니까? 나는 이러한 배열에서이 시퀀스를 생성하는 것 이상의 값을 사용하지 않는다. "k"는 대신에 함수로 정의 할 수 있습니다. 사용할 수는 있지만 사용할 수는 없습니다.

+0

트리는는'reg'에를'변화와 준수하는 시뮬레이터와 함께 작동합니다 's'와'k'를 정의 할 때'매개 변수'를 사용합니다. SystemVerilog – Greg

+0

@Greg 감사를 사용 설정해야 할 수도 있습니다! 그것을 매개 변수로 전환했지만 지금은 iccarus verilog가 불행히도 systemverilog를 완벽하게 지원하지 않기 때문에 ModelSim을 사용하여 막혔습니다. – Toms42

답변

1

k 및는 컴파일 할 매개 변수로 정의해야합니다. 가장 쉬운 해결책은 regparameter으로 변경하고 SystemVerilog를 활성화하는 것입니다. Verilog는 압축 해제 된 매개 변수 배열이나 압축 해제 된 배열 '{}을 지원하지 않습니다. Verilog 보완하려면 ks을 단일 패키지 배열 (일명 벡터)로 변경해야합니다.

k

은 비교적 쉽게 변화 : reg [31:0] k [0:63] = '{ -> parameter [32*64-1:0] k = {

s은 비슷하지만 당신은 그것을 올바르게 팩 모든 항목에 5'd 접두사 필요

(그렇지 않으면 Verilog를 처리합니다 7 32'd7 등)
parameter [64*5-1:0] s = { 
5'd7, 5'd12, 5'd17, 5'd22, 5'd7, 5'd12, 5'd17, 5'd22, 5'd7, 5'd12, 5'd17, 5'd22, 5'd7, 5'd12, 5'd17, 5'd22, 
5'd5, 5'd9, 5'd14, 5'd20, 5'd5, 5'd9, 5'd14, 5'd20, 5'd5, 5'd9, 5'd14, 5'd20, 5'd5, 5'd9, 5'd14, 5'd20, 
5'd4, 5'd11, 5'd16, 5'd23, 5'd4, 5'd11, 5'd16, 5'd23, 5'd4, 5'd11, 5'd16, 5'd23, 5'd4, 5'd11, 5'd16, 5'd23, 
5'd6, 5'd10, 5'd15, 5'd21, 5'd6, 5'd10, 5'd15, 5'd21, 5'd6, 5'd10, 5'd15, 5'd21, 5'd6, 5'd10, 5'd15, 5'd21 
}; 

색인 순서는 바뀌지 않습니다. 이전 k[0]은 이제 k[64*32-1 : 63*32]입니다. 반복은 상수 및 제네바로 수행되므로 k[(64-i)*32-1 : (63-i)*32]을 수행 할 수 있습니다.

hash_op #(0,s[64*5-1 : 63*5],k[64*32-1 : 63*32]) hash_op_0(
... 

for(i = 1; i<64; i=i+1) begin : generate_hash_ops 
    hash_op #(i,s[(64-i)*5-1 : (63-i)*5],k[(64-i)*32-1 : (63-i)*32]) hash_op_i(
    ... 

나는 indexing vectors and arrays with +: 그래서 인덱스를 계산하는 데 사용되는 수식은 한 쪽을 선호 플러스 항상 블록 내에서 변수 순 유형 +: 작품을 사용하고 문을 할당하고, 덜 입력됩니다.

hash_op #(0,s[63*5 +: 5],k[63*32 +: 32]) hash_op_0(
... 

for(i = 1; i<64; i=i+1) begin : generate_hash_ops 
    hash_op #(i,s[(63-i)*5 +: 5],k[(63-i)*32 +: 32]) hash_op_i(
    ... 

이 전략은 icarus verilog 0.10에서 작동합니다. 나는 icarus verilog 0.9.7처럼 보이고 old는 매개 변수의 전체 값만을 사용할 수 있다는 제한이있다. 이 메시지를 준다 "미안 : 수있는 매개 변수의 일부가 아닌 선택 비트." 이 전략은 ModelSim을 작동 않으며 IEEE1364-2001 또는 IEEE1800

+0

와우 정말 고마워요! 완벽하게 작동하며 모델 밈을 사용할 수 있습니다. + : 표기법이 매우 멋지다. 그게 뭔지 몰랐어요. 감사! – Toms42