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