《PWM信号发生器的设计——毕业设计论文.doc》由会员分享,可在线阅读,更多相关《PWM信号发生器的设计——毕业设计论文.doc(10页珍藏版)》请在三一办公上搜索。
1、PWM信号发生器的设计实验/上机报告课程名称:EDA技术及应用专业:电气工程及其自动化成绩:指导教师:XXXX姓名:XXX日期:2013/10/16项目序号:实验二学号:XXXX时间:星期三项目名称:PWM信号发生器的设计组号:地点:XXXXX一、实验目的1、掌握序列发生器和检测器的工作原理;2、初步学会用状态机进行数字系统设计。二、实验环境 Quartus II 7.0 开发系统 三、实验内容用状态机设计实现串序列检测器设计,可以用原理图输入法设计序列信号发生器,要求产生序列:0111010011011010;再进行检测设计,若检测到序列:11010则输出为“1”,否则输出为“0”。并对其进
2、行仿真和硬件测试。四、实验过程本实验可以分为两部分来设计。第一步设计序列信号发生器,在这里可以采用模16的计数器74LS161来产生模16的计数,并由它的4位输出可以产生16种状态,由此可以用来设计序列产生器,也可以采用状态机产生序列,本实验用状态机产生序列。 第二步设计序列检测器,这里用状态机设计,如果为真输出1,为假输出为0; 第三步设计串行转并行输出,将序列并行输出在LED管上显示。 第四步是设计一个计数脉冲,记录出现所需要的序列的次数。第五步是将所有模块连接起来,构成一个完整的序列发生和检测设计器。实验代码:1、序列发生器library ieee;use ieee.std_logic_
3、1164.all;entity xulie_produce is序列产生电路port(clk,reset:in std_logic;comb_outputs:out std_logic);-序列输出end xulie_produce;architecture behav of xulie_produce istype fsm_st is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);-状态设计signal current_state,next_state:fsm_st;beginreg:process(reset,clk)主控时
4、序进程beginif reset =1then current_state=s0;elsif clk=1and clkevent then current_state comb_outputs=0;next_state comb_outputs=1;next_state comb_outputs=1;next_state comb_outputs=1;next_state comb_outputs=0;next_state comb_outputs=1;next_state comb_outputs=0;next_state comb_outputs=0;next_state comb_out
5、puts=1;next_state comb_outputs=1;next_state comb_outputs=0;next_state comb_outputs=1;next_state comb_outputs=1;next_state comb_outputs=0;next_state comb_outputs=1;next_state comb_outputs=0;next_state=s0;end case;end process;end behav;2、序列检测器library ieee;use ieee.std_logic_1164.all;entity s_machine i
6、s序列检测电路port(clk,reset:in std_logic;state_inputs:in std_logic;-状态转移控制comb_outputs:out std_logic);检测结果输出end s_machine;architecture behav of s_machine istype fsm_st is (s0,s1,s2,s3,s4,s5);signal current_state,next_state:fsm_st;beginreg:process(reset,clk)主控时序进程beginif reset =1then current_state=s0;elsif
7、 clk=1and clkevent then current_state comb_outputs=0; if state_inputs=1 then next_state=s1; else next_state comb_outputs=0; if state_inputs=1 then next_state=s2; else next_state comb_outputs=0; if state_inputs=0 then next_state=s3; else next_state comb_outputs=0; if state_inputs=1 then next_state=s4
8、; else next_state comb_outputs=0; if state_inputs=0 then next_state=s5; else next_state comb_outputs=1;-检测到11010输出1 if state_inputs=0 then next_state=s0; else next_state=s1;end if;end case;end process;end behav;3、串行输出变并行输出library ieee;use ieee.std_logic_1164.all;entity shift is 串行变并行电路port(clk,load,
9、a:in std_logic;din :out std_logic_vector(7 downto 0);-并行输出end shift;architecture behav of shift isbegin process(clk,load,a)variable reg8 :std_logic_vector(7 downto 0);待添加的隐藏文字内容3beginif clkevent and clk=1then if load=1then reg8(7 downto 1):=reg8(6 downto 0);-load为1时开始装载reg8(0):=a;end if;end if;din=r
10、eg8;end process;end behav;4、计数器设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY CNTM IS 计数电路PORT (CLK,RST,EN:IN STD_LOGIC;a,b,c:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNTM;ARCHITECTURE behav OF CNTM ISsignal a1,b1,c1:std_logic_vector(3 down
11、to 0);BEGINPROCESS (CLK,RST,EN)VARIABLE N :INTEGER RANGE 0 TO 1000; BEGIN IF RST =1 THEN N:=0; ELSIF CLK EVENT AND CLK=1 THEN IF EN = 1 THENIF N100 THEN N:=N+1;-设计为100计数ELSE N:=0;END IF;END IF;END IF;a1=conv_std_logic_vector(N/100),4);b1=conv_std_logic_vector(N/10)mod 10),4);c1=conv_std_logic_vector
12、(N mod 10),4);a=a1;b=b1;cNew-VHDL File,点击OK后在打开的界面下输入已经设计好的程序。(3)输入完程序后,保存文件选择菜单File-Save as,将文件保存到工程文件夹中,文件名不能含有中文字符,最好与程序实体名一样。(4)保存好文件后,一般会提示是否新建一个工程,选择是,如果没有就在菜单打开File-New project Wizard项,将出现工程项目建立向导。(5)按照工程项目向导提示设计好工程中要用到的文件放到同一个工程文件夹中,选择实验中用到的芯片和第三方工具(一般默认EDA自带的工具箱,在这里不做任何选择)。(6)完成工程项目建立后选择pro
13、cessing-start compilation或选择 按钮开始全程编译,如果编译过程中出现错误或警告提示,则双击错误或警告提示就可以找到该错误或警告在设计文件的位置。(7)在完成设计输入和综合编译以后,可以通过时序仿真来检查设计是否符合要求,这里我们可以通过建立波形文件(.vmf)。在选择File-New-Vetor Waveform File项后选择OK。(8)设计Edit栏选择End Time设计时间为50 us ,在View-ulitity windows中选择Node Finder或按Alt+1,然后将所有的输入输出拖到波形文件中,设计好输入时序和输出方式后保存文件。选择proce
14、ssing栏中的Start simulation或选择 按钮开始波形仿真。(9)仿真成功后得到了预期的设计效果后,将引脚锁定。方法如下:选择assignment中的pins,将To栏的信号锁定到相应的Location引脚列中。 波形仿真:五、 实验总结1.首先用VHDL语言设计序列信号发生器和序列信号检测器模块。2 、为了使设计简化,顶层文件采用原理图法,直接将两个模块连接起来。3、作检测器时要先画出其状态转移图,否则很容易出错。通过本次实验我更加熟悉状态机的使用,还有移位显示输出的设计。我发现每个实验都有很多种方式来实现,不同的人,有不同的思路。这让我们有可以互相学习的机会,学习别人的好的想法。同时这也是这门课最有趣的地方,不同的方式,同样的目的,殊途同归。通过四次实验下来,我觉得对学EDA有了浓厚的兴趣。期间每一次的实验我都认真的对待了,收获颇多,慢慢引导了我改怎样去学好这门EDA课程。最后,这四次实验我在和同学们在一起商讨一起做实验的过程中,学到了许多在我们课程中学不到的东西,使我更加加深了对VHDL实验的感性认识。巩固了我的部分理论知识;学会了使用硬件描述语言编写一些简单的程序;掌握了QuartusII软件使用,培养了我的实践技能,更为了我以后的实习奠定了一定的基础。