实验6 基于FPGA的分频器设计
预习内容
阅读《电工电子实验教程》第6.6节中触发器及时序逻辑电路的内容。
预先学习Quartus II软件的使用方法。
预习实验的内容,自拟实验步骤和数据表格,选择使用器件,完成电路设计,画出原理电路,手写预习报告。
一、实验目的
1.了解EDA软件在电子设计当中的重要作用。
2.熟悉并掌握Quartus II开发软件的基本使用方法。
3.运用图解法设计分频器电路,并进行电路仿真。
二、知识要点
FPGA(Field-Programmable Gate Array)是一种可编程器件,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA主要生产厂商有:Altera、Xilinx、Actel、Lattice。
FPGA的开发软件包括Altera公司的Quartus II、Xilinx 公司的ISE、Lattice 公司的isplever Base。
Quartus II是Altera公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。Quartus II可以产生并识别EDIF网表文件、VHDL网表文件和Verilog HDL网表文件,为其它EDA工具提供了方便的接口;可以在Quartus II集成环境中自动运行其它EDA工具。
利用Quartus II软件的开发流程可概括为以下几步:设计输入、设计编译、设计定时分析、设计仿真和器件编程。
用户通过开发软件提供的设计工具实现自己的电路设计以及相应的配置,当用户通过仿真验证结论后,便可把设计下载至FPGA中,实现设定功能。
三、实验内容
设计一个分频电路(使用74LS161和必要的门电路)。要求得到8分频(输出频率为输入频率的八分之一)信号和32分频信号。
本次实验使用软件Quartus II。
四、实验要求
画出逻辑电路图。
画出仿真波形,并对实验结果进行说明。
五、思考题
1.查阅资料说明CPLD的概念。
2.查阅资料简要说明FPGA与CPLD的区别。
3.总结使用Quartus II软件的设计过程。
六、报告要求
在实验报告中写出详细的设计思路和设计过程。
画出仿真原理图和仿真结果。
列出元器件清单。
写出实验结果及实验总结。
回答思考题。
第二篇:实验六 数控分频器的设计
可编程逻辑设计
——实验六报告
学院:物理与信息工程学院
专业:通信工程
年级:20##级
班级:二班
学号:110700221
姓名:林明明
指导老师:杨秀芝
实验六 数控分频器的设计
一、实验目的:
学习数控分频器的设计和测试方法。
二、实验原理:
数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。
电路输出波形图:
三、实验内容:
1)根据实验原理画出电路框图,并计算在不同预置数时输出信号的频率与时钟频率的比值。
2)编写实现数控分频器的VHDL程序。要求输出信号的占空比尽量为50%。
提示:可以将计数器溢出信号输出给一个翻转触发器,溢出信号的边沿作为触发器的触发信号,触发器的输出就是分频器的输出(注意计数器初始计数值与输出频率之间的关系)。
3)用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据。
4)通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。
输入不同的clk信号和不同的输入控制信号,测试输出波形。
管脚锁定: clk clk1 43
D(3) PIO23 30 SW1
D(2) PIO24 35 SW2
D(1) Pio25 36 SW3
D(0) PIO26 37 SW4
Fout PIO19 29 LED12
四、思考题:
如果需要进行奇数分频(如3分频),能否够保持输出波形的占空比为50%?如果不能,如何使占空比尽量接近50%;如果可以,应如何做?
五、实验结果:
数控分频器的原理框图:
数控分频器输出频率与输入时钟的关系:
答:
数控分频器输出频率与输入时钟频率成正比。对于相同的计数器初始计数值,如果时钟频率变大(或缩小)为原来的n倍,那么数控分频器输出频率也将变大(或缩小)为原来的n倍。
数控分频器的VHDL描述:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dvf is
port(clk:in std_logic;
d:in std_logic_vector(3 downto 0);
fout:out std_logic);
end;
architecture bhv of dvf is
signal full:std_logic;
begin
p_reg:process(clk)
variable cnt8:std_logic_vector(3 downto 0);
begin
if clk'event and clk='1'
then
if cnt8="1111"
then cnt8:=d;full<='1';
else cnt8:=cnt8+1;full<='0';
end if;
end if;
end process p_reg;
p_div:process(full)
variable cnt2:std_logic;
begin
if full'event and full='1'
then cnt2:=not cnt2;
if cnt2='1'
then fout<='1';
else fout<='0';
end if;
end if;
end process p_div;
end;
仿真波形:
测试结果及分析:
随着d的改变,输出信号fout频率发生变化,在实验箱上看到LED灯的闪动频率发生了明显的变化。
如此,电路的分频的功能得到验证。
【回答问题】
如果需要进行奇数分频(如3分频),能否够保持输出波形的占空比为50%?如果不能,如何使占空比尽量接近50%;如果可以,应如何做?
答:可以实现占空比为50%奇数N倍分频,方法是:首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数N分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N分频时钟。