คำถามติดแท็ก optimization

12
เป็นการปิดใช้งานการเพิ่มประสิทธิภาพที่ดีที่สุดในระหว่างการพัฒนาและการดีบักเฟสหรือไม่?
ฉันได้อ่านการเขียนโปรแกรมไมโครคอนโทรลเลอร์ PIC แบบ 16 บิตใน Cและมีการยืนยันในหนังสือเล่มนี้: ในระหว่างการพัฒนาและการดีบักเฟสของโปรเจ็กต์มันเป็นแนวปฏิบัติที่ดีในการปิดใช้งานการปรับให้เหมาะสมทั้งหมดเนื่องจากอาจแก้ไขโครงสร้างของโค้ดที่วิเคราะห์และแสดงปัญหาการวางตำแหน่งจุดพักและเบรกพอยต์แบบเดี่ยว ฉันสารภาพว่าฉันสับสนเล็กน้อย ฉันไม่เข้าใจว่าผู้เขียนบอกว่าเพราะช่วงเวลาการประเมินC30หรือว่าเป็นการปฏิบัติที่ดีจริงๆ ฉันต้องการทราบว่าคุณใช้แบบฝึกหัดนี้จริงหรือไม่และเพราะอะไร

5
LTSpice Automation
ฉันมีตัวแปลงบูสเตอร์ที่ใช้พลังงานจากแบตเตอรี่และฉันกำลังพยายามวัดแรงดันไฟฟ้าตกสูงสุด (แบตเตอรี่) ภายใต้เงื่อนไขการโหลดที่หลากหลายของกระแสไฟฟ้าสูง ความต้านทานภายใน) เนื่องจากฉันกำลังจำลองเวลาที่ใช้ในการดำเนินงานจำนวนมาก (ค่อนข้าง) ไฟล์การจำลองจึงมีจำนวนค่อนข้างมากไม่ต้องพูดถึงพวกเขาใช้เวลาสักครู่ ฉันต้องการทำให้ LTSpice เป็นแบบอัตโนมัติเพื่อให้ฉันสามารถเปลี่ยนค่าองค์ประกอบโดยใช้โปรแกรมและจำลองการจำลองใหม่และจับข้อมูล (ค่าของสิ่งต่าง ๆ เช่นแรงดันหรือกระแส) ฉันรู้แล้ว: ไฟล์ WAV สามารถใช้เพื่อป้อนข้อมูล / ส่งออกข้อมูลจากโปรแกรม โปรแกรมสามารถเรียกใช้จากบรรทัดคำสั่ง จนถึงตอนนี้ตัวเลือกที่ดีที่สุดของฉันดูเหมือนจะใช้ทั้งสองตัวเลือกพร้อมกับรหัส / สคริปต์ของตัวเองในแบบที่บรรลุเป้าหมายของฉัน แต่ฉันแค่สงสัยว่ามีวิธีที่ดีกว่าอยู่แล้ว มีใคร LTSpice อัตโนมัติหรือทราบว่ามี API การทำงานอัตโนมัติใด ๆ ที่เขียนขึ้นมาหรือไม่ (โดยผู้ผลิตหรือบุคคลที่สาม) โดยหลักการแล้วฉันต้องการตัวแก้ปัญหาเช่นที่ฉันให้พารามิเตอร์ที่ต้องการและลองใช้ค่าส่วนประกอบต่าง ๆ จนกว่าจะพบโซลูชัน "ดีที่สุด" ตามข้อ จำกัด ของฉัน

2
ฉันจะระบุสัญญาณ“ ไม่สนใจ” ใน VHDL ได้อย่างไร?
ในหลักสูตรการออกแบบลอจิกที่เราทุกคนได้เรียนรู้ว่ามันเป็นไปได้ที่จะลดการทำงานตรรกะเช่นโดยการใช้แผนที่ Karnaugh หรืออัลกอริทึมควิน-คสัส นอกจากนี้เรายังได้เรียนรู้ว่าค่า"ไม่สนใจ"เพิ่มโอกาสในการลดขนาด ตัวอย่างเช่นใช้ไฟล์ลงทะเบียน write_addressและwrite_dataสัญญาณไม่ได้เรื่องจริงๆเมื่อสัญญาณwrite_enable '0'ดังนั้นพวกเขาควรจะกำหนดค่า "ไม่สนใจ" เพื่อให้การเพิ่มประสิทธิภาพมากขึ้นในตรรกะที่ขับสัญญาณเหล่านี้ (เช่นไม่ได้อยู่ในไฟล์ลงทะเบียนตัวเอง) วิธีที่ถูกต้องในการระบุค่า "Don't Care" ใน VHDL คือเพื่อให้เครื่องมือการสังเคราะห์มีพื้นที่มากขึ้นสำหรับการเพิ่มประสิทธิภาพที่เป็นไปได้? จนถึงตอนนี้ฉันได้พบสิ่งต่อไปนี้ซึ่งอาจเหมาะสม แต่ฉันไม่แน่ใจจริงๆว่าข้อดีข้อเสียของแต่ละวิธีคืออะไร: เพียงไม่กำหนดสัญญาณ ดูเหมือนว่ามันจะทำงานได้ อย่างไรก็ตามฉันพบว่ามันไม่ทำงานเมื่อคุณต้องการกำหนด "ไม่ทำอะไรคงที่" บางrecordประเภทเนื่องจากค่าคงที่บันทึกต้องได้รับการระบุอย่างสมบูรณ์ (อย่างน้อย Modelsim บอกฉันอย่างนั้น) std_logic_1164แพคเกจที่กำหนดค่าสำหรับ'-' -- Don't care std_ulogicดูเหมือนว่านี่เป็นตัวเลือกที่ถูกต้องสำหรับความหมายที่ชัดเจนว่า "ไม่สนใจ" แต่ฉันไม่เคยเห็นมันมาใช้เลย (ยกเว้นในโครงสร้าง VHDL-2008 ที่ไม่เกี่ยวข้องcase?) Modelsim ใช้ค่า'X'เพื่อแสดงสัญญาณที่ไม่ได้กำหนด อย่างไรก็ตามฉันไม่แน่ใจว่าเครื่องมือการสังเคราะห์เข้าใจการ'X'มอบหมาย - อย่างชัดเจนว่า "ไม่สนใจ" ต่อไปนี้เป็นตัวอย่างโค้ดขนาดใหญ่เกินไปสำหรับการชี้แจงซึ่งฉันได้เตรียมข้อมูล'-'เบื้องต้นเกี่ยวกับการไม่สนใจสัญญาณด้วย ที่คุณสามารถดูสัญญาณcontrol.reg_write_addressสามารถมีค่าที่แตกต่างกัน 3: "----", และinstruction(11 downto 8); instruction(3 …

3
วิธีการระบุพื้นที่ของการออกแบบ FPGA ที่ใช้ทรัพยากรและพื้นที่มากที่สุด
ฉันทำงานกับการออกแบบ FPGA ขนาดใหญ่และฉันอยู่ใกล้กับขีด จำกัด ทรัพยากรของ FPGA ที่ฉันใช้อยู่ในปัจจุบัน Xilinx LX16 ในแพ็คเกจ CSG225 การออกแบบก็เกือบจะเสร็จสมบูรณ์แล้วอย่างไรก็ตามในขณะนี้จะไม่เหมาะกับ FPGA อีกต่อไป ฉันสามารถปิดส่วนต่าง ๆ เพื่อให้มันเข้ากันได้ แต่ฉันต้องลดการใช้ทรัพยากรเพื่อที่จะทำให้การออกแบบเสร็จสมบูรณ์และมีความต้องการด้านเวลาและขนาด ฉันต้องการทราบว่ามีเครื่องมือใดรายงานของเราที่สามารถช่วยฉันระบุว่าส่วนใดของการออกแบบของฉันใช้ทรัพยากรมากที่สุด การออกแบบของฉันไม่ได้ถูกแบ่งพาร์ติชันและแยกเป็นโมดูล VHDL มากกว่าหนึ่งโหลขึ้นไป รายงานจังหวะเวลาของ Xilinx นั้นยอดเยี่ยม แต่ตอนนี้ฉันต้องรู้ว่าฉันจะหาเงินได้ดีที่สุดในแง่ของการประหยัดพื้นที่ ฉันยังมีเวลายากที่จะบอกว่าชนิดของทรัพยากรที่ฉันหมดหรือสิ่งที่มีผลต่อทรัพยากรเหล่านั้น สิ่งที่น่ารำคาญอีกอย่างก็คือเมื่อการออกแบบมีขนาดใหญ่ขึ้นส่วนประกอบที่ใช้ในการกำหนดเวลาเริ่มล้มเหลวเนื่องจากการวางไม่เหมาะสม ปัจจุบันฉันใช้รายงานช่วงเวลา Post-Place และ Route Static และฉันใช้ SmartXplorer ฉันใช้กลยุทธ์การออกแบบเพื่อปรับให้เหมาะกับเวลา หลังจากปิดส่วนหนึ่งของการออกแบบของฉันเพื่อให้พอดีกับผลลัพธ์ต่อไปนี้คือบางส่วน: การใช้การลงทะเบียน slice: 42% การใช้ LUT จำนวน 96% ของคู่ LUT-FF ที่ใช้งานอย่างเต็มรูปแบบ: 38% นี่หมายความว่าฉันเบาในการลงทะเบียน มีเครื่องมือที่ช่วยให้นักพัฒนาเพิ่มประสิทธิภาพสำหรับพื้นที่หรืออย่างน้อยก็ให้ข้อมูลเชิงลึกเพิ่มเติมเกี่ยวกับรหัสของพวกเขา? …

7
ลดความซับซ้อนของเครื่องมือเปรียบเทียบหน้าต่างจำนวนมาก
ฉันมีเทอร์มิสเตอร์ 8 ตัวและฉันต้องทำให้แน่ใจว่าแต่ละอันอยู่ภายในหน้าต่างอุณหภูมิ พวกเขาทั้งหมดมีหน้าต่างเดียวกันและฉันไม่สนใจว่าอยู่ในช่วงที่ถูกต้องหรือไม่ฉันต้องรู้ว่าพวกเขาทั้งหมดอยู่ในหน้าต่าง (เดียวกัน) หรือไม่ นี่เป็นวิธีแก้ปัญหาเฉพาะฮาร์ดแวร์ดังนั้นการเรียงลำดับซอฟต์แวร์ของ ADC ที่อ่านไม่เป็นไปตามคำถาม ทางออกที่ดีที่สุดของฉันในปัจจุบันคือการใช้ไอซีตัวเปรียบเทียบและใช้ตัวเปรียบเทียบแบบแยกหน้าต่างสำหรับเทอร์มิสเตอร์แต่ละตัว ในการปรับแก้ปัญหาให้เหมาะสมฉันสามารถใช้ตัวเปรียบเทียบแบบ Quad จำนวนหนึ่งซึ่งแต่ละตัวมีเอาต์พุตแบบ open-drain เพื่อให้ฉันสามารถเชื่อมต่อได้ทั้งหมด อย่างไรก็ตามในสาระสำคัญมันเป็นวงจรเดียวกัน แรงดันไฟฟ้าอ้างอิง / ทริกเกอร์ที่ฉันสามารถสร้างได้หนึ่งครั้งบัฟเฟอร์แล้วจ่ายให้กับเครื่องมือเปรียบเทียบทั้งหมด ฉันรู้สึกโง่เพียงแค่โยนเครือข่ายเปรียบเทียบปัญหา ฉันไม่แน่ใจว่าไม่มีวิธีที่ดีกว่านี้หรือไม่ฉันพยายามปรับพื้นที่ของบอร์ดให้เหมาะสม คุณมีความคิดสร้างสรรค์บ้างไหม? ตัวอย่างเช่นเลือกแรงดันไฟฟ้าต่ำสุด / สูงสุดของเทอร์มิสเตอร์ทั้งหมดและใช้ตัวเปรียบเทียบแบบหน้าต่างเดียว (EDIT: two comparators ofc) ซึ่ง IMHO จะนำไปสู่การแก้ปัญหาที่ใหญ่กว่าและไม่ใช่คำตอบที่ดีฉันแค่พูดถึงแรงบันดาลใจ แก้ไข: ฉันรู้ว่าโซลูชันที่ใช้ซอฟต์แวร์จะดีที่สุด นั่นคือเหตุผลที่ฉันพูดถึงถูกต้องตั้งแต่เริ่มต้นและล่วงหน้าเพื่อป้องกันไม่ให้ทุกคนแนะนำมัน เหตุผลที่มีการกำหนดปัญหาด้วยวิธีนี้เป็นเพราะนี่คือวงจรความปลอดภัยและข้อมูลจำเพาะต้องการให้ฉันใช้วิธีการแก้ปัญหาเฉพาะฮาร์ดแวร์เพิ่มเติมจากซอฟต์แวร์ตรวจสอบ ดังนั้นโซลูชันซอฟต์แวร์ที่มีอยู่แล้วฉัน "เพียงแค่" จำเป็นต้องค้นหาวิธีที่ดีที่สุดในการใช้ฮาร์ดแวร์ที่ใช้

10
วิธีที่เร็วที่สุดในการรับจำนวนเต็ม mod 10 และจำนวนเต็มหาร 10?
ถ้าฮาร์ดแวร์ไม่รองรับโมดูลัสหรือการหารมันต้องใช้รอบ CPU มากขึ้นในการจำลองโมดูลัส / การหารด้วยซอฟต์แวร์ มีวิธีใดที่เร็วกว่าในการคำนวณการหารและโมดูลัสถ้าตัวถูกดำเนินการเป็น 10? ในโครงการของฉันฉันต้องคำนวณโมดูลัสจำนวนเต็ม 10 โดยเฉพาะฉันกำลังทำงานกับ PIC16F และต้องแสดงตัวเลขบนจอ LCD มีตัวเลข 4 หลักที่จะรองรับดังนั้นจึงมีการเรียกฟังก์ชั่นโมดูลัสและการหาร 4 ครั้ง (การนำซอฟต์แวร์ไปใช้) นั่นคือเหมือนดังต่อไปนี้: digit = number % 10; // call to an expensive function number /= 10; // call to an expensive function somehow_lit_segments(); digit = number % 10; // call to an …

4
ทำไมคอมไพเลอร์ GCC จึงไม่ใช้รหัสบางอย่าง
ฉันไม่สามารถเข้าใจว่าทำไม GCC คอมไพเลอร์ตัดส่วนของรหัสของฉันในขณะที่มันรักษารหัสเดียวกันในละแวก? รหัส C: #define setb_SYNCO do{(PORTA|= (1<<0));} while(0); ISR(INT0_vect){ unsigned char i; i = 10; while(i>0)i--; // first pause - omitted setb_SYNCO; setb_GATE; i=30; clrb_SYNCO; while(i>0)i--; // second pause - preserved clrb_GATE; } ส่วนที่สอดคล้องกันของ LSS (ไฟล์แอสเซมเบลอร์ที่สร้างโดยคอมไพเลอร์): ISR(INT0_vect){ a4: 1f 92 push r1 a6: 0f 92 push r0 a8: …
9 avr  c  avr-gcc  optimization  gcc 

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