วิธีนำสัญญาณภายในของโมดูลที่ต่ำกว่าไปยังโมดูลด้านบนใน VHDL ได้อย่างไร


11

ฉันจะนำสัญญาณภายในของซอร์สโค้ด VHDL ของฉันไปที่ testbench ของฉันเพื่อให้สามารถดูพวกเขาเป็นรูปคลื่นได้อย่างไร ฉันใช้ Active HDL ฉันต้องการทราบว่ามีวิธีการที่เป็นอิสระจากเครื่องมือใด ๆ ในการบรรลุวัตถุประสงค์หรือไม่ ความช่วยเหลือใด ๆ ที่ชื่นชม

ฉันได้รับข้อผิดพลาดนี้แล้วป้อนคำอธิบายรูปภาพที่นี่

รหัสที่มาของฉันคือ

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

รหัส testbench ของฉันคือ

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;

เมื่อคุณเริ่มการจำลองสถานการณ์จำลองของคุณจะอธิบายองค์ประกอบทั้งหมดอย่างละเอียด หลังจากนั้นจะค้นหาลิงก์ที่คุณสร้างขึ้นโดยใช้ชื่อภายนอก ดูเหมือนว่าเส้นทางของคุณผิด ฉันแก้ไขคำตอบของฉันเพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับการสร้างเส้นทาง หากปราศจากความรู้เกี่ยวกับการออกแบบของคุณฉันไม่สามารถพูดสิ่งผิดปกติกับเส้นทางของคุณได้
โธมัสเอส

เช่นเดียวกับที่ฉันพูดในคำตอบของฉันคุณต้องใช้ป้ายกำกับไม่ใช่ชื่อนิติบุคคล .tp_spi_dac.uut.ch1_byte_data_sentเส้นทางที่ถูกต้องควรจะเป็น
โธมัสเอส.

คำแนะนำของคุณแก้ไขปัญหาของฉัน @ThomasS ขอบคุณมาก! ฉันมีปัญหากับ VHDL เวอร์ชันที่ฉันแก้ไขหลังจากดูวิดีโอตามที่ David แนะนำ ฉันรู้ว่าการเขียนขอขอบคุณคุณไม่แนะนำโน้ต แต่ขอบคุณ Thomas สำหรับการแก้ไขการแก้ไขของฉัน (ฉันสับสนกับการจัดรูปแบบ markdown นี้)
Suhasini

คำตอบ:


11

สิ่งที่คุณกำลังมองหาเรียกว่าชื่อภายนอก (หรือชื่อลำดับชั้น) ใน VHDL สามารถใช้เพื่อหลีกเลี่ยงการมองเห็นขอบเขต / ลำดับชั้น ไวยากรณ์เป็นเหมือนตัวอย่างด้านล่าง

<<signal path_name : std_logic_vector(7 downto 0)>>

คุณยังสามารถเข้าถึงค่าคงที่และตัวแปรด้วยชื่อภายนอก คุณต้องเปลี่ยนประเภทในประเภทภายนอกว่า คุณสามารถใช้ชื่อภายนอกโดยตรงสำหรับการเข้าถึงการอ่าน / เขียน อย่างไรก็ตามคุณควรใช้นามแฝงเพื่อปรับปรุงความสามารถในการอ่าน

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

ชื่อภายนอกจะต้องมีเส้นทางไปยังองค์ประกอบที่คุณต้องการเข้าถึง เส้นทางอาจเป็นแบบสัมบูรณ์หรือแบบสัมพัทธ์ องค์ประกอบแต่ละรายการในเส้นทางของคุณจะถูกคั่นด้วยจุด โปรดทราบว่าคุณต้องระบุป้ายกำกับของอินสแตนซ์ / กระบวนการ / เอนทิตี / ... และไม่ใช่ชื่อ เส้นทางแบบสัมบูรณ์เริ่มต้นด้วย.ตามด้วยชื่อของระดับสูงสุดของคุณ สำหรับเส้นทางสัมพันธ์คุณสามารถใช้^เพื่อเลื่อนขึ้นในลำดับชั้น เมื่อใช้ค่าคงที่ / สัญญาณจากบางแพ็คเกจคุณสามารถใช้@เพื่อย้ายไปยังไลบรารี

ตัวอย่างของพา ธ สัมบูรณ์คือ

.tb_name.instance_label.sub_instance_label.signal_name

ในการเข้าถึงองค์ประกอบเดียวกันจาก testbench ด้วยชื่อที่เกี่ยวข้องคุณสามารถใช้

instance_label.sub_instance_label.signal_name

เมื่อคุณต้องการเข้าถึงสัญญาณทดสอบ / ค่าคงที่จาก sub_instance ที่คุณสามารถใช้ได้

^.^.constant_name

ในการเข้าถึงค่าคงที่อื่น ๆ ในแพ็คเกจการกำหนดค่าที่อยู่ในไลบรารีการกำหนดค่าที่คุณสามารถใช้ได้

@config.pkg_name.other_constant_name

คุณสามารถใช้เบราว์เซอร์การออกแบบ / ห้องสมุดจำลองอย่าง David ชี้ให้เห็นเพื่อค้นหาชื่อพา ธ ที่ถูกต้อง

ฟีเจอร์นี้เพิ่มเข้ามาใน VHDL-2008 ดังนั้นควรได้รับการสนับสนุนโดยเครื่องมือทั้งหมดที่มีการสนับสนุน VHDL-2008 แล้ว (รวมถึง ActiveHDL ที่ฉันคิด) ตัวจำลองส่วนใหญ่ไม่ได้ใช้ VHDL-2008 โดยค่าเริ่มต้น แต่ให้อาร์กิวเมนต์บรรทัดคำสั่งหรือตัวเลือกการกำหนดค่าเพื่อเปิดใช้งาน


ฉันลองสิ่งที่คุณแนะนำ นามแฝง ch1_byte_data_sent คือ << signal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 ถึง 0) >>: = x "000000"; ฉันได้รับข้อผิดพลาด "ตัวระบุหรือสตริงตามตัวอักษร" เมื่อฉันทำสิ่งนี้ ความคิดใด ๆ ที่ฉันได้รับข้อผิดพลาดทำไม? (ขออภัยสำหรับข้อผิดพลาดใด ๆ กับการโพสต์ครั้งแรกของฉันที่นี่!)
Suhasini

คำตอบของฉันอาจไม่ชัดเจนเพียงพอ เมื่อใช้งานaliasคุณต้องเขียนการบ้านในข้อความใหม่ ข้อดีคือคุณสามารถใช้ชื่อนามแฝงแทนชื่อภายนอกแบบยาว
โธมัสเอส.

1

ฉันจะนำสัญญาณภายในของซอร์สโค้ด VHDL ของฉันไปที่ testbench ของฉันเพื่อให้สามารถดูพวกเขาเป็นรูปคลื่นได้อย่างไร

ม้านั่งทดสอบหมายถึงการจำลอง - เอนทิตีที่ไม่มีพอร์ตใด ๆ โดยทั่วไปจะไม่มีสิทธิ์ในการสังเคราะห์

ในขณะที่ฉันไม่เคยใช้ Active-HDL ฉันเข้าใจว่ามันมีเบราว์เซอร์ที่ออกแบบมาเพื่อให้คุณสามารถรับสัญญาณในลำดับชั้นเพื่อแสดงในรูปคลื่นของคุณดู Aldec's ไพล์และการจำลอง (5:02, นาที: วินาที)

และตอนนี้ฉันได้รับความประทับใจว่าวิดีโออาจทำให้เกิดความสับสนบางทีในกรณีนี้

เมื่อ 2:22 จากจุดสิ้นสุดวิดีโอจะแสดงไฟล์ทำ (แมโคร) ซึ่งควบคุมการจำลอง:

2:22 ทำไฟล์

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

แนวคิดพื้นฐานคือตัวจำลองจำนวนมากอนุญาตให้คุณกำหนดเวลาสัญญาณ (และบางตัวอนุญาตให้ตัวแปร) ถูกรวบรวมเพื่อแสดงรูปคลื่น

วิดีโอสั้น ๆ นี้ไม่แสดงสัญญาณสำหรับระดับลำดับชั้นของ บริษัท ย่อย (มีจำนวนมากในงานนำเสนอวิดีโอสั้น ๆ )

ฉันต้องการทราบว่ามีวิธีการที่เป็นอิสระจากเครื่องมือใด ๆ ในการบรรลุวัตถุประสงค์หรือไม่

ดังที่กล่าวไว้ข้างต้นวัตถุประสงค์ของคุณน่าจะเป็นการดูสัญญาณภายในว่าเป็นรูปคลื่น

ตอนนี้สำหรับข่าวร้าย - ไม่มีมาตรฐานสำหรับคุณสมบัติตัวจำลองหรืออินเทอร์เฟซ, สัญญาณกำหนดเวลาสำหรับการถ่ายโอนข้อมูลรูปแบบคลื่น ฯลฯ สิ่งเหล่านี้ล้วนเป็นการนำไปปฏิบัติ

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

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

แนวคิดเรื่องการพกพาไม่ได้รวม GUI หลายอันไว้ด้วยกันอย่างงดงาม


0

เครื่องมือเช่น xilinx มีตัวเลือกเพื่อดูสัญญาณภายใน

วิธีการที่ไม่ขึ้นกับเครื่องมืออย่างง่ายคือการประกาศแยกบรรทัดเอาต์พุตและเชื่อมต่อสัญญาณภายในกับบรรทัดเหล่านี้


ฉันไม่ต้องการยุ่งกับอินพุตและเอาต์พุตพอร์ตของฉัน ดังนั้นจึงไม่สามารถประกาศบรรทัดเอาต์พุตใหม่ได้ ฉันประกาศสัญญาณใน testbench ของฉัน แต่ไม่สามารถเห็นเอาต์พุตใด ๆ บนรูปคลื่น (แสดงเฉพาะค่าเริ่มต้นของฉันที่เป็นศูนย์โดยไม่ต้องใช้ฟังก์ชั่น funcionality) มีวิธีอื่นที่จะทำหรือไม่
Suhasini

0

หากคุณได้ประกาศสัญญาณใน testbench แต่ไม่สามารถเห็นเอาต์พุตใด ๆ คุณอาจมีปัญหาในคำสั่งการสร้างอินสแตนซ์ที่คุณสร้างอินสแตนซ์ของเอนทิตีที่จะทดสอบ ตรวจสอบว่าคุณสร้างอินสแตนซ์ของมันอย่างถูกต้องโดยใช้คำสั่งการสร้างอินสแตนซ์ของเอนทิตี้หรือการสร้างอินสแตนซ์ขององค์ประกอบ ตรวจสอบให้แน่ใจว่าสัญญาณใน testbench ของคุณเชื่อมต่อกับเอนทิตีภายใต้การทดสอบ หากวิธีนี้ไม่ช่วยแก้ปัญหาให้โพสต์รหัส testbench เพื่อให้เราช่วยได้


สิ่งที่โธมัสพูดกล่าวคือแก้ปัญหาของฉันอย่างแน่นอน ฉันแก้ไขข้อผิดพลาดที่กล่าวถึงก่อนหน้านี้ซึ่งเกิดขึ้นเนื่องจากการตั้งค่าเริ่มต้นเป็น VHDL 1993 ใน Active-HDL ที่มาพร้อมกับซอฟต์แวร์การออกแบบ iCEcube2 ของ Lattice ตอนนี้ฉันต้องเผชิญกับข้อผิดพลาดอย่างร้ายแรงเมื่อพยายามเริ่มต้นการจำลอง ฉันพยายามค้นหาสาเหตุที่เกิดขึ้นฉันหวังว่ามันจะไม่เป็นปัญหาสิทธิ์การใช้งานที่ จำกัด
Suhasini

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