• 热点
  • 图片
  • 科技
  • 娱乐
  • 游戏
  • 体育
  • 汽车
  • 财经
  • 搞笑
  • 军事
  • 国际
  • 时尚
  • 旅游
  • 探索
  • 育儿
  • 养生
  • 美文
  • 历史
  • 美食
  • 当前位置: 小苹果范文网 > 游戏 > 正文

    数字电子钟逻辑电路设计《EDA技术》课程设计报告

    时间:2021-01-07 21:55:45 来源:小苹果范文网 本文已影响 小苹果范文网手机站

    序号 综合成绩 优秀( )良好( )

    中等( )及格( )

    不及格( )

    教师(签名)

    批改日期 《EDA技术》课程设计报告 课题:

    数字电子钟逻辑电路设计 院系 电子与电气工程学院 专业 电气工程及其自动化 班级 学号 姓名 指导教师 起止日期 2014-12-18至2014-12-19 2014年 X 月 目录 一、课程设计任务及要求 1 1.1实验目的 1 1.2功能设计 1 二、整体设计思想 1 2.1性能指标及功能设计 1 2.2总体方框 2 2.3FPGA芯片介绍 2 三、编译与调试 3 3.1数字钟的基本工作原理:

    3 3.1.1调时、调分信号的产生 3 3.1.2计数显示电路 4 3.2设计思路 4 3.3设计步骤 5 3.3.1工程建立及存盘 5 3.3.2工程项目的编译 5 3.3.3时序仿真 6 3.3.4引脚锁定 6 3.3.5硬件测试 6 3.3.6实验结果 7 四、程序设计 8 五、实验电路图 16 5.1实验原理图 16 5.2 PCB图 16 六、心得体会 17 七、 参考文献 18 一、课程设计任务及要求 1.1实验目的 1)掌握VHDL语言的基本运用 2)掌握QuartusII的简单操作并会使用EDA实验箱 3)掌握一个基本EDA课程设计的操作 1.2功能设计 要求显示格式为小时-分钟-秒钟,整点报时,报时时间为5 秒,即从整点前5 秒钟开始进行报时提示,LED 开始闪烁,过整点后,停止闪烁。调整时间的按键用按键模块的S1 和S2,S1 调节小时,每按下一次,小时增加一个小时,S2 调整分钟,每按下一次,分钟增加一分钟。另外用S8 按键作为系统时钟复位,复位后全部显示00-00-00。

    二、整体设计思想 2.1性能指标及功能设计 1)时、分、秒计时器 时计时器为一个24进制计数器,分、秒计时器均为60进制计数器。当秒计时器接受到一个秒脉冲时,秒计数器开始从00计数到59,此时秒显示器将显示00、01、02、...、59、00;

    每当秒计数器数到00时,就会产生一个脉冲输出送至分计时器,此时分计数器数值在原有基础上加1,其显示器将显示00、01、02、...、59、00;

    每当分计数器数到00时,就会产生一个脉冲输出送至时计时器,此时时计数器数值在原有基础上加1,其显示器将显示00、01、02、...、23、00。

    2)校时电路 当开关拨至校时档时,电子钟秒计时工作,通过时、分校时开关分别对时、分进行校对,开关每按1次,与开关对应的时或分计数器加1,当调至需要的时与分时,拨动reset开关,电子钟从设置的时间开始往后计时。

    2.2总体方框 2.3FPGA芯片介绍 SOPC-NIOSII EDA/SOPC实验开发系统是根据现代电子发展的方向,集EDA和SOPC系统开发为一体的综合性实验开发系统,除了满足高校专、本科生和研究生的SOPC教学实验开发之外,也是电子设计和电子项目开发的理想工具。整个开发系统由核心板SOPC-NiosII-EP2C35、系统板和扩展板构成,根据用户不同的需求配置成不同的开发系统。

    SOPC-NiosII-EP2C35开发板是在经过长期用户需求考察后,结合目前市面上以及实际应用需要,同时兼顾入门学生以及资深开发工程师的应用需求而研发的。就资源而言,它已经可以组成一个高性能的嵌入式系统,可以运行目前流行的RTOS,如uC/OS、uClinux等。系统主芯片采用672引脚、BGA封装的EP2C35 FPGA,它拥有33216个LE,105个M4K片上RAM(共计483840bits),35个18×18硬件乘法器、4个高性能PLL以及多达475个用户自定义IO。板上提供了大容量的SRAM、SDRAM和Flash ROM等以及常用的RS-232、USB2.0、 RJ45接口和标准音频接口等,除去板上已经固定连接的IO,还有多达260个IO通过不同的接插件引出,供用户使用。所以,不管从性能上而言,还是从系统灵活性上而言,无论您是初学者,还是资深硬件工程师,它都会成为您的好帮手。如图2.3所示:

    图2.3FPGA系统功能框图 三、编译与调试 3.1数字钟的基本工作原理:

    3.1.1调时、调分信号的产生 由计数器的计数过程可知,正常计数时,当秒计数器(60进制)计数到59 时,再来一个脉冲,则秒计数器清零,重新开始新一轮的计数,而进位则作为分计数器的计数脉冲,使分计数器计数加1。现在我们把电路稍做变动:把秒计数器的进位脉冲和一个频率为2Hz的脉冲信号同时接到一个2选1数据选择器的两个数据输入端,而位选信号则接一个脉冲按键开关,当按键开关不按下去时(即为0),则数据选择器将秒计数器的进位脉冲送到分计数器,此时,数字钟正常工作;

    当按键开关按下去时(即为1),则数据选择器将另外一个2Hz 的信号作为分计数器的计数脉冲,使其计数频率加快,当达到正确时间时,松开按键开关,从而达到调时的目的。调节小时的时间也一样的实现。

    3.1.2计数显示电路 由计数部分、数据选择器、译码器组成,是时钟的关键部分。

    1、计数部分:由两个60进制计数器和一个24 进制计数器组成,其中60 进制计数器可用6 进制计数器和10 进制计数器构成;

    24 进制的小时计数同样可用6 进制计数器和10 进制计数器得到:当计数器计数到24 时,“2”和“4”同时进行清零,则可实现24 进制计数。

    2、数据选择器:84 输入14 输出的多路数据选择器,因为本实验用到了8个数码管(有两个用来产生隔离符号‘—’)。

    3、译码器:七段译码器。译码器必须能译出‘—’,由实验二中译码器真值表可得:字母F 的8421BCD 码为“1111”,译码后为“1000111”,现在如果只译出‘—’,即字母F的中间一横,则译码后应为“0000001”,这样,在数码管上显示的就为‘—’。

    3.2设计思路 根据系统设计要求,系统设计采用自顶向下设计方法,由时钟分频部分、计时部分、按键部分调时部分和显示部分五个部分组成。这些模块都放在一个顶层文件中。

    1)时钟计数:

    首先下载程序进行复位清零操作,电子钟从00:00:00计时开始。setshi可以调整时钟的小时部分, setfen可以调整分钟,步进为1。

    用6位数码管分别显示“时”、“分”、“秒”,通过OUTPUT( 6 DOWNTO 0 )上的信号来点亮指定的LED七段显示数码管。

    2)

    时间设置:

    手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的S2和S1进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。

    3)清零功能:

    S8为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。

    3.3设计步骤 3.3.1工程建立及存盘 1.打开 QuartusⅡ,单击“File”菜单,选择 File→New Project Wizard,对话框如下:分别输入项目的工作路径、项目名和实体名,单击Finish。

    2.单击“File”菜单,选择New,弹出小对话框,双击“VHDL File“,即选中了文本编辑方式。在出现的“Vhdl1.vhd”文本编辑窗中键入VHDL程序,输入完毕后,选择File→Save As,即出现“Save As”对话框。选择自己建立好的存放本文件的目录,然后在文件名框中键入文件名,按“Save”按钮。

    3. 建立工程项目,在保存VHDL文件时会弹出是否建立项目的小窗口,点击“Yes”确定。即出现建立工程项目的导航窗口,点击“Next”,最后在出现的屏幕中分别键入新项目的工作路径、项目名和实体名。注意,原理图输入设计方法中,存盘的原理图文件名可以是任意的,但VHDL程序文本存盘的文件名必须与文件的实体名一致,输入后,单击“Finish”按钮。

    3.3.2工程项目的编译 单击工具条上的编译符号开始编译,并随着进度不断变化屏幕,编译完成后的屏幕如图所示:

    3.3.3时序仿真 建立波形文件:选择 File→New,在New窗中选中“Other File”标签。在出现的屏幕中选择“Vector Waveform File”项出现一新的屏幕。在出现的新屏幕中,双击“Name”下方的空白处,弹出“Insert Nod or Bus”对话框,单击该对话框的“Node Finder……”。在屏幕中的 Filter 中选择 Pins,单击“List”。而后,单击“>>”,所有输入/输出都被拷贝到右边的一侧,这些正是我们希望的各个引脚,也可以只选其中的的一部分,根据实际情况决定。然后单击屏幕右上脚的 “OK”。在出现的小屏幕上单击“OK”。

    设定仿真时间宽度。选择 Edit → End time…选项,在End time选择窗中选择适当的仿真时间域,以便有足够长的观察时间。

    波形文件存盘。选择File→Save as 选项,直接存盘即可。

    运行仿真器。在菜单中选择项,直到出现,仿真结束。

    3.3.4引脚锁定 将设计编程下载进选定的目标器件中,如EPF10K10,作进一步的硬件测试,将设计的所有输入输出引脚分别与目标器件的EPF10K10的部分引脚相接,操作如下:

    1.选择 Assignments → Assignments Editor ,即进入 Assignments Editor编辑器。在Category 栏选择 Pin,或直接单击右上侧的 Pin 按钮。

    2.双击 TO 栏的《new》,在出现的的下拉栏中选择对应的端口信号名(如 D[0]);

    然后双击对应的栏的《new》,在出现的下拉栏中选择对应的端口信号名的期间引脚号。

    3.最后存储这些引脚锁定信息后,必须再编译(启动 )一次,才能将引脚锁定信息编译进编程下载文件中。此后就可以准备将编译好的 SOF 文件下载到试验系统的FPGA中去了。

    3.3.5硬件测试 1.首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源。

    2.打开编辑窗和配置文件。选择,弹出一个编辑窗。在Mode栏中选择JTAG,并在选项下的小方框打勾。注意核对下载文件路径与文件名。如果文件没有出现或者出错,单击左Add file侧按钮,手动选择配置文件 clock.sof。

    3.最后单击下载标符Start,即进入对目标器件 FPGA 的配置下载操作。当 Progress 显示100%,以及在底部的处理栏中出现 Configuration Succeeded 时,表示编程成功,如图所示。注意,如果必要时,可再次单击 Start ,直至编程成功。

    4.下载完成后,通过硬件测试进一步确定设计是否达到所有的技术指标,如未达到,可逐步检查,哪部分出现问题。如果是代码出现问题,须修改代码;

    若是时序波形图有问题,须重新设置。

    3.3.6实验结果 键s8为复位按键,键s1设置小时,键s2设置分钟。下载成功后,按下键s8,即使六个LED复位清零,显示数秒的自动计时。当秒数满59则进一位,分钟数满59进一位,当显示为xx:59:55时,外接的LED小灯开始闪烁,过整点以后停止闪烁。调试实物图如图3.3.6所示:

    图3.3.6调试实物图 四、程序设计 1. (1)秒计数器(miao)VHDL 程序描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity miao is port( clk,reset,setfen:in std_logic; enfen:out std_logic; countmiao:out std_logic_vector(7 downto 0) ); end miao; architecture fun of miao is signal count:std_logic_vector(7 downto 0); signal enfen_1,enfen_2:std_logic; begin countmiao<=count; enfen_2<=(setfen and clk); enfen<=(enfen_1 or enfen_2); process(clk,reset,setfen) begin if(reset='0') then count<=“00000000“; enfen_1<='0'; elsif(clk'event and clk='1') then if(count(3 downto 0)=“1001“) then if(count<16#60#) then if(count=“01011001“) then count<=“00000000“; enfen_1<='1'; else count<=count+7; end if; else count<=“00000000“; enfen_1<='0'; end if; elsif(count<16#60#) then count<=count+1; enfen_1<='0'; else count<=“00000000“; enfen_1<='1'; end if; end if; end process; end fun; (2)秒计数器(miao)仿真波形图 (3)秒计数器(miao)仿真分析 1、随着 clk 脉冲信号的不断到来,countmiao 记录出 clk 的脉冲个数,计数 到 59 时,在下一个 clk 脉冲信号到来时,输出端 enfen 输出高定平,即向分进 位,同时 countmiao 清零。

    2、 reset 为清零端, reset 低电平时, 当 countmiao 计数从零重新开始计数。

    3、setfen 为分的手动进位端,当 setfen 高定平时且 clk 脉冲到来时,输出 enfen 高电平,向分进位。

    2. (1)分计数器(fen)VHDL 程序描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fen is port( imiao,clk,reset,setshi:in std_logic; enshi:out std_logic; countfen:out std_logic_vector(7 downto 0) ); end fen; architecture fun of fen is signal enshi_1,enshi_2:std_logic; signal count:std_logic_vector(7 downto 0); begin countfen<=count; enshi_2<=(setshi and clk); enshi<=(enshi_1 or enshi_2); process(imiao,reset,setshi) begin if(reset='0') then count<=“00000000“; elsif(imiao'event and imiao='1') then if(count(3 downto 0)=“1001“) then if(count<16#60#) then if(count=“01011001“) then count<=“00000000“; enshi_1<='1'; else count<=count+7; end if; else count<=“00000000“; end if; elsif(count<16#60#) then count<=count+1; enshi_1<='0'; else count<=“00000000“; end if; end if; end process; end fun; (2)分计数器(fen)仿真波形图 (3)分计数器(fen)仿真分析 1、imiao 为秒计数器的 enfen 进位输出端,当 enfen(imiao)高电平到来 时, clk 高电平时, 且 countfen 开始计数。

    countfen 计数到 59 时, 下一个 enfen (imiao)、clk 到来时,enshi 高电平,即向时进位,同时 countfen 清零。

    2、reset 为清零端,当 reset 低电平时,countfen 计数从零重新开始计数。

    3、setshi 为时的手动进位端,当 setshi 高定平时且 clk 脉冲到来时,输出 en 时高电平,向时进位。

    3.(1)时计数器(shi)VHDL 程序描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity shi is port( ifen,reset:in std_logic; countshi:out std_logic_vector(7 downto 0) ); end shi; architecture fun of shi is signal count:std_logic_vector(7 downto 0); begin countshi<=count; process(ifen,reset) begin if(reset='0') then count<=“00000000“; elsif(ifen'event and ifen='1') then if(count(3 downto 0)=“1001“) then if(count<16#23#) then count<=count+7; else count<=“00000000“; end if; elsif(count<16#23#) then count<=count+1; else count<=“00000000“; end if; end if; end process; end fun; (2)时计数器(shi)仿真扫描显示译码器(saomiao)仿真 (3)时计数器(shi)仿真分析 1、ifen 为分计数器的 enshi 进位输出端,当 enshi(ifen)为高电平时, countshi 计数。countshi 计数到 23 时,当下一个 enshi(ifen)、clk 到来时, countshi 会自动清零。

    2、reset 为清零端,当 reset 低电平时,countfen 计数从零重新开始计数。

    4.整点报时 (1)整点报时器(baoshi)VHDL 程序描述 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity baoshi is port( clk:in std_logic; inputmiao,inputfen:in std_logic_vector(6 downto 0); output:out std_logic_vector(1 downto 0) ); end baoshi; architecture fun of baoshi is signal temp:std_logic_vector(1 downto 0); signal nummiao,numfen:std_logic_vector(7 downto 0); begin nummiao<=inputmiao; numfen<=inputfen; output<=temp; process(clk,temp) begin if(clk'event and clk='1') then if(numfen=“01011001“) then case nummiao is when“01011000“=>temp<=“01“; when“01011001“=>temp<=“10“; when others=>temp<=“00“; end case; end if; if(numfen=“00000000“) then case nummiao is when“00000000“=>temp<=“11“; when others=>temp<=“00“; end case; end if; end if; end process; end fun; 11 (2)整点报时器(baoshi)仿真波形图 (3)整点报时器(baoshi)仿真分析 input 为分计数器的输出端,当输出 58、59 和 00(十六进制)时,整点报 时器(baoshi)的输出端 output 为高电平,点亮 LED 灯。当 intput 为 58、59 时,点亮一个 LED 灯,当 input 为 00 时,点亮两个 LED 灯。其他情况时,LED 灯均不发光。

    4. (1)分频器(fenpin)设计 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fenpin is port( clk_5M:in std_logic; clk:out std_logic ); end fenpin; architecture fun of fenpin is signal count:std_logic_vector(22 downto 0); begin process(clk_5M) begin if (clk_5M'event and clk_5M='1') then if(count=“10011000100101100111111“) then count<=“00000000000000000000000“; clk<='1'; else count<= count+1; clk<='0'; end if; end if; end process; end fun; 5. (1)扫描显示译码器(saomiao))VHDL 程序描述 扫描显示译码器是用来显示时钟数值的装置,将数字时钟的高低电平信号用 数码管的数值显示出来。八个数码管中,用六个数码管显示时、分和秒,另外两 个可做为时和分、分和秒之间的间隔,始终不显示。

    首先对八个数码管进行扫描,每一时刻都只有一个数码管处于扫描状态,并 将此时的数字时钟的高低电平通过十六进制的 BCD 码转换为数码管显示数值。

    library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity saomiao is port( clk_smxs:in std_logic; shi:in std_logic_vector(7 downto 0); fen:in std_logic_vector(7 downto 0); miao:in std_logic_vector(7 downto 0); selout:out std_logic_vector(7 downto 0); segout:out std_logic_vector(6 downto 0) ); end saomiao; architecture fun of saomiao is signal temp:std_logic_vector(2 downto 0); signal seg:std_logic_vector(6 downto 0); signal sel:std_logic_vector(7 downto 0); begin selout<=sel; segout<=seg; process(clk_smxs) variable num:std_logic_vector(3 downto 0); begin if (clk_smxs'event and clk_smxs='1' ) then if temp>=“111“ then temp<=“000“; else temp<=temp+1; end if; case temp is when “111“ =>num:=shi(7 downto 4); sel<=“00000111“; when “110“ =>num:=shi(3 downto 0); sel<=“00000110“; when “100“ =>num:=fen(7 downto 4); sel<=“00000100“; when “011“ =>num:=fen(3 downto 0); sel<=“00000011“; when “001“ =>num:=miao(7 downto 4); sel<=“00000001“; when “000“ =>num:=miao(3 downto 0); sel<=“00000000“; when others=>sel<=“00000010“; end case; case num is when“0000“=>seg<=“0111111“; when“0001“=>seg<=“0000110“; when“0010“=>seg<=“1011011“; when“0011“=>seg<=“1001111“; when“0100“=>seg<=“1100110“; when“0101“=>seg<=“1101101“; when“0110“=>seg<=“1111101“; when“0111“=>seg<=“0000111“; when“1000“=>seg<=“1111111“; when“1001“=>seg<=“1101111“; when others=>seg<=“0000000“; end case; end if; end process; end fun; (2)扫描显示译码器(saomiao)仿真波形图 6.数字时钟整体设计 、数字时钟整体设计:

    (1)数字时钟的电路原理图:

    (2)数字时钟的电路仿真波形 五、实验电路图 5.1实验原理图 5.2 PCB图 六、 心得体会 七、 参考文献 [1]蒋立平.数字电路. 北京:兵器工业出版社,2008 [2]南京理工大学电子技术中心.EDA设计实验指导书.2010 [3] 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计 西安:西安电子科技大学出版社,1999 [4]潘松,黄继业EDA技术实用教程北京:科学出版社,2002 [5]卢杰,赖毅VHDL与数字电路设计北京:科学出版社,2006

    数字电路与逻辑设计实验实验一

    电力电子升压斩波电路设计课程设计

    北航电子电路设计数字部分实验报告

    【热门】电子课程设计心得体会1

    四川大学电子系统设计实验报告

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网