数字电路EDA设计(第二版)第六章 典型数字系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY div_half IS
PORT(clkin:IN STD_LOGIC;
div_out:BUFFER STD_LOGIC);
END div_half;
第六章 典型数字系统设计
● 分频器; ● 交通灯控制器; ● 数字频率计; ● 数字钟电路; ● LCD接口控制电路; ● 串行口控制器; ● 2FSK/2PSK信号产生器
1
分频电路
分频电路是数字电路中应用十分广泛的一种单元电路。尤其在EDA系统中, 由于FPGA芯片外接晶振通常频率较高(如XILINX公司的BASYS电路板的晶 振最高可产生100MHz的时钟信号),而系统中不同模块所需的工作时钟频 率一般是不同的,当所需频率小于晶振提供的频率时,就需要分频电路对晶振 提供的高频时钟频率进行降频,以获得所需的工作时钟。
(3)电平定义: 按键s1按下时相当于输入信号为低电平。 (4)观察验证: 用示波器36脚的输出波形与12引脚的时钟信号的频率,可以观察到12 引脚的时钟信号为10MHz,而36脚的波形为0.67MHz方波信号,从而实现了 占空比50%的15分频分频器的逻辑功能。
11
交通灯控制器
介绍模仿十字路口的交通灯控制效果的VHDL编程控制方法, 实验过程采用实验平台上的红黄绿三种色彩的LED灯代表红灯、 黄灯与绿灯,在东西和南北方向各有一组红黄绿灯,通过编程 控制不同方向不同色彩的LED按照交通指挥的规律亮灭。
ELSE cnt2<=cnt2+1;
END IF;
END IF;
END PROCESS; div_out<=div_tmp1 OR div_tmp2;
7
END a;
X.5分频
8
采用VHDL编程实现分频系数为N=6.5的分频器,可 采用以下方法:首先进行模7的计数,在计数到6时, 将输出时钟赋为'1',并且将计数值清零。这样,当计 数值为6时,输出时钟才为1,只要再设计一个扣除脉 冲电路,每到7个脉冲就扣除一个脉冲,即可实现 6+0.5分频时钟。
(1)确定管脚对应关系: 输入等待分频的信号 clk与MAXII的全局时钟输入引脚GCLK0对应;复位 信号rst与按键s1对应;输出信号div_out与拓展口J3的1脚对应。
(2)由QUARTUSII进行管脚分配: clk在MAXII芯片上对应的管脚号为12;按键s1对应管脚21;div_out在 MAXII芯片上对应的管脚号为36。
南北方 向计数

5
5
40 45
5
5
45 40
15
交通控制灯的VHDL程序
每位与实际电路板上的LED之间的对应关系
表6-3 CPLD输出信号与LED对应关系
led(5) led(4) led(3) led(2) led(1) led(0)
东西方向
南北方向
红灯 ( 30 秒 )
黄灯 (5秒)
绿灯 ( 20 秒 )
4
奇数分频
ARCHITECTURE a OF div_fre IS SIGNAL cnt: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL div_tmp:STD_LOGIC; BEGIN PROCESS (clk) BEGIN IF (rst='1') THEN
cnt<="0000"; ELSIF (clk’EVENT AND clk='1') THEN
ARCHITECTURE a OF div_fre IS
SIGNAL cnt: STD_LOGIC_VECTOR (2 DOWNTO 0);
SIGNAL div_tmp:STD_LOGIC;
BEGIN
PROCESS (clk)
BEGIN
IF (rst='1') THEN
cnt<="000";
ELSIF (clk’EVENT AND clk='1') THEN
rst:IN STD_LOGIC;
div_out:OUT STD_LOGIC);
END div_fre;
ARCHITECTURE a OF div_fre IS
SIGNAL cnt1,cnt2: STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL div_tmp1,div_tmp2:STD_LOGIC;
IF (cnt="111") THEN
div_tmp<=NOT div_tmp;
cnt<= (OTHERS=>'0');
ELSE
cnt<=cnt+1;
END IF;
END IF;
END PROCESS;
3
ARCHITECTURE a OF div_fre IS SIGNAL cnt: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL div_tmp:STD_LOGIC; BEGIN PROCESS (clk) BEGIN IF (rst='1') THEN
交通灯的四种可能亮灯状态
状态
1 2 3 4
东西方向
南北方向


绿


绿
1
0
0
0
0
1
0
1
0
0
0
1
0
0
1
1
0
0
0
0
1
0
1
0
14
交通灯设计中的状态跳变点
交通 灯 现状 态
1 2 3 4
计数器计数值
东西 方向 计数 值
南北方 向计数

6
1
1
1
1
6
1
1
交通 灯
次状 态
2 3 4 1
计数器计数值
东西 方向 计数 值
BEGIN
IF clktmp'EVENT AND clktmp='1' THEN
IF cnt="0110" THEN
out_div<='1'; cnt<="0000";
ELSE
cnt<=cnt+1; out_div<='0';
END IF;
END IF;
END PROCESS P1;
P2:PROCESS(out_div)
ARCHITECTURE a OF div_half IS
SIGNAL clktmp,out_divd:STD_LOGIC;
SIGNAL cnt:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
clktmp<=clkin XOR out_divd;
P1: PROCESS(clktmp)
BEGIN
PROCESS (clk,rst)
BEGIN
IF (rst='1') THEN
cnt1<="0000";
ELSIF (clk’EVENT AND clk='1') THEN
IF (cnt1="1110") THEN
div_tmp1<=NOT div_tmp1;
cnt1<= (OTHERS=>'0');
12
交通控制灯的功能描述
设东西方向和南北方向的车流量大致相同,因此红黄绿灯的 时长也相同,定为红灯30秒,黄灯5秒,绿灯20秒,同时用数 码管指示当前状态(红黄绿灯)剩余时间。另外设计一个紧急状 态,当紧急状态出现时,两个方向都禁止通行,指示红灯。紧 急状态解除时,重新计数并指示。
13
交通灯控制器的实现
目前大部分FPGA芯片片内集成了锁相环,如altera的PLL。应用锁相环可 以很精确地对外部输入时钟进行分频与倍频,然而,其分频与倍频的的倍 数只有有限的若干种,因此一般仅用来调节主时钟频率。当设计的目标系 统要求实现特殊的分频或倍频系数时,就需要通过编写HDL程序进行设计。
2
偶数分频
USE IEEE.STD_LOGIC_1164.ALL;
IF (cnt="1110") THEN
div_tmp<=NOT div_tmp;
cnt<= (OTHERS=>'0');
ELSIF (cnt="0111") THEN
div_tmp<=NOT div_tmp;
cnt<= cnt+1;
ELSE cnt<=cnt+1;
END IF;
END IF;
END PROCESS;
div_out<=div_tmp;
END a;
6
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY div_fre IS
PORT (clk:IN STD_LOGIC;
ELSIF (CLK’EVENT AND CLK='0') THEN
IF (cnt2="1110") THEN
div_tmp2<=NOT div_tmp2;
cnt2<= (OTHERS=>'0');
ELSIF (cnt2="0111") THEN
div_tmp2<=NOT div_tmp2;
cnt2<= cnt2+1;
2.计数器:计数器是以待测信号作为时钟,清零信号clear到来时, 异步清零;test_en为高电平时开始计数。计数以十进制数显示,本例 设计了一个简单的10KHz以内信号的频率计,如果需要测试较高频率 的信号,则将dout的输出位数增加,当然锁存器的位数也要相应增加。
18
பைடு நூலகம்
频率计的组成结构分析
频率计的结构包括一个测频控制信号发生器、一个计数器和 一个锁存器。
19
1.测频控制信号发生器:频率计设计的关键是设计一个测频控制 信号发生器,产生测量频率的控制时序。控制时钟信号clk取为1Hz, 二分频后即可产生一个脉宽为1s的时钟test_en,以此作为计数闸门信 号。当test_en为高电平时,允许计数;当test_en由高电平变为低电平, 即产生一个下降沿时,应产生一个锁存信号,将计数值保存起来;锁 存数据后,还要在下次test_en上升沿到来之前产生清零信号clear,将 计数器清零,为下次计数作准备。
绿灯 ( 20 秒 )
黄灯 (5秒)
红灯 ( 30 秒 )
16
交通控制灯的硬件验证
(1)确定管脚对应关系 (2)由QUARTUSII进行管脚分配 (3) 电平定义 (4)运行验证
17
数字频率计
频率计的基本原理是用一个频率稳定度高的频率源作为基准时 钟,对比测量其它信号的频率。通常情况下是计算每秒钟内待 测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可 以大于和小于1秒。闸门时间越长,得到的频率值就越准确,但 闸门时间长时每测一次频率的间隔就越长。闸门时间越短,测 得频率值刷新就越快,但测得的频率精度就受影响。
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY div_fre IS
PORT (clk:IN STD_LOGIC;
rst:IN STD_LOGIC;
div_out:OUT STD_LOGIC);
END div_fre;
ELSIF (cnt1="0111") THEN
div_tmp1<=NOT div_tmp1;
cnt1<= cnt1+1;
ELSE cnt1<=cnt1+1;
END IF;
END IF;
END PROCESS;
PROCESS(clk,rst)
BEGIN
IF (rst='1') THEN
cnt2<="0000";
SIGNAL cnt: STD_LOGIC_VECTOR (3 DOWNTO 0);
SIGNAL div_tmp:STD_LOGIC;
BEGIN
PROCESS (clk)
BEGIN
IF (rst='1') THEN
cnt<="0000";
ELSIF (clk’EVENT AND clk='1') THEN
BEGIN
IF out_div'EVENT AND out_div='1' THEN
out_divd<=NOT out_divd;
END IF;
END PROCESS p2;
div_out<=out_div;
END a;
10
分频器的硬件验证
将以上程序通过在系统编程下载入本书配套的CPLD电路板进行硬件验 证,按照以下步骤进行。
IF (cnt="1110") THEN cnt<= (OTHERS=>'0'); div_tmp<='1';
ELSE cnt<=cnt+1; div_tmp<='0';
END IF; END IF; END PROCESS; div_out<=div_tmp; END a;
5
ARCHITECTURE a OF div_fre IS
cnt<="0000"; ELSIF (clk’EVENT AND clk='1') THEN
IF (cnt="1111") THEN cnt<= (OTHERS=>'0'); div_tmp<='1';
ELSE cnt<=cnt+1; div_tmp<='0';
END IF; END IF; END PROCESS; div_out<=div_tmp; END a;
相关文档
最新文档