EDA课程设计-信号发生器与数字钟设计.doc

上传人:xin****828 文档编号:6705905 上传时间:2020-03-02 格式:DOC 页数:28 大小:2.01MB
返回 下载 相关 举报
EDA课程设计-信号发生器与数字钟设计.doc_第1页
第1页 / 共28页
EDA课程设计-信号发生器与数字钟设计.doc_第2页
第2页 / 共28页
EDA课程设计-信号发生器与数字钟设计.doc_第3页
第3页 / 共28页
点击查看更多>>
资源描述
EDA综合设计报告EDA综合设计报告题目:信号发生器与数字钟设计学院:电气信息学院 专业:通信工程 姓名: 学号: 指导老师:汪敏 第一部分:信号发生器一、设计任务要求设计一个多功能信号发生器,根据输入信号的选择可以输出递增锯齿波,递减锯齿波,三角波,阶梯波,方波和正弦波六种信号,并能实现频率选择和幅度调节,信号发生器的控制模块可以用数据选择器实现,六种信号的选择可以用6选1数据选择器实现。二、方案设计(一)设计思路1.利用VHDL语言,设计分频器,实现2分频,4分频,8分频及16分频,实现频率选择功能,生成模块。与利用数据选择器原理设计的频率选择器模块相连,实现频率选择输出。2.利用VHDL语言,分别实现六种信号(递增/递减锯齿波,三角波,阶梯波,方波和正弦波)的输出,生成模块。3.将设计的各功能模块按要求连接,分配引脚接口,连接实验箱,进行硬件测试,验证实现功能。(二)程序流程 Clk 输入 六种 波形 输出 时钟 频率 波形 波形 幅度 选择输入 选择 模块 选择 调节 波形 (三)设计软件Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性。三、硬件设计(一)分频器 分频器的功能是:利用对时钟上升沿计数,从而实现可以输出二分频,四分频,八分频及十六分频模块,分频器模块是为了实现信号发生器的频率选择功能。在VHDL编程中,设置一个4位标准逻辑矢量,并循环计数,分别输出它的每一位,即实现了分频功能。生成的模块如图3-1示。图3-1 利用波形仿真工具,生成改分频器的波形图,如下图3-2示,该编程实现了分频功能。图3-2(二)频率选择器 频率选择器利用四选一数据选择器原理,与分频器结合实现各种分频的频率选择输出,接入各个信号的CLK输入接口。四选一数据选择器有四种实现方式:if语句,case语句,条件信号赋值语句及选择信号赋值语句。本次设计采用条件信号赋值语句。s1,s2为输出选择端,q输出选择的频率,生成的模块如图3-3示。图3-3利用波形仿真工具,生成的频率选择器波形如图3-4示。图3-4(三)输出选择模块输出选择模块与频率选择模块原理一样,本次设计实现六选一波形发生器,故输出选择模块为六选一数据选择器,利用CASE语句实现波形选择输出,设置sel位三位标准逻辑矢量,超出范围case选择指向null。且case选择语句必须有others。生成模块如图3-5示。图3-5(四)调幅模块MegaWizard Plug-In Manager工具提供了丰富的库函数,这些库函数专门针对Altera公司的器件进行优化,电路结构简单,并大大减少了设计者的工作量。通过MegaWizard Plug-In Manager工具的向导,设计者可以利用Quartus II提供的库函数自定义功能宏块,并设置模块参数和可选端口数值。调幅模块利用该库函数中的lpm_divide(除法器模块),通过利用除法器模块将输出选择模块中的输出值除以denom中设置的输入值,从而实现调幅功能。生成模块如图3-6示。图3-6(五)各信号模块1.递增锯齿波设置clk及reset两个标准逻辑位输入端,一个8位标准逻辑矢量q输出,具有异步复位功能,故进程中敏感信号包括clk及reset,当reset值为0时,输出清零复位。检测是否达到最大值“11111111”,未到则加一,实现递增锯齿波,到后清零重复循环。生成模块如下图3-7示。图3-72.递减锯齿波与递增锯齿波类似,具有相同的输入输出端,及异步复位功能。区别在于检测是否达到最小值“00000000”,未到则减一,实现递减锯齿波,到后重置为“11111111”,循环重复实现锯齿波输出。生成模块如下图3-8示。图3-83.三角波设置clk,reset两个标准逻辑位输入、一个8位标准逻辑矢量数据输出、异步复位。reset为0时,输出清零复位。设置局部变量a,当a为0时,temp执行连加计算,当temp加至“11111111”时,a置为1;当a为1时,temp执行连减计算,当temp减至“00000000”后,a置为0。依次循环,实现三角波信号输出。生成模块如下图3-9示。图3-94.阶梯波设置clk,reset两个标准逻辑位输入、一个8位标准逻辑矢量数据输出、异步复位。同样reset为0时有效,输出清零复位。检测变量temp为“11111111”后置0,否则按16为步长增加temp的值,输出阶梯波信号,生成模块如下图3-10示。图3-105.方波设置clk,reset两个标准逻辑位输入、一个8位标准逻辑矢量数据输出、异步复位。检测clk上升沿执行temp加1计算,当temp小于“10000000”时,a置1,否则a置0,当a为1时,输出q为“11111111”,a为0时,q为“00000000”。从而实现占空比为1:1的方波输出。生成模块如下图3-11示。图3-116.正弦波设置clk,reset两个标准逻辑位输入,一个0到255的整形实数输出,异步复位。设置中间变量整形temp为0到63,检测clk上升沿执行temp加1计算,利用case语句,将temp对应为正弦信号的x轴,分别将y轴的值赋给64个temp值相对应,从而输出q,实现近似于正弦信号的输出,生成模块如图3-12示。图3-12四、波形仿真结果及分析(一)系统电路图将上述模块按功能逻辑连接,如下图4-1示。具有一个clk时钟输入,一个reset复位信号输入,一个(s1,s2)的频率选择端输入,一个三位sel输出信号选择端输入。一个8位的输出信号输出。图4-1(二)管脚分配在前面选择好一个合适的目标器件(本次设计选择为EP2C35F672C8)完成设计的分析综合过程,得到工程的数据文件以后,需要对设计中的输入、输出指定到具体的器件管脚号码,指定管脚号码称为管脚分配或管脚锁定。在菜单assignments中选择pins项,点击在下图4-2中下面的表格右侧的filter的下箭头,选择pins:all,将显示本工程中所有的输入输出端口。选择要分配的端口,在location对应的行中双击鼠标左键,将显示芯片所有的引脚,选择要使用的引脚即可。引脚锁定后,必须再进行一次编译,将引脚信息编译进下载文件中。图4-2(三)仿真波形创建波形仿真文件,选择QUARTUSII软件FileNew,进行新建,选择Vector Waveform File,点击OK,则打开了一个空的波形编辑器。在波形编辑器窗口左边的的端口名列表区点击鼠标右键,在弹出的对话框中选择Insert Node or Bus命令,在弹出的对话框中,选择需要的信号进行仿真。这里,我们将分别对可选的6个信号波形进行波形仿真。1.正弦波设置时钟信号clk周期为10ns,reset为1。仿真波形如下图4-3示。图4-32.递减锯齿波设置同上,仿真波形如图4-4示。图4-53.递增锯齿波设置同上,仿真波形如图4-6示。图4-64.阶梯波设置同上,仿真波形如图4-7示。图4-75.三角波设置同上,仿真波形如图4-8示。图4-86.方波设置同上,仿真波形如图4-9示。图4-97.整体仿真1)频率选择为2分频(s1,s2=0),调幅系数为1(denom=1),输出选择方波(sel=110),仿真波形如图4-10示。图4-102)频率选择为2分频(s1,s2=0),调幅系数为2(denom=2,输出幅值为原来二分之一),输出选择方波(sel=110),仿真波形如图4-11示。图4-113)频率选择为16分频(s1,s2=1),调幅系数为2,输出方波,仿真波形如图4-12示。图4-12五、硬件调试及结果(一)程序加载完成对期间的加载有两种形式,一种是对目标器件进行加载文件,一种是对目标器件的配置芯片进行加载。1.使用下载电缆将PC机与实验系统连接起来2.选择QUARTUSII 软件的ToolProgrammer命令,进行编译器窗口,如下图5-1示,如果没有设置编程硬件,则编程硬件类型为No Hardware,需要对编程硬件进行设置。点击Hardware Setup编程硬件设置按钮,将currently selected hardware设置为:USB-BlasterUSB-0。3.点击start进行文件加载,直到加载进度变为100%,文件成功加载完成。图5-1(二)signaltap2Signaltap II嵌入逻辑分析仪集成到Quartus II设计软件中,能够捕获和显示可编程芯片(sopc)设计中实时信号的状态,这样开发者就可以在整个设计过程中以系统级的速度观察硬件和软件的交互作用。它支持多达1024个通道,采样深度高达128Kb,每个分析仪均有10级触发输入/输出,从而增加了采样的精度。新建SignalTap II Logic Analyzer File文件,在instance中添加观测节点(nodes),将要观察的输出信号q加入,设置clock为输入的clk信号,采样深度设为1k,重新编译添加了signal tap的工程文件,编译完后,在stp中点击右上角的SOF Manager后面的.,选择好刚刚生成的SOF文件,然后点击program device。再点击run analyzer运行该stp文件,观察生成波形。1.输出正弦波设置sel=001,频率(s1,s2)设为00,幅度调节(denom)设为001,波形如图5-2示。图5-22.输出递减锯齿波设置sel=010,频率(s1,s2)设为00,幅度调节(denom)设为001,波形如图5-3示。图5-33.输出递增锯齿波设置sel=011,频率(s1,s2)设为00,幅度调节(denom)设为001,波形如图5-4示。 图5-44.输出阶梯波设置sel=100,频率(s1,s2)设为00,幅度调节(denom)设为001,波形如图5-5示。图5-55.输出三角波设置sel=101,频率(s1,s2)设为00,幅度调节(denom)设为001,波形如图5-6示。图5-66.输出方波 1)设置sel=110,频率(s1,s2)设为00,幅度调节(denom)设为001,波形如图5-7示。图5-72)设置sel=110,频率(s1,s2)设为11,幅度调节(denom)设为001,波形如图5-8示。图5-83)设置sel=110,频率(s1,s2)设为00,幅度调节(denom)设为010,波形如图5-9示。图5-9第二部分:数字钟设计一、设计任务设计一个多功能数字钟,要求显示格式为:小时-分钟-秒钟,整点报时,报时时间为5秒,即从整点前5秒开始进行报时提示,LED开始闪烁,过整点后,停止闪烁。系统时钟选择模块的10Khz,要得到1Hz时钟信号,必须对系统时钟进行10,000次分频。调整时间的按键模块S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。另外用S3键作为系统时钟复位,复位后全部显示00-00-00。二、方案设计(一)设计思路1.要实现显示时-分-秒、整点报时、小时和分钟可调等功能,首先整个时钟的工作应该是在1Hz的信号作用下进行,这样每来一个时钟的上升沿,秒加一,当秒达到59,跳转00,分钟加一,当分钟增加到59,跳转00,小时加一,当小时增加到23,跳转00,以此循环。2.在设计中,为了显示方便,由于分钟和秒钟显示范围都是059,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码显示个位,对于小时因为它的范围是从023,所以可以用一个2位的二进制码显示十位,用4位二进制码显示个位。3.设计中由于七段码管是扫描的方式显示,所以虽然时钟信号需要的是1Hz,但扫描需要一个高频信号,因此1Hz信号只能通过分频的方式获得。4.对于整点报时功能,主要是检测分钟与秒钟是否达到59分55秒,到后LED灯开始闪烁。(二)程序流程23后清零到59到59Clk时钟输入 分频实现1Hz 秒钟计数加一 分钟计数加一 小时计数加一5秒倒计时报警模块数码管动态扫描输出三、软件设计(一)分频程序要实现1s的计时,需要对10k的系统时钟实现10,000分频,2的13次方为8192,接近10000,故令一14位的标准逻辑矢量,当小于10000时自加1,到后重赋初值。输出第13位值,此值就为约等于1hz的时钟信号。(二)计数程序设置6个整形信号,分别表示时分秒的个位与十位。Reset为异步复位信号,当rst为0时,6个信号都清零复位。检测1hz信号的上升沿,S1为调整小时按钮,S2为调整分钟按钮,上升沿来后,若检测到S1或S2按下(值为0),可以调整数字钟起始值,又当秒的个位自加到9后,十位加1,个位清零,当秒十位到5,个位到9后,分的个位加1,秒的个位与十位同时清零,当分的个位到9,后十位加一,个位清零,当分十位到5,个位到9,小时的个位加一,当小时的十位为2,个位为3,同时分钟为59,秒钟为59后,小时清零。依次循环,实现整个设置计数初值及计数的过程。通过多个if语句嵌套,来实现该计数功能。(三)报警程序判断当分钟到59,秒钟到54后,输出四位标准逻辑矢量led_display, led_display外接四个LED,当55秒时利用case语句依次输出:1111,0111,0011,0001,1111 LED灯将出现相应的闪烁效果,实现倒计时功能。四、波形仿真及分析新建波形文件,设置clk为10ns,rst为1,s1,s2部分为1,下图4-1为输出的波形图,因display为循环扫描,输出值不能明显看出是数字钟,此时我们需要进行硬件测试,以便更好的观察实验现象。图4-1五、硬件调试及结果首先将管脚分配,具体分配如图5-1示。图5-1完成管脚分配后再进行全编译后,打开programmer如图5-2示,将目标文件加载到目标板上,具体步骤如下:1.使用下载电缆将PC机与实验系统连接起来2.选择QUARTUSII 软件的ToolProgrammer命令,进行编译器窗口,如下图5-1示,如果没有设置编程硬件,则编程硬件类型为No Hardware,需要对编程硬件进行设置。点击Hardware Setup编程硬件设置按钮,将currently selected hardware设置为:USB-BlasterUSB-0。3.点击start进行文件加载,直到加载进度变为100%,文件成功加载完成。图5-2将数字信号源模块的时钟选择为10Khz,观察实验箱如图5-3示。图5-3按下s2键,调节分钟,如图5-4示。图5-4按下S1键,调节小时,如图5-5示。图5-5按下s3键开始,时分秒复位,如图5-6示。图5-6 当59分55秒后LED开始倒计时,如图5-7示。图5-7示第三部分 总结一、结论本次课程设计完成了多波形信号发生器与数字钟的设计,在设计信号发生器中,利用分频器实现了信号的频率调节,利用除法器实现了信号的幅度调节,再利用了数据选择起实现了信号波形的选择输出,最终通过quartus ii 软件中的signaltap ii观察到了输出波形,验证了实验结果。在数字钟的设计中,同样利用分频原理获得了近似1hz的时钟信号,设置S1,S2端进行了时钟的初值设定,设置了LED的整点报时功能,利用多层if嵌套实现时钟的计时,进位功能,最终将程序导入目标板,通过实验箱中的8位LED数码管观察到实验结果。二、心得体会通过前期的EDA理论课学习,对VHDL语言、对quartus ii 软件有了初步的认识与基础,所以在本次的课程设计中,将前期的学习内容进行了综合,学习了quartus ii软件中的signaltap ii 的使用方法,成功实现了波形的输出,对整个EDA程序的设计流程有了更深的认识,清楚了设计的总体步骤。参考文献资料:1朱正伟等 EDA技术及应用 清华大学出版社 2014.72汪敏等, 课程实验及综合设计指导书 西南石油大学 ,2013.63潘松等 EDA技术实用教程M 科学出版社,2005年第2版1-254章彬宏 EDA应用技术 北京理工大学出版社,2007.75陈拓 使用SignalTap II逻辑分析仪调试FPGA,2008.7附录一:信号发生器程序1.分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity frequencydivider is port(clk:in std_logic; clk_div2,clk_div4,clk_div8,clk_div16:out std_logic);end frequencydivider; architecture behave of frequencydivider is signal count:std_logic_vector(3 downto 0); begin process(clk) begin if clkevent and clk=1 then if count=1111 then count=0000; else count=count+1; end if; end if; end process; clk_div2=count(0); clk_div4=count(1); clk_div8=count(2); clk_div16=count(3);end behave;2.频率选择library ieee;use ieee.std_logic_1164.all;entity switchfrequency is port( s1,s2:in std_logic; clk_div2,clk_div4,clk_div8,clk_div16:in std_logic; q:out std_logic );end switchfrequency;architecture behave of switchfrequency is signal sel:std_logic_vector(1 downto 0); begin sel=s1&s2; q=clk_div2 when sel=00 else clk_div4 when sel=01 else clk_div8 when sel=10 else clk_div16; end behave;3.正弦波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sine is port(clk,reset:in std_logic; q:out integer range 0 to 255);end sine;architecture behave of sine isbegin process(clk,reset) variable tmp:integer range 0 to 63; begin if reset=0then qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqnull; end case; end if; end process;end;4.递减锯齿波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decreasesawtooth isport( clk:in std_logic; reset:in std_logic; q:out std_logic_vector(7 downto 0) ); end decreasesawtooth;architecture behave of decreasesawtooth isbegin process(clk,reset) variable temp:std_logic_vector(7 downto 0); begin if reset=0 then temp:=00000000; elsif clkevent and clk=1 then if temp=00000000 then temp:=11111111; else temp:=temp-1; end if; end if; q=temp; end process; end behave;5.递增锯齿波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity increasesawtooth isport( clk:in std_logic; reset:in std_logic; q:out std_logic_vector(7 downto 0) ); end increasesawtooth;architecture behave of increasesawtooth isbegin process(clk,reset) variable temp:std_logic_vector(7 downto 0); begin if reset=0 then temp:=00000000; elsif clkevent and clk=1 then if temp=11111111 then temp:=00000000; else temp:=temp+1; end if; end if; q=temp; end process; end behave; 6.阶梯波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ladder is port(clk,reset:in std_logic; q:out std_logic_vector(7 downto 0); end ladder;architecture behave of ladder isbegin process(clk,reset) variable temp:std_logic_vector(7 downto 0); begin if reset=0 then temp:=00000000; elsif clkevent and clk=1 then if temp=11111111 then temp:=00000000; else temp:=temp+16; end if; end if; q=temp; end process;end behave;7.三角波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity triangular is port(clk,reset:in std_logic; q:out std_logic_vector(7 downto 0);end triangular;architecture behave of triangular isbegin process(clk,reset) variable tmp:std_logic_vector(7 downto 0); variable a:std_logic; begin if reset=0 then tmp:=00000000; elsif rising_edge(clk)then if a=0 then if tmp=11111110 then tmp:=11111111; a:=1; else tmp:=tmp+1; end if; elseif tmp=00000001 then tmp:=00000000; a:=0; else tmp:=tmp-1; end if; end if; end if; q=tmp; end process; end behave;8.方波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity square is port(clk,reset:in std_logic; q:out integer range 0 to 255); end square;architecture behave of square isbegin process(clk,reset) variable temp:integer range 0 to 63; begin if reset=0 then elsif clkevent and clk=1 then if temp=63 then temp:=0; else temp:=temp+1; end if; if temp32 then q=255; else qqqqqqqnull; end case; end process; end behave;附录二:数字钟程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity timer isport(clk: in std_logic;rst:in std_logic;s1,s2:in std_logic;led: out std_logic_vector(3 downto 0);display:out std_logic_vector(7 downto 0);seg_sel:buffer std_logic_vector(2 downto 0);end timer;architecture behave of timer issignal disp_temp:integer range 0 to 15;signal disp_decode:std_logic_vector(7 downto 0);signal sec1,sec10:integer range 0 to 9;signal min1,min10:integer range 0 to 9;signal hour1,hour10:integer range 0 to 9;signal clk_count1:std_logic_vector(13 downto 0);signal clk1hz:std_logic;signal led_count:std_logic_vector(2 downto 0);signal led_display:std_logic_vector(3 downto 0);begin process(clk)beginif(clkevent and clk=1)thenif(clk_count110000)thenclk_count1=clk_count1+1;elseclk_count1=00000000000001;end if;end if;end process;clk1hz=clk_count1(13);process(clk1hz,rst)beginif(rst=0)thensec1=0;sec10=0;min1=0;min10=0;hour1=0;hour10=0;elsif(clk1hzevent and clk1hz=1)then if(s1=0)thenif(hour1=9)then hour1=0; hour10=hour10+1;elsif(hour10=2 and hour1=3)then hour1=0; hour10=0;else hour1=hour1+1;end if; elsif(s2=0)then if(min1=9)then min1=0; if(min10=5)then min10=0; else min10=min10+1; end if; else min1=min1+1; end if; elsif(sec1=9)then sec1=0; if(sec10=5)then sec10=0; if(min1=9)then min1=0; if(min10=5)then min10=0; if(hour1=9)then hour1=0; hour10=hour10+1; elsif(hour10=2 and hour10=3)then hour1=0; hour10=0; else hour1=hour1+1; end if; else min10=min10+1; end if; else min1=min1+1; end if; else sec10=sec10+1; end if;else sec13)thenled_count=led_count+1;elseled_countled_displayled_displayled_displayled_displayled_displayled_displayled_display=0000;end case;leddisp_tempdisp_tempdisp_tempdisp_tempdisp_tempdisp_tempdisp_tempdisp_temp=sec1;end case;end process;process(clk)beginif(clkevent and clk=1)thenseg_sel=seg_sel+1;displaydisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decodedisp_decode=00000000;end case;end process;end behave;28
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!