From b24e8f050bad06b02873db47002f9003bee2937a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Sep 2025 21:18:57 +0000 Subject: [PATCH 1/2] Initial plan From 2e4a05b6aa16bf1359a3ef96c66277ae68c75588 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Sep 2025 21:23:34 +0000 Subject: [PATCH 2/2] Add comprehensive LLM4ChipDesign course prerequisite survey form Co-authored-by: FCHXWH823 <176723341+FCHXWH823@users.noreply.github.com> --- LLM4ChipDesign_Prerequisite_Survey.docx | Bin 0 -> 39224 bytes SURVEY_README.md | 96 ++++++++ generate_survey_form.py | 290 ++++++++++++++++++++++++ 3 files changed, 386 insertions(+) create mode 100644 LLM4ChipDesign_Prerequisite_Survey.docx create mode 100644 SURVEY_README.md create mode 100644 generate_survey_form.py diff --git a/LLM4ChipDesign_Prerequisite_Survey.docx b/LLM4ChipDesign_Prerequisite_Survey.docx new file mode 100644 index 0000000000000000000000000000000000000000..4a48792af77e3f07e6bacc19e23708ba93574bce GIT binary patch literal 39224 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�BKw0~!u7{{WguV>7z3K$s=Y(Jb_ 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 V4RT-x{g_pZAS+;cw50tw`yZ-gKXU*8 literal 0 HcmV?d00001 diff --git a/SURVEY_README.md b/SURVEY_README.md new file mode 100644 index 0000000..1b8b6a8 --- /dev/null +++ b/SURVEY_README.md @@ -0,0 +1,96 @@ +# LLM4ChipDesign Course Prerequisite Survey Form + +## Overview +This directory contains a comprehensive prerequisite survey form for students interested in taking the LLM4ChipDesign course. The survey helps instructors assess student backgrounds and tailor the course content accordingly. + +## Files +- `LLM4ChipDesign_Prerequisite_Survey.docx` - The main survey form in Microsoft Word format +- `generate_survey_form.py` - Python script used to generate the survey form +- `SURVEY_README.md` - This documentation file + +## Survey Form Content + +The survey form covers the following areas essential for the LLM4ChipDesign course: + +### Prerequisites Assessed +1. **Digital Logic Design & Boolean Algebra** - Fundamental logic concepts +2. **Computer Architecture & Organization** - Understanding of computer systems +3. **Hardware Description Languages** - Verilog/SystemVerilog experience +4. **Programming Languages** - Python, C/C++ proficiency +5. **Data Structures & Algorithms** - Programming fundamentals +6. **Machine Learning & Artificial Intelligence** - AI/ML background +7. **Natural Language Processing** - NLP concepts for LLM understanding +8. **Formal Verification & Model Checking** - Verification methodologies +9. **Electronic Design Automation (EDA) Tools** - Industry tools experience +10. **FPGA/ASIC Design Flow** - Hardware implementation knowledge +11. **High-Level Synthesis (HLS)** - C-to-hardware concepts +12. **Hardware-Software Co-design** - Interface understanding +13. **Computer Systems & Operating Systems** - Systems knowledge +14. **Software Engineering & Version Control** - Development practices +15. **Mathematics** - Linear algebra, statistics for ML + +### Survey Sections +1. **Student Information** - Basic demographic and academic information +2. **Prerequisite Course Assessment** - Rating system for each subject area +3. **Specific Course Experience** - Detailed course background +4. **Tools and Software Experience** - EDA tools, programming environments, AI frameworks +5. **Project Experience** - Practical application of knowledge +6. **Learning Goals and Expectations** - Student objectives and preferences +7. **Additional Information** - Open-ended feedback section + +## Usage Instructions + +### For Instructors +1. Distribute the `LLM4ChipDesign_Prerequisite_Survey.docx` file to prospective students +2. Have students complete and return the survey before course enrollment +3. Use responses to: + - Identify students who may need additional preparation + - Form study groups with complementary skills + - Adjust course pacing and content depth + - Prepare targeted review materials + +### For Students +1. Download and open the survey form +2. Complete all sections honestly and thoroughly +3. Provide specific examples where requested +4. Submit the completed form as instructed by your instructor + +## Course Rationale + +This survey is designed specifically for the LLM4ChipDesign course based on the repository content, which covers: + +- **Automated Verilog Generation** using LLMs (AutoChip, VeriThoughts, Veritas) +- **Testbench Generation** for hardware verification +- **SystemVerilog Assertion Generation** from natural language +- **High-Level Synthesis** with AI assistance (C2HLSC) +- **Hardware Security** and IP protection +- **SPICE Netlist Generation** for analog circuits +- **Hierarchical Design** methodologies + +## Technical Requirements + +The survey form is generated using Python with the `python-docx` library and is compatible with: +- Microsoft Word 2007 and later +- LibreOffice Writer +- Google Docs +- Most modern word processors + +## Regenerating the Survey + +If you need to modify the survey form: + +1. Install required dependencies: + ```bash + pip install python-docx + ``` + +2. Run the generation script: + ```bash + python3 generate_survey_form.py + ``` + +3. The updated survey will be saved as `LLM4ChipDesign_Prerequisite_Survey.docx` + +## Contact Information + +For questions about the survey or course prerequisites, please contact the course instructor or refer to the main repository documentation. \ No newline at end of file diff --git a/generate_survey_form.py b/generate_survey_form.py new file mode 100644 index 0000000..93b1c90 --- /dev/null +++ b/generate_survey_form.py @@ -0,0 +1,290 @@ +#!/usr/bin/env python3 +""" +LLM4ChipDesign Course Prerequisite Survey Form Generator +This script generates a Word document survey form for students interested in the LLM4ChipDesign course. +""" + +from docx import Document +from docx.shared import Inches, Pt +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.enum.style import WD_STYLE_TYPE +from datetime import datetime +import os + +def create_survey_form(): + """Create a comprehensive survey form for LLM4ChipDesign course prerequisites.""" + + # Create a new document + doc = Document() + + # Add document title + title = doc.add_heading('LLM4ChipDesign Course Prerequisite Survey', 0) + title.alignment = WD_ALIGN_PARAGRAPH.CENTER + + # Add subtitle + subtitle = doc.add_heading('Student Background Assessment Form', level=2) + subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER + + # Add introduction paragraph + intro = doc.add_paragraph() + intro.add_run('Dear Student,\n\n').bold = True + intro.add_run( + 'Welcome to the LLM4ChipDesign course! This course explores the intersection of ' + 'Large Language Models (LLMs) and chip design, covering topics such as automated ' + 'Verilog generation, testbench creation, SystemVerilog assertions, and hardware-software ' + 'co-design using AI.\n\n' + 'To ensure you have the necessary background knowledge and to tailor the course content ' + 'to your experience level, please complete this prerequisite assessment survey. ' + 'Your responses will help us understand your current knowledge and provide appropriate ' + 'support during the course.\n\n' + 'Please answer all questions honestly. This survey is for assessment purposes only ' + 'and will not affect your grade.\n' + ) + + # Student Information Section + doc.add_heading('Student Information', level=1) + + info_table = doc.add_table(rows=6, cols=2) + info_table.style = 'Table Grid' + + info_fields = [ + ('Name:', ''), + ('Student ID:', ''), + ('Email:', ''), + ('Academic Year/Level:', ''), + ('Major/Program:', ''), + ('Date:', '') + ] + + for i, (field, value) in enumerate(info_fields): + info_table.cell(i, 0).text = field + info_table.cell(i, 0).paragraphs[0].runs[0].bold = True + info_table.cell(i, 1).text = value + + doc.add_paragraph() # Add space + + # Prerequisite Course Assessment + doc.add_heading('Prerequisite Course Assessment', level=1) + + doc.add_paragraph( + 'Please indicate your experience level with the following subject areas ' + 'that are fundamental to this course. Rate your experience using the scale:\n' + '• No Experience (0): Never studied or worked with this area\n' + '• Basic (1): Introductory course or minimal exposure\n' + '• Intermediate (2): One or more courses with practical experience\n' + '• Advanced (3): Extensive coursework and/or professional experience\n' + '• Expert (4): Teaching/research level knowledge\n' + ) + + # Create prerequisite courses table + prereq_table = doc.add_table(rows=1, cols=6) + prereq_table.style = 'Table Grid' + + # Table headers + headers = ['Course Area', 'No Exp (0)', 'Basic (1)', 'Inter (2)', 'Adv (3)', 'Expert (4)'] + for i, header in enumerate(headers): + cell = prereq_table.cell(0, i) + cell.text = header + cell.paragraphs[0].runs[0].bold = True + if i == 0: + cell.width = Inches(3.0) + else: + cell.width = Inches(0.8) + + # Prerequisite course areas based on repository content + course_areas = [ + 'Digital Logic Design & Boolean Algebra', + 'Computer Architecture & Organization', + 'Hardware Description Languages (Verilog/SystemVerilog)', + 'Programming Languages (Python, C/C++)', + 'Data Structures & Algorithms', + 'Machine Learning & Artificial Intelligence', + 'Natural Language Processing (NLP)', + 'Formal Verification & Model Checking', + 'Electronic Design Automation (EDA) Tools', + 'FPGA/ASIC Design Flow', + 'High-Level Synthesis (HLS)', + 'Hardware-Software Co-design', + 'Computer Systems & Operating Systems', + 'Software Engineering & Version Control', + 'Mathematics (Linear Algebra, Statistics)' + ] + + # Add rows for each course area + for course in course_areas: + row = prereq_table.add_row() + row.cells[0].text = course + # Add checkbox-like symbols for rating + for i in range(1, 6): + row.cells[i].text = '☐' + row.cells[i].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER + + doc.add_paragraph() # Add space + + # Specific Course Experience Section + doc.add_heading('Specific Course Experience', level=1) + + doc.add_paragraph( + 'Please list any specific courses you have completed in the following areas ' + '(include course names/codes if possible):' + ) + + course_exp_table = doc.add_table(rows=8, cols=2) + course_exp_table.style = 'Table Grid' + + specific_areas = [ + 'Digital Circuit Design / Logic Design:', + 'Computer Architecture:', + 'Verilog/VHDL/SystemVerilog:', + 'Machine Learning / AI:', + 'Programming (Python/C/C++):', + 'Formal Methods / Verification:', + 'Embedded Systems:', + 'Other Relevant Courses:' + ] + + for i, area in enumerate(specific_areas): + course_exp_table.cell(i, 0).text = area + course_exp_table.cell(i, 0).paragraphs[0].runs[0].bold = True + course_exp_table.cell(i, 0).width = Inches(2.5) + course_exp_table.cell(i, 1).width = Inches(4.0) + + doc.add_paragraph() # Add space + + # Tools and Software Experience + doc.add_heading('Tools and Software Experience', level=1) + + doc.add_paragraph( + 'Please indicate your familiarity with the following tools and software ' + '(check all that apply):' + ) + + tools_table = doc.add_table(rows=1, cols=3) + tools_table.style = 'Table Grid' + + # Create three columns for tools + tools_categories = [ + 'EDA Tools', + 'Programming Tools', + 'AI/ML Frameworks' + ] + + tools_lists = [ + ['☐ Vivado (Xilinx)', '☐ Quartus (Intel)', '☐ ModelSim/QuestaSim', + '☐ Synopsys Tools', '☐ Cadence Tools', '☐ Verilator', '☐ GTKWave'], + ['☐ Python', '☐ C/C++', '☐ MATLAB', '☐ Git/GitHub', + '☐ Jupyter Notebooks', '☐ Linux/Unix', '☐ Command Line'], + ['☐ TensorFlow', '☐ PyTorch', '☐ OpenAI API', '☐ Hugging Face', + '☐ scikit-learn', '☐ NLTK/spaCy', '☐ Google Colab'] + ] + + for i, category in enumerate(tools_categories): + tools_table.cell(0, i).text = category + tools_table.cell(0, i).paragraphs[0].runs[0].bold = True + + # Add tools to each category + for j, tool in enumerate(tools_lists[i]): + if j == 0: + tools_table.cell(0, i).text = f"{category}\n{tool}" + else: + tools_table.cell(0, i).text += f"\n{tool}" + + doc.add_paragraph() # Add space + + # Project Experience Section + doc.add_heading('Project Experience', level=1) + + project_questions = [ + 'Have you worked on any hardware design projects? If yes, please describe briefly:', + 'Have you used any AI/ML tools or APIs in your projects? If yes, please describe:', + 'Have you written Verilog or VHDL code before? What was the complexity level?', + 'Have you used any LLMs (ChatGPT, Claude, etc.) for coding assistance? Please describe your experience:' + ] + + for question in project_questions: + doc.add_paragraph(question, style='List Number') + # Add space for answer + answer_para = doc.add_paragraph() + answer_para.add_run('Answer: ') + answer_para.add_run('_' * 80) + doc.add_paragraph() # Extra space + + # Learning Goals Section + doc.add_heading('Learning Goals and Expectations', level=1) + + goal_questions = [ + 'What specific aspects of LLM-based chip design are you most interested in learning?', + 'Do you have any specific career goals related to hardware design or AI?', + 'What challenges do you expect to face in this course?', + 'How do you prefer to learn new technical concepts? (hands-on, theory-first, examples, etc.)' + ] + + for question in goal_questions: + doc.add_paragraph(question, style='List Number') + # Add space for answer + answer_para = doc.add_paragraph() + answer_para.add_run('Answer: ') + answer_para.add_run('_' * 80) + doc.add_paragraph() # Extra space + + # Additional Information Section + doc.add_heading('Additional Information', level=1) + + doc.add_paragraph( + 'Please provide any additional information about your background, interests, ' + 'or concerns that might be relevant to this course:' + ) + + # Add space for additional comments + for _ in range(5): + doc.add_paragraph('_' * 100) + + # Footer + doc.add_paragraph() + footer = doc.add_paragraph() + footer.add_run('Thank you for completing this survey! ') + footer.add_run( + 'This information will help us provide the best possible learning experience ' + 'tailored to your background and goals.' + ).italic = True + + footer2 = doc.add_paragraph() + footer2.add_run('Course: LLM4ChipDesign - Generative AI for Chip Design\n') + footer2.add_run(f'Generated on: {datetime.now().strftime("%B %d, %Y")}\n') + footer2.alignment = WD_ALIGN_PARAGRAPH.CENTER + + return doc + +def main(): + """Main function to generate and save the survey form.""" + print("Generating LLM4ChipDesign Course Prerequisite Survey Form...") + + # Create the survey document + survey_doc = create_survey_form() + + # Save the document + output_path = '/home/runner/work/LLM4ChipDesign/LLM4ChipDesign/LLM4ChipDesign_Prerequisite_Survey.docx' + survey_doc.save(output_path) + + print(f"Survey form successfully generated and saved as: {output_path}") + print("\nThe survey form includes the following sections:") + print("1. Student Information") + print("2. Prerequisite Course Assessment (15 key subject areas)") + print("3. Specific Course Experience") + print("4. Tools and Software Experience") + print("5. Project Experience") + print("6. Learning Goals and Expectations") + print("7. Additional Information") + + # Verify file was created + if os.path.exists(output_path): + file_size = os.path.getsize(output_path) + print(f"\nFile created successfully! Size: {file_size} bytes") + else: + print("\nError: File was not created!") + return 1 + + return 0 + +if __name__ == "__main__": + exit(main()) \ No newline at end of file