第六章 典型数字系统设计

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

奇数分频
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 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;
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; 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 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) 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;
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; 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; 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'); 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"; 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; ELSE cnt2<=cnt2+1; END IF; END IF; END PROCESS; div_out<=div_tmp1 OR div_tmp2; END a;
交通灯控制器
源自文库
介绍模仿十字路口的交通灯控制效果的 VHDL编程控制方法, 实验过程采用实验平台上的红黄绿三种色彩的LED灯代表红灯、 黄灯与绿灯,在东西和南北方向各有一组红黄绿灯,通过编程 控制不同方向不同色彩的LED按照交通指挥的规律亮灭。
交通控制灯的功能描述
设东西方向和南北方向的车流量大致相同,因此红黄绿灯的 时长也相同,定为红灯30 秒,黄灯5秒,绿灯20秒,同时用数 码管指示当前状态(红黄绿灯)剩余时间。另外设计一个紧急状 态,当紧急状态出现时,两个方向都禁止通行,指示红灯。紧 急状态解除时,重新计数并指示。
南北方 向计数 值 1 1 6 1
交通 灯 次状 态 2 3 4 1
东西 南北方 方向 向计数 计数 值 值 5 5 40 45 5 5 45 40
交通控制灯的VHDL程序
每位与实际电路板上的LED之间的对应关系
表6-3 CPLD输出信号与LED对应关系
led(5) 东西方向
led(4)
led(3)
X.5分频
采用 VHDL 编程实现分频系数为 N=6.5 的分频器,可 采用以下方法:首先进行模 7 的计数,在计数到 6时, 将输出时钟赋为'1',并且将计数值清零。这样,当计 数值为 6时,输出时钟才为 1 ,只要再设计一个扣除脉 冲电路,每到7个脉冲就扣除一个脉冲,即可实现 6+0.5分频时钟。
频率计的组成结构分析
频率计的结构包括一个测频控制信号发生器、一个计数器 和一个锁存器。
1.测频控制信号发生器:频率计设计的关键是设计一个测频控制 信号发生器,产生测量频率的控制时序。控制时钟信号clk取为1Hz, 二分频后即可产生一个脉宽为1s的时钟test_en,以此作为计数闸门 信号。当test_en为高电平时,允许计数;当test_en由高电平变为低 电平,即产生一个下降沿时,应产生一个锁存信号,将计数值保存起 来;锁存数据后,还要在下次test_en上升沿到来之前产生清零信号 clear,将计数器清零,为下次计数作准备。 2.计数器:计数器是以待测信号作为时钟,清零信号clear到来时, 异步清零;test_en为高电平时开始计数。计数以十进制数显示,本 例设计了一个简单的10KHz以内信号的频率计,如果需要测试较高频 率的信号,则将dout的输出位数增加,当然锁存器的位数也要相应增 加。 3.锁存器:当test_en下降沿到来时,将计数器的计数值锁存,这 样可由外部的7段译码器译码并在数码管上显示。设置锁存器的好处 是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存 器的位数应跟计数器完全一样。
偶数分频
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; rst:IN STD_LOGIC; div_out:OUT STD_LOGIC); END div_fre; 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 IF (cnt="111") THEN div_tmp<=NOT div_tmp; cnt<= (OTHERS=>'0'); ELSE cnt<=cnt+1; END IF; END IF; END PROCESS; div_out<=div_tmp; END a;
交通灯控制器的实现
交通灯的四种可能亮灯状态
东西方向 状态 红 黄
南北方向 红 0 0 1 黄 0 0 0 绿 1 1 0
绿
1 2 3 1 0 0 1 0
0
0 1 0 0 0
4
1
0
1
0
交通灯设计中的状态跳变点
计数器计数值 计数器计数值
交通 灯 现状 态 1 2 3 4
东西 方向 计数 值 6 1 1 1
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 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;
分频器的硬件验证
将以上程序通过在系统编程下载入本书配套的CPLD电路板进行硬件 验证,按照以下步骤进行。 (1)确定管脚对应关系: 输入等待分频的信号 clk与MAXII的全局时钟输入引脚GCLK0对应;复位 信号rst与按键s1对应;输出信号div_out与拓展口J3的1脚对应。 (2)由QUARTUSII进行管脚分配: clk在MAXII芯片上对应的管脚号为12;按键s1对应管脚21;div_out在 MAXII芯片上对应的管脚号为36。 (3)电平定义: 按键s1按下时相当于输入信号为低电平。 (4)观察验证: 用示波器36脚的输出波形与12引脚的时钟信号的频率,可以观察到 12引脚的时钟信号为10MHz,而36脚的波形为0.67MHz方波信号,从而实现了 占空比50%的15分频分频器的逻辑功能。
第六章 典型数字系统设计
● 分频器; ● 交通灯控制器; ● 数字频率计; ● 数字钟电路; ● LCD接口控制电路; ● 串行口控制器; ● 2FSK/2PSK信号产生器
分频电路
分频电路是数字电路中应用十分广泛的一种单元电路。尤其在 EDA系统 中,由于 FPGA芯片外接晶振通常频率较高(如XILINX公司的 BASYS电路板的 晶振最高可产生100MHz的时钟信号),而系统中不同模块所需的工作时钟频 率一般是不同的,当所需频率小于晶振提供的频率时,就需要分频电路对晶振 提供的高频时钟频率进行降频,以获得所需的工作时钟。 目前大部分 FPGA 芯片片内集成了锁相环,如 altera的 PLL 。应用锁相 环可以很精确地对外部输入时钟进行分频与倍频,然而,其分频与倍频的 的倍数只有有限的若干种,因此一般仅用来调节主时钟频率。当设计的目 标系统要求实现特殊的分频或倍频系数时,就需要通过编写HDL程序进行 设计。
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 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;
led(2) 南北方向
led(1)
led(0)
红灯 绿灯 绿灯 红灯 黄灯 黄灯 ( 30 秒 ( 20 秒 ( 20 秒 ( 30 秒 (5秒) (5秒) ) ) ) )
交通控制灯的硬件验证
(1)确定管脚对应关系
(2)由QUARTUSII进行管脚分配
(3) 电平定义
(4)运行验证
数字频率计
频率计的基本原理是用一个频率稳定度高的频率源作为基准时 钟,对比测量其它信号的频率。通常情况下是计算每秒钟内待 测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可 以大于和小于1秒。闸门时间越长,得到的频率值就越准确,但 闸门时间长时每测一次频率的间隔就越长。闸门时间越短,测 得频率值刷新就越快,但测得的频率精度就受影响。
相关文档
最新文档