สิ่งที่ผู้ประกอบการนี้เรียกว่า“ +:” ใน verilog


14

ฉันจะผ่านกรณีทดสอบ verilog และพบคำสั่ง

assign XYZ = PQR_AR[44*8 +: 64];

ตัวดำเนินการ "+:" รู้จักกันในชื่ออะไร ฉันพยายามค้นหาสิ่งนี้บน google แต่ไม่ได้รับคำตอบที่เกี่ยวข้อง

คำตอบ:


22

ไวยากรณ์ที่ถูกเรียกว่าการจัดทำดัชนีส่วนที่เลือก เทอมแรกคือบิตออฟเซ็ตและเทอมที่สองคือความกว้าง อนุญาตให้คุณระบุตัวแปรสำหรับออฟเซ็ต แต่ความกว้างต้องเป็นค่าคงที่

ตัวอย่างจาก 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

2

สุดท้ายผมได้รับหน้าที่มาที่นี้จะเรียกว่าเป็นดัชนีเวกเตอร์ส่วนที่เลือก ( "+")

เพื่ออธิบายเพิ่มเติมอีกเล็กน้อย

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


จากคำตอบ dwikle ที่ได้จาก LRM เมื่อเราเริ่มต้นบัสเช่น: อินพุต [415: 0] PQR; จากนั้น PQR_AR [44 * 8 +: 64] ควรเป็น PQR_AR [352: 288] และไม่ใช่ PQR_AR [415: 352] โปรดแก้ไขให้ฉันด้วยถ้าฉันไปผิดทาง
ABX

@ABX ฉันเห็นด้วยเกี่ยวกับทิศทางยกเว้นว่าควรเป็น PQR_AR [352: 289] เป็นรถบัสที่มีความกว้าง 64 บิต
peterbc

0

ดังนั้นฉันสามารถใช้วิธีนี้เพื่อใช้กับสมการด้านล่างได้หรือไม่

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];

ยินดีต้อนรับสู่เว็บไซต์ :-) แต่คุณไม่สามารถถามคำถามที่นี่ โปรดอ่านทัวร์และศูนย์ช่วยเหลือเพื่อดูว่าไซต์ Stack Exchange ทำงานอย่างไร พวกเขาไม่เหมือนฟอรัมอินเทอร์เน็ตทั่วไป คุณได้ถามคำถามในพื้นที่ที่สงวนไว้สำหรับคำตอบเท่านั้น ที่จะถามคำถามใหม่ไปที่นี่ คุณสามารถเพิ่มลิงก์ไปยังคำถามนี้เมื่อคุณถามคำถามใหม่ของคุณสำหรับบริบทหากคุณเชื่อว่าจะช่วยได้ "ไม่ใช่คำตอบ" นี้จะถูกตั้งค่าสถานะเพื่อลบโดยโมเดอเรเตอร์ แต่ฉันขอแนะนำให้คุณลบด้วยตัวเองโดยเร็วที่สุด ขอบคุณ
SamGibson

1
เพียงแค่ FYI ฉันได้แก้ไขคำถามของคุณเพื่อเพิ่มเครื่องหมายคำถามและเพื่อเพิ่ม "รั้วรหัส" เพื่อให้รหัสของคุณแสดงอย่างถูกต้อง อย่างไรก็ตามยังคงไม่สามารถถามคำถามได้ที่นี่ ฉันทำการแก้ไขเหล่านั้นเพื่อที่ว่าถ้าคุณถามคำถามของคุณถูกต้อง (เช่นในคำถามที่แยกต่างหาก) คุณสามารถคัดลอกเวอร์ชันที่แก้ไขนี้และรหัสจะแสดงอย่างถูกต้องตั้งแต่เริ่มต้น
SamGibson

1
หากคุณมีคำถามใหม่โปรดขอได้โดยคลิกที่ถามคำถามปุ่ม รวมลิงค์ไปยังคำถามนี้หากช่วยระบุบริบท - จากการตรวจสอบ
TonyM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.