第一篇:基于FPGA的等精度频率计
光电与通信工程学院
课程设计报告书
课 设 名 称: 等精度频率计 年级专业及班级:
姓 名: 学 号:
一、课程设计目的
1、进一步熟悉 Quartus Ⅱ的软件使用方法,熟悉 keil 软件使用;
2、熟悉单片机与可编程逻辑器件的开发流程及硬件测试方法;
3、掌握等精度频率计设计的基本原理。
4、掌握独立系统设计及调试方法,提高系统设计能力。
实验设备
EDA最小系统板一块(康芯)、PC机一台、示波器一台、信号发生器一台、万用表一个。
二、设计任务
利用单片机与FPGA设计一款等精度频率计,待测脉冲的检测及计数部分由 FPGA实现,FPGA的计数结果送由单片机进行计算,并将最终频率结果显示在 数码管上。要求该频率计具有较高的测量精度,且在整个频率区域能保持恒定的 测试精度,具体指标如下:
a)具有频率测试功能:测频范围 100Hz~5MHz。测频精度:相对误差恒为基准 频率的万分之一。
b)具有脉宽测试功能:测试范围 10μs~1s,测试精度:0.1μs。c)具有占空比测试功能:测试精度1%~99%。d)具有相位测试功能。
(注:任务a 为基本要求,任务 b、c、d 为提高要求)
三、基本原理
基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低,在 实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个 频率区域能保持恒定的测试精度。
3.1 等精度测频原理
等精度频率计主控结构如图 1 所示
预置门控信号 CL 选择为 0.1~1s 之间(通过测试实验得出结论:CL 在这个
范围内选择时间宽度对测频精度几乎没有影响)。BZH 和 TF 分别是 2 个高速计数器,BZH 对标准频率信号(频率为 Fs)进行计数,设计数结果为 Ns;TF 对 被测信号(频率为Fx)进行计数,计数结果为 Nx,则有
MUX64-8 模块并不是必须的,可根据实际设计进行取舍。分析测频计测控 时序,着重分析 START的作用,完成等精度频率计设计。
3.2 FPGA 模块
FPGA模块所要完成的功能如图 1 所示,由于单片机的速度慢,不能直接测 量高频信号,所以使用高速 FPGA 为测频核心。100MHZ 的标准频率信号由 FPGA 内部的 PLL 倍频实现,待测信号 TCLK 为方波,由信号发生器给出待测 方波信号(注意:该方波信号带有直流偏置,没有负电压,幅值3.3V)。预制门控信号 CL 由单片机发出,BRNA 和 ENA 分别是 BZH 与 TF 两个计数器的计数允许信号端。FPGA 将允许计数时间内的 BZH、TF 的运行结果送入单片机进
行最后的计算。
顶层文件如下:
2以下是把20M 5倍频的设置,利用FPGA内部的PLL。
电路需要100M标准频率信号,FPGA提供20M的频率,所以需要建立PLL模块,使之五杯频,得到所需的100M信号。
功能仿真设置:
下图是波形仿真的结果:
3.3 单片机模块 单片机模块完成对整个测频系统的控制,包括对FPGA的控制以及数码管的显示控制。测频允许信号由单片机发出,并且单片机的P0 口负责循环读取FPGA发送过来的测频结果数据(BZH、TF两个计数器的计数结果,每次传送8位数据),P2负责发送控制信号,单片机可以通过结束信号了解测频记数是否结束,以确定何时开始读取数据。
附上康芯原理图截图:
四、实验现象
占空比
五、心得体会
这周课程设计的题目是等精度频率计的设计,由于书本上有一段程序,所以一开始只是将书上的程序和显示波形研究了一下。当到课程设计的时候,将书上程序敲入并实现效果后有点茫然的感觉。于是,我又仔仔细细地分析了一遍设计原理,从新改变了输入的代码,加上自己的思路,并能自己添加预置控制信息CL模块。原本我还想将测试频率显示在数码管上,但是最终没能实现,这应该是我的一个遗憾吧。设计中,我感受到了硬件描述语言的强大,我可以几乎不用考虑硬件条件,将代码导入就可实现功能。不要总想着去依靠书本上的原题或者是他人,自己思考的做出来的,才算是自己真正收获的。本次实验最大的收获莫过于,独立系统的去完成一项任务。在其中我查阅了大量的资料,尤其是数字电路、quartersⅡ软件使用说明、EDA设计等方面的资料。
通过本次学习使我对时序电路有了更深的理解,具体体现在复位、计数、锁存多环节的控制上。同时,在这次实验中,我第一次联合单片机和EDA一起完成一个项目。EDA充分的发挥其高频工作的特点,使得频率测量的上限很高。单片机则在整个系统中充当控制及数据处理的作用
设计的优点及缺点
本频率计最大优点在于它的高精度。信号频率的测量,不受闸门信号精度的影响。在被测信号送入计数器之前,先通过D触发器,使闸门信号和被测信号同步,有效地避免了±1误差。不仅如此,本频率计对100HZ至5MHZ的全域相对误差均小于百万之一。
当然,本频率计也存在缺点。在频率计的设计中,乘法器为32位,除法器采用64位,资源占用率太大。单片机处理32位数据的方式有待改进,要是它变得更优化
六、系统设计步骤及程序,结果
FPGA: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY EQUALFRECOUNT IS PORT(BCLK,TCLK:IN STD_LOGIC;
DATA_OUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
EN:IN STD_LOGIC;
ADDRESS:IN STD_LOGIC_VECTOR(3 DOWNTO 0));END EQUALFRECOUNT;
ARCHITECTURE ARCH OF EQUALFRECOUNT IS SIGNAL EN2,WIDE_TEST:STD_LOGIC;SIGNAL WIDE_COUNT,B_COUNT,T_COUNT:STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL SAVE_WIDE,SAVE_B,SAVE_T:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN
PROCESS(EN,TCLK)BEGIN IF RISING_EDGE(TCLK)THEN
EN2<=EN;ELSE NULL;END IF;END PROCESS;PROCESS(EN2,TCLK,BCLK)BEGIN
IF EN2='1' THEN IF RISING_EDGE(TCLK)THEN
IF T_COUNT=X“FFFF_FFFF” THEN
T_COUNT<=(OTHERS=>'1');
ELSE T_COUNT<=T_COUNT+1;
SAVE_T<=T_COUNT+1;--SAVE T_COUNT
END IF;ELSE NULL;END IF;IF FALLING_EDGE(TCLK)THEN
IF WIDE_TEST='0' THEN
WIDE_COUNT<=B_COUNT;
WIDE_TEST<='1';
ELSE SAVE_WIDE<=WIDE_COUNT;--SAVE WIDE_COUNT
END IF;END IF;IF RISING_EDGE(BCLK)THEN
IF B_COUNT=X“FFFF_FFFF” THEN
B_COUNT<=(OTHERS=>'1');
ELSE B_COUNT<=B_COUNT+1;
SAVE_B<=B_COUNT+1;--SAVE B_COUNT IN SAVE_B
END IF;ELSE NULL;END IF;ELSE--WHEN ENA=0,WE OUTPUT THE DATA AND RESET THE COUNTER.WIDE_COUNT<=(OTHERS=>'0');B_COUNT<=(OTHERS=>'0');T_COUNT<=(OTHERS=>'0');WIDE_TEST<='0';END IF;END PROCESS;PROCESS(ADDRESS,EN2,SAVE_T,SAVE_B,SAVE_WIDE,BCLK)BEGIN IF RISING_EDGE(BCLK)THEN
IF EN2='0' THEN
--USE SOME CONSTANTS TO TEST
CASE ADDRESS IS
WHEN X“0”=>DATA_OUT<=SAVE_T(7 DOWNTO 0);
WHEN X“1”=>DATA_OUT<=SAVE_T(15 DOWNTO 8);
WHEN X“2”=>DATA_OUT<=SAVE_T(23 DOWNTO 16);
WHEN X“3”=>DATA_OUT<=SAVE_T(31 DOWNTO 24);
WHEN X“4”=>DATA_OUT<=SAVE_B(7 DOWNTO 0);
WHEN X“5”=>DATA_OUT<=SAVE_B(15 DOWNTO 8);
WHEN X“6”=>DATA_OUT<=SAVE_B(23 DOWNTO 16);
WHEN X“7”=>DATA_OUT<=SAVE_B(31 DOWNTO 24);
WHEN X“8”=>DATA_OUT<=SAVE_WIDE(7 DOWNTO 0);
WHEN X“9”=>DATA_OUT<=SAVE_WIDE(15 DOWNTO 8);
WHEN X“A”=>DATA_OUT<=SAVE_WIDE(23 DOWNTO 16);
WHEN X“B”=>DATA_OUT<=SAVE_WIDE(31 DOWNTO 24);
WHEN OTHERS=>NULL;
END CASE;
ELSE NULL;
END IF;ELSE NULL;END IF;END PROCESS;END ARCH;
单片机:
/* *.c文件,文件名:EqualFre_main.c *各模块的流程控制*/ #include “EqualFre_main.h” int main(void){
} //数据载入
static void loadData(){
fre = getFre_Ex();wide = getWide_Ex();duty = getDuty_Ex();
communicationInit_Ex();while(1){
} mode = getMode_Ex();askForData_Ex();} disData();
//数据显示 loadData();
//确定选择的模式
//请求数据
//表示没有固定数据时,则载入数据 if(HOLD_DATA_MODE!= mode){ } /*************************************** 数据显示中:
wData(uchar)传入的参数意义 0 19 跟了点号的0-9 20 暗选
***************************************/ static void disDelay(){ //显示延时
} //数据显示--总控 static void disData(){
} /*static void disFre(){
} static void disWide(){
} static void disDuty(){
}*/ //数据显示--显示频率,单位Hz或MHz(双模式)
static void disFre(){
uchar data dataTemp[8],i;ulong data freTemp = fre;//为了显示1位小数,这里已经将频率扩大10倍 uchar data flag = 0;//消零标志位
if(1000000 <= freTemp){//当频率值大于1M时,使用兆显示模式 uchar data i;for(i=0;i<8;i++)wData_Ex(3);uchar data i;for(i=0;i<8;i++)wData_Ex(2);uchar data i;for(i=0;i<8;i++)wData_Ex(1);switch(mode){ case SHOW_FRE_MODE: case SHOW_DUTY_MODE: default:break;}
disFre();disDelay();break;
disDelay();break;
disDuty();disDelay();break;case SHOW_WIDE_MODE: disWide();
uchar data x,y;for(x=250;x>0;x--)for(y=50;y>0;y--);
}
} freTemp /= 100000;//0.00MHz for(i=2;i<8;i++){//数据从低位到高位装入数据暂存器dataTemp,这里保留2位,} dataTemp[4] += 10;//取2位小数,这里是加入小数点 dataTemp[1] = 21;//n dataTemp[0] = 22;//H dataTemp[i] =(uchar)(freTemp%10);freTemp /= 10;用于显示nH(即MHz)else{
} for(i=1;i<8;i++){
} dataTemp[2] += 10;dataTemp[0] = 22;//H } dataTemp[i] =(uchar)(freTemp%10);freTemp /= 10;for(i=0;i<8;i++){//数据从高位到低位显示,并进行高位消零操作
if(0!= dataTemp[7-i]){ } if((0==dataTemp[7-i])&&(0==flag)){ } wData_Ex(dataTemp[7-i]);
//显示数据 dataTemp[7-i] = 20;flag = 1;//数据显示--显示脉宽,单位us,意味着最大只能测1MHz的频率 static void disWide(){
uchar data dataTemp[8],i;ulong data wideTemp = wide;uchar data flag = 0;for(i=0;i<8;i++){
} for(i=0;i<8;i++){//数据从高位到低位显示,并进行高位消零操作
if(0!= dataTemp[7-i]){ } dataTemp[1]|=10;if((0==dataTemp[7-i])&&(0==flag)){ dataTemp[7-i] = 20;flag = 1;dataTemp[i] =(uchar)(wideTemp%10);wideTemp /= 10;
}
} } wData_Ex(dataTemp[7-i]);//数据显示--显示占空比 static void disDuty(){
} /* *.h文件,文件名:EqulaFre_SGMDisplay.h *SGM显示模块,用于显示由主程序传过来的数据
*硬件资源:
*/ #ifndef _EQUALFRE_SGMDISPLAY_H_H_ #define _EQUALFRE_SGMDISPLAY_H_H_ #include
};//接口函数
void wData_Ex(uchar);#endif /*
//在数码管上显示数据
//164数据端
static uchar code num[] = {//从低位到高位,高电平有效
0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,//数字0-9 0xfd,0x61,0xdb,0xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7,//带点号的0-9 0x00,0x2a,0x6e//暗选,n,h 164时钟端--P3.1 164数据端--P3.0 uchar data dataTemp[4],i;uint data dutyTemp = duty;for(i=0;i<4;i++){
} dataTemp[i] =(uchar)(dutyTemp%10);dutyTemp /= 10;
dataTemp[2] += 10;wData_Ex(20);//补4个暗选 wData_Ex(20);wData_Ex(20);wData_Ex(20);for(i=0;i<4;i++){ } wData_Ex(dataTemp[3-i]);*.c文件,文件名:EqualFre_SGMDisplay.c */ #include “EqualFre_SGMDisplay.h” //接口函数
void wData_Ex(uchar index){ uchar data i,byte;byte = num[index];for(i=0;i<8;i++){
sgm_clk = 0;
sgm_data =(bit)((byte>>i)&0x01);
_nop_();
sgm_clk = 1;
_nop_();} } /* *.c文件,文件名:EqualFre_modeFromKey.c */ #include “EqualFre_modeFromKey.h” //**************内部函数************ //按键检测延时 static void keyDelay(){ uchar data x,y;for(x=100;x>0;x--);for(y=200;y>0;y--);} //按键扫描
static void keyScan(){
if(0 == Key_Mode){
keyDelay();
if(1 == Key_Mode)return;
switch(mode){
case SHOW_FRE_MODE:
mode = SHOW_WIDE_MODE;
break;
case SHOW_WIDE_MODE:
mode = SHOW_DUTY_MODE;
break;
case SHOW_DUTY_MODE:
mode = SHOW_FRE_MODE;
break;
default:
mode = SHOW_FRE_MODE;break;
//选择模式
//测频率
//下一次测的是脉宽
//测脉宽
//下一次测的是占空比
//测占空比
//下一次测的是频率
}
} } while(0 == Key_Mode);keyDelay();
if(0 == Key_Hold_Data){
} keyDelay();if(1 == Key_Hold_Data)return;mode = HOLD_DATA_MODE;while(0 == Key_Hold_Data);keyDelay();
//按下 Key_Hold_Data,即为P1^1时,数据保持不变
//*******************接口函数************** uchar getMode_Ex(void){
} /* *.h文件,文件名:equalFre.h *模式控制模块,通过键盘来控制模式的选择,并将所选模式传递给函数
*所使用的硬件资源:
频率显示、脉宽显示、占空比显示的切换建---P1.0
测试值保持键--P1^1 */ #ifndef _EQUALFRE_MODEFROMKEY_H_H_ #define _EQUALFRE_MODEFROMKEY_H_H_ #include
static void keyDelay();static void keyScan();//接口函数
uchar getMode_Ex(void);#endif /* *.h文件,文件名:EqulaFre_communication.h
//在数码管上显示数据
//按键检测延时
//按键扫描
//实现频率显示,脉宽显示,占空比显示的转化
sbit Key_Hold_Data = P1^1;
//将测得的数值定住 keyScan();return mode;
//返回mode,确定选择的模式 *通信模块,用于和FPGA通信,获取频率、脉宽、占空比的原始数据。
*并将处理好数据传给主程序
*所使用的硬件资源:
地址线0---P2.0
地址线1---P2.1
地址线2---P2.2
地址线3---P2.3
测频标志位---P2.4
数据线----P0
定时器T0 */ #ifndef _EQUALFRE_COMMUNICATION_H_H_ #define _EQUALFRE_COMMUNICATION_H_H_ #include
static ulong getSourceData(uchar);//接口函数
void communicationInit_Ex(void);void askForData_Ex(void);ulong getFre_Ex(void);ulong getWide_Ex(void);uint getDuty_Ex(void);
#endif /* *.c文件,文件名:EqualFre_communication.c */ #include “EqualFre_communication.h”
//请求数据
//计算频率值
//计算脉宽值
//计算占空比
//从FPGA中获得基准信号,被测信号的数据 //从FPGA那里获得频率、脉宽、占空比的原始值 static ulong getSourceData(uchar sourceKind){
address3 = 0;address2 = 1;address1 = 1;address0 = 1;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte3 = DATA_IN;break;address3 = 1;address2 = 0;address1 = 0;address0 = 0;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte0 = DATA_IN;
address3 = 0;address2 = 1;address1 = 1;address0 = 0;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte2 = DATA_IN;
address3 = 0;address2 = 1;address1 = 0;address0 = 1;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte1 = DATA_IN;
address3 = 0;address2 = 0;address1 = 1;address0 = 1;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte3 = DATA_IN;break;address3 = 0;address2 = 1;address1 = 0;address0 = 0;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte0 = DATA_IN;
address3 = 0;address2 = 0;address1 = 1;address0 = 0;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte2 = DATA_IN;uchar data byte0,byte1,byte2,byte3;ulong data temp = 0;byte0 = byte1 = byte2 = byte3 = 0;switch(sourceKind){ case 1://被测信号T值
address3 = 0;address2 = 0;address1 = 0;address0 = 0;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte0 = DATA_IN;
address3 = 0;address2 = 0;address1 = 0;address0 = 1;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte1 = DATA_IN;case 2://基准信号B值
case 3://脉宽W值
} //20MHz,25ms void t0()interrupt 1{
} /*********************************************接口函数********************** ****定义了传向主函数的频率、脉宽、占空比的值 ****接收来自主函数的请求 */ //通信模块初始化
void communicationInit_Ex(void){
IE |= 0x82;TMOD = 0x01;TH0 = MY_TH0;TL0 = MY_TL0;TR0 = 1;TEST_EN = 1;//允许测频 static uchar data count;TH0 = MY_TH0;TL0 = MY_TL0;count++;if(FREE_TIME == count){//测频时间 FREE_TIME *50ms } if(2*FREE_TIME == count){
} TEST_EN = 1;count = 0;TEST_EN = 0;
} temp = byte0 + byte1*256 + byte2*65536 + byte3*256*65536;//转化为十进制 return temp;address3 = 1;address2 = 0;address1 = 1;address0 = 1;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte3 = DATA_IN;break;
address3 = 1;address2 = 0;address1 = 1;address0 = 0;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte2 = DATA_IN;
address3 = 1;address2 = 0;address1 = 0;address0 = 1;_nop_();_nop_();_nop_();_nop_();//FPGA反应时间 byte1 = DATA_IN;default:break;} //数据请求
void askForData_Ex(void){ //
小数
fre = T;wide = B;duty =(uint)W;wide=W;/*tmp = BASE_FRE *(double)T;tmp=tmp/(double)B;fre =(long int)tmp;tmp =(double)W+(double)duty;ulong data B,T,W;double tmp;if(0 == TEST_EN){
T = getSourceData(1);B = getSourceData(2);W = getSourceData(3);if(0 == B)B = 1;fre=(ulong)(T/(0.1*B)*BASE_FRE);//频率先扩大10倍,即分母乘以0.1,以保留一wide=(ulong)(0.1*W);//脉宽单位us duty=(uint)(W*T/(0.0001*B));//占空比以百分数显示,并扩大100倍,以保留2位
//被测信号的周期数
//基准信号的周期数
//脉宽的周期数
位小数 ,单位hz
tmp =(double)W /tmp;
tmp = tmp*100;
duty=(long int)(tmp+0.5);
} ulong getFre_Ex(void){ } ulong getWide_Ex(void){ } uint getDuty_Ex(void){ } return duty;
//返回测量的占空比 return wide;
//返回测量的脉宽值 return fre;
//返回测量的频率值
} wide=W;tmp=B*(double)T;tmp=tmp/(double)B;fre=(long int)tmp;*/
第二篇:频率计(格式)数字逻辑
课程设计任务书
(指导教师填写)
课程设计名称 电子技术课程设计 学生姓名
专业班级
设计题目
简易数字频率计
一、课程设计的任务和目的
任务: 设计一个简易数字频率计,用来测量单位时间内数字信号的脉冲个数,并用数码管显示出来。
目的:
掌握简易数字频率计的设计、组装、调试方法。掌握有关集成电路的工作原理。
二、设计内容、技术条件和要求
1.设计简易数字频率计:
⑴.设计一个简易数字频率计,用于测量数字信号的频率并显示,用一个开关控制频率计的起动和停止,并可对频率计置数。
⑵.测频范围为0.1Hz到9999Hz。
⑶.测量所需时基时间可调,分1秒和10秒两档。
⑷.能连续循环测量显示,若用1秒档时要求6秒完成一个循环,其中1秒计数测量;4秒显示结果;1秒清零。然后依次循环。
2.根据上述要求,画出电路框图、原理总图。3.对原理图进行仿真。4.在实验箱上组装、调试。5.撰写设计总结报告。
三、时间进度安排
本课程设计共两周时间。第一周:理论设计
周二
布置设计任务;提出课程设计的目的和要求;讲解电子电路的一般设计方法和电子电路的安装、调试技术;明确对撰写总结报告和绘制原理总图的要求;安排答疑、实验时间。
周二至周五
学生查资料,进行理论设计,其中安排三次答疑,指导学生设计。第二周:仿真和安装调试、撰写设计总结报告 周一
交设计草图供老师审阅。
周二至周三
在EDA实验室对其设计的电路进行仿真,并可根据仿真情况修正设计以确定设计正确,能完成设计要求。周三至周四
在实验箱上进行安装、调试,并通过老师验收。最后,撰写设计总结报告、绘制原理总图。
四、主要参考文献
1.各种版本的数字电子技术基础教材; 2.各种版本的电子技术课程设计指导书;
3.集成电路手册。
指导教师签字:
2013 年12月 16 日
第三篇:精度报告材料
尔林兔中学禁绝毒品教育
汇报材料
我们崇德中学自2205年以来,始终坚定不移地把德育工作摆在素质教育的首要位置,坚持以德治校,以德育人。而在日常行为规范教育中,又始终把禁毒教育放在非常重要的地位上,并严抓不懈。
学校严格遵循中共中央宣传部、公安部、教育部、司法部、共青团中央、全国妇联等十一部委关于《全民禁毒教育实施意见》和教育部、国家禁毒委等联发的《关于进一步加强中小学生毒品预防教育工作的通知》及市、县学校禁毒教育工作考核评分标准等文件精神,积极有效地开展各种形式的禁毒预防教育活动。目前,全校师生正为使我校“禁毒教育”活动取得新成效、更上新台阶而不懈努力。
现将我校近来开展禁毒预防教育活动的一些做法和探索汇报如下:
一、健全组织,制定措施,加强禁毒教育的统一领导
为了加强学校禁毒教育的组织管理,建立长效管理机制,学校成立了以校长李建功同志为组长,分管副校长邵青峰和法制校长张易为副组长,政教主任和团支部书记为骨干,其他各部门负责人和各班班主任为组员的学校禁毒教育活动领导小组,使各项活动有组织、有计划、有落实、有实效。同时制定了相关的制度和措施,具体落实禁毒工作。
二、加强宣传,真抓实干,营造良好浓厚的禁毒氛围
1、利用各种媒体和载体广泛宣传。禁毒工作是一项复杂的社会系统工程,宣传工作是禁毒教育的关键环节。充分发挥自身优势,在上级部门的大力支持下,充分利用集会、广播、报刊、图书、板报、校园网、书信等宣传阵地和手段,动员全体师生,广泛宣传毒品给我国造成的历史灾难以及对社会、家庭和个人造成的严重危害,积极宣传禁毒工作面临的形势和重大意义,形成了强大的禁毒宣传声势。
2、利用节假日和重大活动进行宣传。经常性宣传与重大宣传相结合,在“6·3”虎门销烟、“6·26”国际禁毒日等重要纪念日,立足校园,广泛开展了演讲、竞赛、“珍爱生命,远离毒品”大型签名等多种形式的活动,掀起了“远离毒品”活动高潮,在校园及周边村镇营造了良好的防毒、禁毒氛围。
3、利用多媒体,以“中国禁毒网”网站为载体,丰富禁毒宣传教育渠道。网站内设法律法规、专家咨询、禁毒知识、禁毒论坛等10余个子栏目。在电脑课上正确引导学生拒绝毒品,回答拒毒、防毒的有关问题,就青少年吸毒、如何拒绝毒品诱惑等问题开展了专题讨论。网络载体的运用,进一步丰富了青少年禁毒宣传教育的渠道,有效地扩大了禁毒宣传教育的作用面,有力地加强了预防青少年吸毒工作的社会影响力。
三、广拓渠道,就地取材,开展丰富多彩的禁毒教育活动
1、禁毒知识与学科教学整合。学科教学是毒品预防教育的主渠道,在学科中渗透禁毒教育是充分发挥主渠道作用的重要途径。我校本着先易后难的原则,在每学期每班不少于6节禁毒课的基础上,利用现有学科资源,结合毒品的产地、毒品的危害、中国禁毒的光荣历史以及相关禁毒法律法规等内容,在地理、心理健康教育、历史、思想政治等学科中进行毒品预防教育知识的渗透,使毒品预防教育渗透到日常的教育教学中,成为学校素质教育的一个抓手,成为学校课程改革的一个重要环节。
2、禁毒教育与学生日常行为规范教育结合。我校始终将毒品预防教育列入学校行为规范教育当中,并在行规教育中要加大禁毒教育的力度,引导学生交友谨慎,不盲目猎奇,不涉足电脑网吧等未成年人禁入场所,养成健康、文明的生活习惯。
3、禁毒教育与学校法制教育整合。法制教育是毒品预防教育的重要途径,是减少乃至杜绝青少年吸毒的有力屏障。为了使禁毒教育与学校法制教育整合,我们做了以下几方面的工作:
第一,通过师生互动教育活动、集中授课等形式,帮助青少年掌握禁毒法律法规; 第二,我校每学期还专门聘请龙口镇派出所干警——我校法制副校长张易对学生进行法制讲座,现场解答学生疑难,为学生指点迷津。取得了很好的效果,得到了家长的一致好评。
第三,与班主任签订了《班级安全、法制和禁毒教育工作责任书》,将禁毒教育工作的法律义务责任到班、责任到人。
4、禁毒教育与中学生心理健康教育结合。学校政教处、团支部联合个班班主任老师结合学生实际情况,开设了以“珍爱生命,远离毒品”为主题的心理健康讲座,引导学生们通过查阅、展示资料,了解学生家长及亲属吸毒现状,讨论分析青少年吸毒的原因及其危害性,增强禁毒、拒毒意识。并依据健康教育课开设“青春期专题讲座”,分析吸毒对青少年的身心影响,在全校范围内进行了毒品预防宣传教育。让学生通过实践活动内化了学校的毒品知识教育,自觉形成了禁毒意识。
5、禁毒教育与家长学校和家庭教育整合。让家庭教育成为青少年毒品预防教育的基础阵地,在家庭中进行毒品预防教育有着许多优势。为了使家庭教育与学校毒品预防教育保持一致性,发挥家庭教育作为毒品预防教育的“主战场”作用,我们通过家长会、致学生家长一封信和校信通等形式,组织家长接受禁毒教育,帮助家长掌握有关禁毒知识和教育子女拒绝毒品、远离毒品的方法,要求家长以其特殊而有效的身份影响子女拒绝毒品、远离毒品,力争禁毒教育的实效性。
6、切实做好“六个一”活动。
第一,上好一堂禁毒教育课,学校要求各班利用班会课上一节禁毒教育课;各班主任都能积极通过上网或看书查找资料,认真备课,以生动形象的语言进行授课,切实让学生了解毒品形势和国家有关禁毒法律法规。
第二,看一部宣传片,统一组织学生观看“拒绝毒品、关爱未来”专题宣传教育片,让师生们更深刻地认识到禁毒的重要性和当前形势的严峻性;
第三,读好一本书,各班认真组织学生学习《禁毒教育》读本,让学生切实掌握毒品知识和国家对禁毒的法律法规;
第四,参观一次挂图展览,上半年,我们于“6.26”国际禁毒日期间,组织全校学生参观禁毒图片展一次,下半年,我们于12月初组织全校学生参观禁毒图片展一次;
第五,开辟一期内容丰富的禁毒墙报、橱窗、专栏;第六,组织一次大型禁毒教育主题活动,如禁毒知识竞赛、黑板报评比、大型签名、拒绝毒品书法美术作品展等。
四、常抓不懈,注重实效,春华秋实见成效
近年来,通过我校全体师生的共同努力,圆满实现了“两个一”目标:①全校学生接受禁毒知识教育面达100%;②在校学生无涉毒行为面达100%,全校师生预防毒品的知识和意识普遍提高。学校的毒品预防工作深受学生家长和社会各界的称赞。同时,学校优良的校风带动着周边村镇的精神文明建设,对周边村民的精神文明建设水平的提升具有明显推动作用。
五、不断努力,总结经验,为禁毒工作再做新贡献
禁毒工作是一项复杂的社会系统工程。我们在实践工作中也碰到诸多的困难,同时我们也在进行着禁毒预防教育新途径、新方式的思考和探索,以求得更大、更好的禁毒教育成效。禁绝毒品,功在当代,利在千秋。今后,我们将进一步探索并实践更多形式的禁毒教育活动,扎扎实实做好中学生毒品预防教育工作,为将我校禁毒教育工作长期有效地开展下去而不懈努力,为优化青少年成长环境,维护社会稳定作出新的更大的贡献。
第四篇:VHDL课程设计报告 频率计
目录
1.前言...........................................................................................................................2 2.设计要求...................................................................................................................2 3.整体设计..................................................................................................................3 4.设计原理...................................................................................................................3 5.设计程序...................................................................................................................3
5.1顶层文件.............................................................................................................3 5.2 8位是进制计数器..............................................................................................4 5.3 10进制计数器...................................................................................................5 5.4 测频控制电路.....................................................................................................6 5.5 32位锁存器及其控制器.....................................................................................6
6.引脚锁定...................................................................................................................8 7.综合结果...................................................................................................................8
7.1 RTL电路.............................................................................................................8 7.2 测频控制电路.....................................................................................................9 7.3 8位十进制计数器..............................................................................................9 7.3 32位锁存器......................................................................................................9
8.实验结果.................................................................................................................10 7.实验总结...................................................................................................................10 参考文献......................................................................................................................12
自适应数字频率计数器设计
1.前言
传统的数字频率计一般是由分离元件搭接而成,用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差大、可靠性差。后来随着单片机的大规模的应用, 出现了不少用单片机控制的频率测量系统。相对于以前用分离元件搭接起来的频率测量系统, 单片机控制的频率测量系统在频率测量范围、频率测量精度和频率测量速度上都有了很大的提高。但由于单片机工作频率的限制、单片机内部计数器位数的限制等因素, 由单片机控制的频率测量系统无法在频率测量范围、频率测量精度和频率测量速度上取得重大突破。若再增加别的器件, 以弥补单片机的不足, 不仅会大大增加系统的复杂性, 而且不利于系统的集成化。以E D A 工具作为开发平台,运用V H D L 语言,将使整个系统大大简化,从而提高整体的性能和可靠性。本课题采用的是等精度数字频率计,在一片FPGA开发板里实现了数字频率计的绝大部分功能, 它的集成度远远超过了以往的数字频率计。又由于数字频率计最初的实现形式是用硬件描述语言写成的程序, 具有通用性和可重用性。所以在外在的条件(如基准频率的提高, 基准频率精度的提高)的允许下,只需对源程序作很小的改动, 就可以使数字频率计的精度提高几个数量级。同时对于频率精度要求不高的场合, 可以修改源程序, 使之可以用较小的器件实现, 从而降低系统的整体造价。
2.设计要求
设计一个频率计,频率测量范围为1-9999KHZ,量程分别为10、100、1M三档,要求如下: a.当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增大1档 b.当读数小于099时,频率计处于欠量程状态,下一次测量时,量程自动减小1档
c.当超过频率范围时,显示器自动溢出
3.整体设计
当被测频率进入时候,档位1、2能自动换挡实现功能,在档位1中,有一个LED灯亮(表示Hz);档位2中有2个LED灯亮(表示kHz);当计数频率超出9999kHz的时候,显示“E”而且LED灯全部熄灭,表示溢出功能。在程序代码中,必须要清晰表示出计数的运行状况。
档位1:当被测频率为0—9999Hz时候,直接显示f x的值(单位为Hz); 档位2:当被测频率为10k—9999kHz时候,显示10-9999(单位kHz);
4.设计原理
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1 秒的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生。
5.设计程序
5.1顶层文件
LIBRARY IEEE;--频率计顶层文件 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQTEST IS PORT(CLK1HZ : IN STD_LOGIC;FSIN : IN STD_LOGIC;DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LED : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END FREQTEST;ARCHITECTURE struc OF FREQTEST IS COMPONENT FTCTRL PORT(CLKK : IN STD_LOGIC;--1Hz CNT_EN : OUT STD_LOGIC;--计数器时钟使能 RST_CNT : OUT STD_LOGIC;--计数器清零 Load : OUT STD_LOGIC);--输出锁存信号 END COMPONENT;COMPONENT COUNTER PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));--计数结果 END COMPONENT;COMPONENT REG32B PORT(LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END COMPONENT;SIGNAL TSTEN1 : STD_LOGIC;SIGNAL CLR_CNT1 : STD_LOGIC;SIGNAL Load1 : STD_LOGIC;SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0);BEGIN U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1, RST_CNT =>CLR_CNT1,Load =>Load1);U2 : REG32B PORT MAP(LK => Load1, DIN=>DTO1, DOUT => DOUT,LEDOUT=>LED);
U3 : COUNTER PORT MAP(FIN => FSIN, CLR => CLR_CNT1, ENABL => TSTEN1, DOUT=>DTO1);END struc;
5.2 8位是进制计数器
LIBRARY IEEE;--8位十进制计数器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER IS PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));--计数结果 END COUNTER;ARCHITECTURE behav OF COUNTER IS
COMPONENT COUNTER10 IS PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数结果 COUT : OUT STD_LOGIC);END COMPONENT;
SIGNAL CLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7: STD_LOGIC;BEGIN u1 : COUNTER10 PORT MAP(FIN=>FIN,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(3 DOWNTO 0),COUT=>CLK1);u2 : COUNTER10 PORT MAP(FIN=>CLK1,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(7 DOWNTO 4),COUT=>CLK2);u3 : COUNTER10 PORT MAP(FIN=>CLK2,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(11 DOWNTO 8),COUT=>CLK3);u4 : COUNTER10 PORT MAP(FIN=>CLK3,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(15 DOWNTO 12),COUT=>CLK4);u5 : COUNTER10 PORT MAP(FIN=>CLK4,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(19 DOWNTO 16),COUT=>CLK5);u6 : COUNTER10 PORT MAP(FIN=>CLK5,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(23 DOWNTO 20),COUT=>CLK6);u7 : COUNTER10 PORT MAP(FIN=>CLK6,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(27 DOWNTO 24),COUT=>CLK7);u8 : COUNTER10 PORT MAP(FIN=>CLK7,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(31 DOWNTO 28));
END ARCHITECTURE behav;
5.3 10进制计数器
LIBRARY IEEE;--10位计数器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER10 IS PORT(FIN : IN STD_LOGIC;--时钟信号 CLR : IN STD_LOGIC;--清零信号 ENABL : IN STD_LOGIC;--计数使能信号
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--计数结果 COUT : OUT STD_LOGIC);END COUNTER10;ARCHITECTURE behav OF COUNTER10 IS SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(FIN, CLR, ENABL)BEGIN IF CLR = '1' THEN CQI <=(OTHERS=>'0');--清零 ELSIF FIN'EVENT AND FIN = '1' THEN IF ENABL = '1' THEN IF CQI<9 THEN CQI <= CQI + 1;ELSE CQI <=(OTHERS=>'0');END IF;END IF;END IF;
IF CQI=“1001” THEN COUT<='1';ELSE COUT<='0';END IF;END PROCESS;DOUT <= CQI;END behav;
5.4 测频控制电路
LIBRARY IEEE;--测频控制电路 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS PORT(CLKK : IN STD_LOGIC;--1Hz CNT_EN : OUT STD_LOGIC;--计数器时钟使能 RST_CNT : OUT STD_LOGIC;--计数器清零 Load : OUT STD_LOGIC);--输出锁存信号 END FTCTRL;ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC;BEGIN PROCESS(CLKK)BEGIN IF CLKK'EVENT AND CLKK = '1' THEN--1Hz时钟2分频 Div2CLK <= NOT Div2CLK;END IF;END PROCESS;PROCESS(CLKK, Div2CLK)BEGIN IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';--产生计数器清零信号 ELSE RST_CNT <= '0';END IF;END PROCESS;Load <= NOT Div2CLK;CNT_EN <= Div2CLK;END behav;
5.5 32位锁存器及其控制器
LIBRARY IEEE;--32位锁存器及控制器 USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG32B IS PORT(LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);LEDOUT : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END REG32B;ARCHITECTURE behav OF REG32B IS SIGNAL DD : STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN
PROCESS(LK, DIN)BEGIN IF LK'EVENT AND LK = '1' THEN DD<=DIN;END IF;if DD(31 DOWNTO 28)=“0000” then IF DD(27 DOWNTO 16)=“000000000000” THEN DOUT<=DD(15 DOWNTO 0);LEDOUT<=“01”;ELSIF DD(27 DOWNTO 16)/=“000000000000” THEN DOUT<=DD(27 DOWNTO 12);LEDOUT<=“11”;end if;else DOUT(15 DOWNTO 0)<=“***0”;LEDOUT<=“00”;END IF;END PROCESS;END behav;
6.引脚锁定
7.综合结果
7.1 RTL电路
7.2 测频控制电路
7.3 8位十进制计数器
7.3 32位锁存器
8.实验结果
当计数频率为4Hz(范围在0-9999Hz)的时候,此时LED灯有一个亮,计数为:0004;当计数频率为500KHz(范围在10K-9999KHz)的时候,此时设定两个LED灯都亮,计数为0500;当计数频率大于9999KHz的时候,设定此时两个LED灯都处于熄灭状态,而计数则输出一个‘E’值,表示范围超出计数范围。
7.实验总结
经系统测试表明,本图频率计的各项功能正常,能实现对频率的0~9999kHz频率范围的测量,并通过LED指示和数码管显示,操作简单,是理想频率计解决方案。
经过一个多星期的努力,本设计系统终于完成了。通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了VHDL程序开发的总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
课程设计中的电路和程序比较复杂,因此调试的过程更是考验我们耐性和细心。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对VHDL语言和FPGA有了更深的认识,操作能力有了一定的提高。明白了,要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。
参考文献
[1] 潘松、黄继业,EDA技术应用教程 VHDL篇[J].北京:高等教育出版社.2010
[2] 徐成刘彦李仁发,一种全同步数字频率测量方法的研究[J].北京:高等教育出版社.2004 [3] 李云鹏王思明,基于FPGA 的等精度频率计设计[J].北京:高等教育出版社.2007
第五篇:FPGA常用术语
标题:FPGA常用术语
2010-05-13 11:16:29
FPGA常用术语
1:LCA(Logic Cell Array):逻辑单元阵列,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。
2: IOB(Input Output Block):可编程输入输出单元,为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同。只有相同电气标准的端口才能连接在一起,VCCO电压相同是接口标准的基本条件。
3:CLB(Configurable Logic Block):可配置逻辑模块,是FPGA内的基本逻辑单元,每个CLB都包含一个可配置开关矩阵,此矩阵由4或6个输入、一些选型电路(多路复用器等)和触发器组成。在赛灵思公司公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的Slice和附加逻辑构成。
4:Slice:是赛灵思公司公司定义的基本逻辑单位,一个Slice由两个4输入的函数、进位逻辑、算术逻辑、存储逻辑和函数复用器组成。
5:LUT(Look-Up-Table):查找表。本质上就是一个RAM,目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的 的RAM。
6:DCM(数字时钟管理模块):提供数字时钟管理和相位环路锁定。
7:BRAM(嵌入式块RAM):块RAM可被配置为单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。单片块RAM的容量为18k比特,即位宽为18比特、深度为1024,可以根据需要改变其位宽和深度,但要满足两个原则:首先,修改后的容量(位宽 深度)不能大于18k比特;其次,位宽最大不能超过36比特。当然,可以将多片块RAM级联起来形成更大的RAM,此时只受限于芯片内块RAM的数量,而不再受上面两条原则约束。