ฉันจะผ่านกรณีทดสอบ verilog และพบคำสั่ง
assign XYZ = PQR_AR[44*8 +: 64];
ตัวดำเนินการ "+:" รู้จักกันในชื่ออะไร ฉันพยายามค้นหาสิ่งนี้บน google แต่ไม่ได้รับคำตอบที่เกี่ยวข้อง
ฉันจะผ่านกรณีทดสอบ verilog และพบคำสั่ง
assign XYZ = PQR_AR[44*8 +: 64];
ตัวดำเนินการ "+:" รู้จักกันในชื่ออะไร ฉันพยายามค้นหาสิ่งนี้บน google แต่ไม่ได้รับคำตอบที่เกี่ยวข้อง
คำตอบ:
ไวยากรณ์ที่ถูกเรียกว่าการจัดทำดัชนีส่วนที่เลือก เทอมแรกคือบิตออฟเซ็ตและเทอมที่สองคือความกว้าง อนุญาตให้คุณระบุตัวแปรสำหรับออฟเซ็ต แต่ความกว้างต้องเป็นค่าคงที่
ตัวอย่างจาก SystemVerilog 2012 LRM:
logic [31: 0] a_vect;
logic [0 :31] b_vect;
logic [63: 0] dword;
integer sel;
a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]
dword[8*sel +: 8] // variable part-select with fixed width
สุดท้ายผมได้รับหน้าที่มาที่นี้จะเรียกว่าเป็นดัชนีเวกเตอร์ส่วนที่เลือก ( "+")
เพื่ออธิบายเพิ่มเติมอีกเล็กน้อย
PQR_AR[44*8 +: 64];
ด้วยการเลือกส่วนเวกเตอร์ที่ทำดัชนีซึ่งถูกเพิ่มใน Verilog 2000 คุณสามารถเลือกส่วนของรถบัสได้จากนั้นเลือกทั้งรถบัส
44 * 8 ส่วนคือจุดเริ่มต้นของส่วนเลือกตัวแปรและ 64 คือความกว้างของส่วนที่เลือกและเป็นค่าคงที่ซึ่งหมายความว่าถ้าเริ่มต้นเราได้เริ่มต้น
input [415:0] PQR;
เรากำลังเลือกส่วนเฉพาะของ PQR ที่ใช้
PQR_AR[44*8 +: 64];
นั่นคือ PQR_AR [352+: 64] หรือหมายความว่าเรากำลังมีส่วนร่วมจาก 352 ถึง 415 จาก 0 ถึง 415
ดังนั้นฉันสามารถใช้วิธีนี้เพื่อใช้กับสมการด้านล่างได้หรือไม่
temp_id[(4*n)+1] = keyID1[(r[(3+(n*4)) : (4*n)]*4+(m*4)+1+r[(3+((n-m)*4)) : (4*(n-m))])% 256];