正负脉宽数控调制信号发生器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
摘要 (I)
Abstract (II)
1、绪论 (1)
1.1 EDA和QuartusⅡ的简介及起源 (1)
1.2 EDA的优势 (1)
1.3 EDA发展趋势 (2)
2、设计任务与要求 (3)
2.1课程设计的任务 (3)
2.2课程设计的基本要求 (3)
3、设计原理 (4)
4、功能模块 (5)
4.1 分频器div (5)
4.2 可预置数计数器 (6)
4.3 数码动态扫描显示 (9)
5、总体设计电路图 (12)
5.1 总体电路图[2][5] (12)
5.2 顶层文件 (13)
6、程序下载及结果分析 (16)
6.1 管脚分配情况 (16)
6.2 结果验证 (16)
7、课程设计心得体会 (18)
参考文献 (19)
摘要
QuartusⅡ是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。

QuartusⅡ是在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plus Ⅱ的更新换代产品,其界面友好,使用环境便捷。

它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。

本设计采用Quartus编写程序并进行仿真,由两个完全相同的可自加载计数器LCNT8组成的,它的输出信号的高低电平脉宽可分别由两组8位预置数进行控制。

关键词:Quartus 计数器预置数
Abstract
Quartus II is the FPGA/CPLD integrated development environment provided by Altera, Altera is one of the world's largest suppliers of programmable logic devices. Quartus II was launched in the beginning of the 21st century are Altera previous-generation integrated development environment MAX+plus FPGA/CPLD ⅱ of the replacement products, its friendly interface, use the convenient environment. It provides a structure-neutral design environment, enabling designers to easily design input, rapid processing and device programming.
Design and write programs using Quartus and simulation, consisting of two identical load counters LCNT8, its output signal of high and low level pulse width can be separately controlled by two groups of 8 preset number.
Key word:Quartus, counters, preset number
1、绪论
1.1 EDA和QuartusⅡ的简介及起源
EDA技术是20世纪90年代迅速发展起来的,是现代电子设计的最新技术潮流,是电子线路设计与分析的一门技术。

EDA包括电子线路的设计、计算机模拟仿真和电路分析及印制电路板的自动化设计三个方面的内容。

随着可编程逻辑器件迅速发展,出现了功能强大的全新的EDA工具。

具有较强描述能力的硬件描述语言(VHDL、Verilog HDL)及高性能综合工具的使用,使过去单功能电子产品开发转向系统级电子产品开发。

QuartusⅡ是Altera提供的FPGA/CPLD开发集成环境,Altera是世界上最大的可编程逻辑器件供应商之一。

QuartusⅡ是在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plus Ⅱ的更新换代产品,其界面友好,使用环境便捷。

它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。

QuartusⅡ设计工具完全支持VHDL、Verilog的设计流程,其内部嵌有VHDL、Verlog逻辑综合器。

QuartusⅡ包括模块化的编译器。

编译器包括的功能模块有分析/综合器(Analysis & Synthesis)、适配器(Fitter)、装配器(Assembler)、时序分析器(Timing Analyzer)、设计辅助模块(Design Assistant)、EDA网表文件生成器(EDA Netlist Writer)、编辑数据接口(Compiler Database Interface)等。

可以通过选择Start Compilation来运行所有的编译器模块,也可以通过选择Start来单独运行各个模块。

还可以通过选择Compiler Tool,在Compiler Tool窗口中运行该模块来启动编译器模块。

在Compile Tool窗口中,可以打开该模块的设置文件或报告文件,或打开其它相关窗口。

1.2 EDA的优势
EDA技术的优势体现在:
用VHDL对数字系统进行抽象的行为与功能描述到具体的内部线路结构,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证
设计过程的正确性,可以大大降低设计成本,缩短设计周期。

●EDA工具之所以能够完成各种自动设计过程,关键是有种类库的支持,
如逻辑仿真时的模拟库、逻辑综合时的综合库、版图综合时的版图库、
测试综合时的测试库等。

●某些HDL本身也是文档型的语言(如VHDL),极大地简化了设计文档的
管理。

●EDA中最为瞩目的功能,最具现代化电子设计技术特征的功能,是日益
强大的逻辑设计仿真测试技术。

极大地提高了大规模系统电子设计的自
动化程度。

1.3 EDA发展趋势
表现在以下几个方面:
●超大规模集成电路的集成度和工艺水平不断提高,深亚微米
(Deep-Submicron)工艺,如0.13um、90nm已经走向成熟,在一个芯片
上完成的系统级的集成已经成为可能。

●由于工艺不断减小,在半导体材料上的许多寄生效应已经不能简单地补
码忽略,这就对EDA工具提出了更高的要求。

同时,也使得IC生产线的
投资更为巨大。

●高性能的EDA工具得到长足的发展,其自动化和智能化程度不断提高,
为嵌入式系统设计提供了功能强大的开发环境。

●市场对电子产品提出了更高的要求,从而也对系统的集成度不断提出更
高的要求。

同时,设计的效率也成了一个产品能否成功的因素,促使EDA
工具应用更为广泛。

2、设计任务与要求
2.1课程设计的任务
此信号发生器可产生占空比可调的方波,高低电平的维持时间由8位二进制数控制。

2.2课程设计的基本要求
通过课程设计各环节的实践,应达到如下要求:
1、初步掌握数字逻辑电路、EDA分析和设计的基本方法。

包括:
⑴.根据设计任务和要求,初选电路;
⑵.通过研究、设计计算,确定电路方案;
⑶.电路仿真及编程、模拟、连线、进行调试;
⑷.分析实验结果,写出设计总结报告。

2、培养一定自学能力和独立分析问题、解决问题能力。

包括:
⑴.学会自己分析、找出解决问题的方法;
⑵.对设计中遇到的问题,能独立思考,查阅资料,寻找解决方案;
⑶.掌握一些测试电路的基本方法,实验中出现一般故障,能独立解决;
⑷.能对实验结果进行分析和评价。

3、掌握编程、仿真、连线、调试等基本技能。

3、设计原理
总体框架图如图3.1所示:[4]
图3.1 总体框图
设计思路:
此信号发生器是由两个完全相同但使能端有效电平不同的的可自加载加法计数器组成的,它的输出信号的高低电平脉宽时间可分别由两组8位二进制预置数进行控制。

如果将信号发生器的输出端作为本计数器的初始预置加载信号ld1,取反后的作为ld2,那么cnt1和cnt2分开工作,则可构成计数初始值自加载方式的加法计数器,从而构成数控分频器。

4、功能模块
4.1 分频器div
器件图如图4.1所示:
图4.1 分频器器件图
时钟信号接到分频器的输入端clk,分频器的输出端clk10(接到预置计数器的脉冲输入端CLK)它的作用是将高频信号分成低频信号,在本设计中,是把50MHZ分成1KHZ。

[1]
分频器div的VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter100 is
port ( clk :in std_logic;
q :out std_logic);
end counter100;
architecture bahave of counter100 is
signal q0 :std_logic:='0';
begin
process(clk)
variable count :integer range 0 to 25000;
begin
if rising_edge(clk) then
if count<25000 then count:=count+1;
else q0<= NOT q0;count:=0;
end if;
end if;
end process;
q<=q0;
end bahave;
仿真波形如图4.2所示:
图4.2 分频器仿真波形
由于分频倍数太大,导致clk脉冲太密集,所以看不出来高低电平,但是能得出,分频后的输出信号q的周期是1ms。

仿真分析:任意给一个时钟信号,分频器将高频信号分成低频信号。

4.2 可预置数计数器
器件图如图4.3所示:
图4.3 计数器器件图
此计数器是一个8位二进制数的预置计数器,比普通计数器多了一个预置端ld和预置数据端d。

当ld=1或0时,在下一个时钟脉冲过后,计数器输出端预置数d,clk为脉冲信号输入端,时钟信号经分频后接到clk端,cnt为计数溢出输出端。

由于要接数码管显示成十进制数,所以需要将百、十、个位单独分出来[3]。

程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity cnt1 is
port(clk,ld:in std_logic;
d:in integer range 0 to 255;
cnt:out std_logic;
bai,shi,ge:out integer range 0 to 9);
end entity cnt1;
architecture art of cnt1 is
signal count,count1:integer range 0 to 255;
signal s1,s2,s3:integer range 0 to 9;
signal e:integer range 0 to 99;
begin
process(clk) is
begin
if clk'event and clk='1' then
if ld='1' then count<=d-1;
else count<=count-1;
end if;
end if;
end process;
process(clk,count) is
begin
if clk'event and clk='1' then
if count=0 then cnt<='1';else cnt<='0';
end if;
end if;
end process;
count1<=d;
s1<=count1 rem 10;
e<=count1/10;
s2<=e rem 10;
s3<=count1/100;
bai<=s3;
shi<=s2;
ge<=s1;
end architecture art;
仿真结果如图4.4、4.5所示:
图4.4 预置数
图4.5 溢出
仿真分析:图4.4中预置数D[7..0]为任意八位二进制数,预置端LD为1时,当时钟上升沿到来时,加载预置数,否则继续递减计数,当计到0
时输出为1(如图4.5),然后继续从所设置的预置数开始递减计数,
从而达到控制脉冲宽度的目的。

在此仿真过程中发现,由于计数到0,那么实际上是数了(预置数-0+1)ms,那么在程序中,开始递减的数据应该是(预置数-1)这样才能保持脉冲宽度大小与预置数相等。

4.3 数码动态扫描显示
本次课设所用的FPGA实验板中的数码管是共阳数码管,即将所有发光二极管的阳极接到一起形成公共阳极(COM),共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。

用数码管显示信息时,由于每个数码管至少需要8 个I/O 口,如果需要多个数码管,则需要太多I/O 口,所以在实际应用中,一般采用动态显示的方式解决此问题。

[1]
在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。

利用人的视觉暂留作用使人看到多个数码管同时显示。

在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。

[2]相应程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mux6_1 is
port( s1,s2,s3,s4,s5,s6:in std_logic_vector(3 downto 0);
clk:in std_logic;
segout :out std_logic_vector (6 downto 0);
count:out std_logic_vector (7 downto 0)); end mux6_1 ;
architecture one of mux6_1 is
signal CQI:std_logic_vector(2 downto 0);
signal dout:std_logic_vector (3 downto 0);
signal q0 :std_logic:='0';
begin
process(clk)
variable count0 :integer range 0 to 50000;
begin
if rising_edge(clk) then
if count0<50000 then count0:=count0+1;
else q0<= NOT q0;count0:=0;
end if;
end if;
end process;
process(q0)
begin
if q0'event and q0='1' then
if CQI="101" then
CQI<="000";
else
CQI<=CQI+1 ;
end if;
end if;
case CQI is
when "000"=>count<="11111110";dout<=s1;
when "001"=>count<="11111101";dout<=s2;
when "010"=>count<="11111011";dout<=s3;
when "011"=>count<="11011111";dout<=s4;
when "100"=>count<="10111111";dout<=s5;
when "101"=>count<="01111111";dout<=s6;
when others=>null;
end case;
end process;
process (dout)
begin
case dout is
when "0000" => segout<="1000000";
when "0001" => segout<="1111001";
when "0010" => segout<="0100100";
when "0011" => segout<="0110000";
when "0100" => segout<="0011001";
when "0101" => segout<="0010010";
when "0110" => segout<="0000010";
when "0111" => segout<="1111000";
when "1000" => segout<="0000000";
when "1001" => segout<="0010000";
when others=>segout<="1111111";
end case;
end process;
end one;
5、总体设计电路图5.1 总体电路图[2][5]
图5.1 整体电路图
5.2 顶层文件
library ieee;
use ieee.std_logic_1164.all;
entity pulse is
port( clk:in std_logic;
b:in std_logic_vector(7 downto 0);
key: in std_logic ;
psout:out std_logic;
segout :out std_logic_vector (6 downto 0);
count:out std_logic_vector (7 downto 0));
end entity pulse;
architecture art of pulse is
component cnt1 is
port(clk,ld:in std_logic;
d:in std_logic_vector(7 downto 0);
cnt:out std_logic;
bai,shi,ge:out integer range 0 to 9);
end component lcnt8 ;
component counter100 is
port ( clk :in std_logic;
q :out std_logic);
end component counter100 ;
component mux6_1 is
port( s1,s2,s3,s4,s5,s6:integer range 0 to 9;
clk:in std_logic;
segout :out std_logic_vector (0 to 6);
count:out std_logic_vector (7 downto 0));
end component mux6_1;
signal cnt1,cnt2:std_logic;
signal ld1,ld2,e:std_logic;
signal psint:std_logic;
signal ss1,ss2,ss3,ss4,ss5,ss6:integer range 0 to 9;
signal b1,b2:std_logic_vector(7 downto 0);
begin
u1:counter100 port map (clk=>clk,q=>e);
u2:cnt1 port map (clk=>e,ld=>ld1,d=>b1,cnt=>cnt1,bai=>ss3,shi=>ss2 ,ge=>ss1);
u3:cnt1 port map (clk=>e,ld=>ld2,d=>b2,cnt=>cnt2,bai=>ss6,shi=>ss5 ,ge=>ss4);
u4:mux6_1 port map (ss6,ss5,ss4,ss3,ss2,ss1,clk,segout,count);
process(key)
begin
if key='1' then b1<=b;
else b2<=b;
end if;
end process;
process(cnt1,cnt2) is
begin
if cnt1='1' then psint<='0';
elsif cnt2'event and cnt2='1'then psint<='1';
end if;
end process;
ld1<=not psint;ld2<=psint;psout<=psint;
end architecture art;
由于实验板上只有八个拨码开关,为达到给两个计数器提供预置数的目的,使用了一个按键,按键按下去时,一个计数器预置数有效,按键松开时,另一个有效。

[4]
6、程序下载及结果分析
6.1 管脚分配情况
6.2 结果验证
通过示波器观察实验结果:
7、课程设计心得体会
刚拿到题目时,不知从何下手,反复的看书查资料,寻求帮助,终于让我对这个题目有了一定的了解,开始设计电路,编写程序,最后进行仿真,在仿真的过程中,出现了很多问题,比如开始的时候,输出信号的周期比预设的总是多了两秒,后来发现是因为倒数至0时相当于在原预置数加了1,于是开始信号接收到的数字应该是预置数减1。

在同学的帮助下,终于解决了各种问题得到了正确的结果。

由于上学期选修过EDA这门课,所以对quartusII软件的编程以及使用方法还比较熟悉,以前学习上存在的不足,通过与同学探讨和查阅资料,终于把问题都解决了,并加深了对正负脉宽数控调制信号发生器的原理和设计思路的了解。

同时也熟练掌握了课程设计的一般流程,为以后的设计也积累了一定的经验。

对于我来说,收获最大的是方法和能力--分析和解决问题的能力。

通过课程设计,将学过的相关知识系统地联系起来,理论联系实际,让自己有更大改进。

参考文献
[1] 潘松,黄继业.EDA技术与VHDL设计.北京:清华大学出版社高等教育出版社,2007.
[2] 杨丽英.电子电路EDA技术与应用.北京:清华大学出版社,2011.11
[3] 江国强.EDA技术与应用.北京:电子工业出版社,2011.7
[4] 蒋小燕、俞伟钧、张立臣. EDA技术及VHDL.南京:东南大学出版
社,2008.12
[5]孙俊逸.EDA课程设计.武汉:华中科技大学出版社,2008.5
本科生课程设计成绩评定表
指导教师签字
年月日。

相关文档
最新文档