การจัดทำดัชนีผลลัพธ์ทางคณิตศาสตร์เล็กน้อยโดยตรง

สำหรับปัญหานี้ ให้พิจารณาว่าฉันมีสัญญาณต่อไปนี้และกำลังใช้แพ็คเกจ The Synopsis std_logic_unsigned และ std_logic_arith

signal o : std_logic;
signal i  : std_logic_vector(parameter downto 0);
constant c : integer := 5;

ฉันต้องการตั้งค่าสัญญาณ o ไปที่บิตซ้ายสุดของผลลัพธ์ของ (i-c) ภายในกระบวนการฉันมีบางอย่างเช่น:

o <= (i-c)(i'left);

ซึ่งไม่ได้คอมไพล์ในโปรแกรมจำลองของฉัน

ฉันรู้ว่าฉันสามารถแก้ปัญหานี้ได้โดยการแนะนำตัวแปรตัวกลาง แต่มีโครงสร้างทางวากยสัมพันธ์ที่จะทำสิ่งนี้โดยตรงหรือไม่


person QuantumRipple    schedule 22.09.2014    source แหล่งที่มา


คำตอบ (1)


คุณกำลังพยายามกำหนดค่าชื่อที่จัดทำดัชนีไว้ o จากผลลัพธ์ของนิพจน์

คำนำหน้าชื่อที่จัดทำดัชนีอาจเป็นชื่อหรือการเรียกใช้ฟังก์ชันก็ได้

 indexed_name ::=  prefix ( expression { , expression } )

 prefix ::=  
       name
     | function_call

ฟังก์ชันคือนิพจน์เช่นเดียวกับคุณลักษณะที่กำหนดไว้ล่วงหน้าส่วนใหญ่ เช่น i'length หรือ i'left

การเรียกใช้ฟังก์ชันมีรูปแบบเฉพาะ:

 function_call ::=
    function_name [ ( actual_parameter_part ) ]

 actual_parameter_part ::=  parameter_association_list 

คำนึงถึงทุกสิ่งตลอดจนการใช้แพ็คเกจ numeric_std (ในกรณีนี้โดยไม่มี numeric_std_unsigned) ให้:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity indexing is
    constant parameter: natural :=7;
end entity;

architecture foo of indexing is
    signal o : std_logic;
    signal i  : signed(parameter downto 0);
    constant c : integer := 5;
begin

    o <= "-"(i,to_signed(c,i'length)) (i'left);

end architecture;

และแน่นอน คุณสามารถใช้การแปลงประเภทในรายการการเชื่อมโยงสำหรับรายการการเชื่อมโยงการเรียกใช้ฟังก์ชัน "-"

เลือกประเภท signed เนื่องจากค่าคงที่ c ของคุณถูกระบุเป็นประเภทจำนวนเต็ม อาจเป็นประเภท unsigned ได้อย่างง่ายดายหรือ std_logic_vector โดยใช้แพ็คเกจ numeric_std_unsigned การเลือกประเภทที่ลงนามนั้นค่อนข้างแปลก o ระบุเครื่องหมายผลลัพธ์ด้วยวิธีนี้

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

ชื่อสไลซ์สามารถจัดการได้ในทำนองเดียวกัน

(และใช่ สิ่งนี้จะใช้ได้กับแพ็คเกจ std_logic_unsigned ของ Synopsys โดยไม่มีการแปลงประเภทและระบุประเภท i std_logic_vector มีข้อได้เปรียบเล็กน้อยเมื่อใช้การเรียกใช้ฟังก์ชัน)

person Community    schedule 22.09.2014
comment
ขอบคุณ นี่คือสิ่งที่ฉันกำลังมองหา - person QuantumRipple; 23.09.2014