- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2010年北京市大学生电子设计竞赛试题 要求用指定的FPGA平台结合SOPC技术构造一个乒乓球游戏机。系统结构如果所示,FPGA通过两条I/O信号输出两组脉宽调制波,经过低通滤波器提取脉宽调制的均值电压,输入到双通道示波器中。示波器工作在X/Y模式。示波器屏幕上的光点代表乒乓球。 乒乓球X/Y电压的控制下在屏幕上移动。 基本要求: 1.构造两组无源低通滤波器,使得FPGA可以用脉宽调制方式控制球的位置(20分) 2.用给定的运放制作一放大器,使光点运动范围在示波器的X轴,Y轴方向上可调(10分) 3.乒乓球可按抛物线自动在屏幕上左右弹射,球的落点为屏幕两侧边的中间。(20分) 扩展要求: 1.使用两个按钮分别作为左侧击球钮和右侧击球钮。当乒乓球靠近屏幕左边时按下左侧击球钮,可将球击回右侧。右侧击球钮亦然。(10分) 2.建立成败机制,即球抵达边沿而未按下击球钮,记为击球失败,用LED灯光表示。(10分) 3.建立记分机制,在七段数码管上显示双方得分(10分) 4.特殊功能,在不调整放大器的情况下,连按两下击球钮能击出高抛球,轨迹抛物线曲率变大(20分) 竞赛板卡 器材 示波器、稳压源、函数信号发生器、导线、电烙铁、个人PC机、RS232串口线、Hep EXCD竞赛开发板、竞赛对插通用电路板、万用表、镊子、面包板、松香等。 设计思路 硬件部分 无源低通滤波器分析 硬件部分 无源低通滤波器分析 硬件部分 无源低通滤波器 硬件部分 增益可调放大器 硬件电路总体设计 软件部分 大思路 软件部分 大思路 PWM1:VHDL在底层实现一个双向计数器,和一个比较器;而比较匹配值则由C语言实时通过驱动程序更新,从而产生脉宽可调波;PWM2则类似;C语言通过数组保存小球运动的抛物线的轨迹;还有复杂的击球以及计分模块。 软件部分 VHDL 框图 软件部分 VHDL 端口及信号量 PWM1 : out std_logic; PWM2 : out std_logic; signal divclk : std_logic; --分频时钟 signal count1 : std_logic_vector(0 to 15):=X0000;--计数器1 signal count_value1: unsigned(0 to 15); --无符号计数值1 signal count2 : std_logic_vector(0 to 15):=X0000;--计数器2 signal count_value2 : unsigned(0 to 15); --无符号计数值2 signal compare1 : std_logic_vector(0 to 15); --比较匹配值1 signal compare_value1: unsigned(0 to 15); --无符号比较匹配值1 signal compare2 : std_logic_vector(0 to 15); --比较匹配值2 signal compare_value2 : unsigned(0 to 15); --无符号比较匹配值2 signal dir1 : std_logic:=1; --计数器1计数方向标志1为增计数,0为减计数 signal dir2 : std_logic:=1; --计数器2计数方向标志1为增计数,0为减计数 signal slv_reg0 : std_logic_vector(0 to C_SLV_DWIDTH-1); 软件部分 VHDL 时钟分频 PWM_CLK_DIV_PROC:process(Bus2IP_Clk) variable count1:integer:=0; begin if(rising_edge(Bus2IP_Clk)) then if (count1=5) then count1:=0; divclk=not divclk; else count1:=count1+1; end if; end if; end process PWM_CLK_DIV_PROC; 软件部分 VHDL --逻辑矢量转换为无符号数以便比较 count_value1=unsigne
文档评论(0)