 
         
         
         
         
        
            已阅读5页,还剩1页未读,            继续免费阅读
        
        
                版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
            日志档案发表于 2010/5/17 23:45:37标签: 无标签Verilog频率计(低频)小弟最近弄了个频率计,主要测量工频50的。代码附在下边。下面的代码,功能实现了,通过了modelsim仿真,实际测试也成功。还是存在一些问题,不是功能上的,而是实现方法上了,我总感觉我的这个设计肯定不是最好的,有一些除法,还有十进制书转化成BCD码的问题还须要很大的优化。但是小弟,刚学FPGA,一些问题也搞不清楚,。就发在网上,分享一下,也让大家指正一下。/ Description 测量频率(工频50HZ 13 59.9HZ)/ Create Date: 2010- 05 -17/ Engineer: 张书腾/ Module Name: frequency/nate:该设计只是适用于50HZ左右的频率测量,采用的是测周发module frequency(clk, rst_n, fre,sm_bit, segment);input clk; /50M系统时钟input rst_n; /异步复位端input fre;/频率输入端output 3:0 sm_bit;/数码管位码output7:0 segment; /数码管位码reg 3:0 sm_bit;/数码管位码寄存器reg 7:0 segment;/数码管位码寄存器/标准信号 F=100K,测周/reg 9:0count;/100K时钟分频计数器 always (posedge clk or negedge rst_n)beginif(!rst_n)count = 1b0;elseif(count 10d499)count = count+1b1;elsecount = 1b0;endreg clk_100K;/100K时钟输出寄存器always (posedge clk or negedge rst_n)begin if(!rst_n) clk_100K = 1b0; else if(count=249) /时钟的占空比为50% clk_100K = 1b0; else clk_100K = 1b1; end / /待测频率进行2分频,2分频后,就可以只计二分频后信号的高电平或低电平 /就可以了,如果不2分频,只记高电平或低电平的话,信号的占空比不同会导致结果不准确 reg fre_2;always (posedge fre or negedge rst_n)begin if(!rst_n) fre_2 = 1b0; else if(fre) fre_2 = fre_2;/2分频end/测周计数模块,计2分频后的待测频的高电平或低电平/ /相当于在待测频率的整个周期内计数/reg 12:0 cnt;/计数寄存器/由于位宽的限制,最大计数值8192,所以测低频(低于14时会出错)always (posedge clk_100K or negedge rst_n)beginif(!rst_n)begin cnt = 13d0;endelse if(!fre_2) /低电平计数cnt = cnt + 1b1;elsebegincnt = 13d0;/不为低电平时清零endend/锁存信号,上升沿有效/reg load;always (posedge fre_2 or negedge rst_n)beginif(!rst_n)beginload = 1b0;endelse load = load;/产生上升沿end/reg 12:0 cnt_r;/存储锁存的值always (posedge load)/load上升沿锁存begin cnt_r = cnt;/将计数值锁存 end/数据处理单/reg 23:0 temp; /暂存数据/(将一个十进制的四位数各个位取出),fre_r 中的数为实际频率是100倍,是为了后面的计算方便always (posedge clk or negedge rst_n)if(!rst_n)beginfre_r = 13d0;endelsebegintemp = (24d10000000)/cnt_r;/fre_r=(1/(10us * cnt_r ))*100实际频率扩大100倍 /采用了一个除法运算符,不清楚效率如何,但是能工作fre_r = temp12:0; /取出低位消除警告/end/ reg 12:0 fre_r , temp1, temp2,temp3;/fre_r , temp1, temp2,temp3用于计算reg 3:0 count1,count2,count3,count4;/数码管要显示的每位十进制数reg 3:0 state;/状态机的状态寄存器/状态机编码/parameter shiwei = 4b0001, /十位gewei = 4b0010,/个位shifenwei = 4b0100,/十分位baifenwei = 4b1000;/百分位always (posedge clk or negedge rst_n) /状态机,取出一个四位数的各个位的值,用比较法if(!rst_n)beginstate = shiwei;count1 = 4d0;count2 = 4d0;count3 = 4d0;count4 = 4d0;endelsebegincase(state)shiwei:begin state =5000)&(fre_r6000) begin count1 =4d5; temp1=4000)&(fre_r5000) begin count1 =4d4; temp1=3000)&(fre_r4000) begin count1 =4d3; temp1=2000)&(fre_r3000) begin count1 =2; temp1=1000)&(fre_r2000) begin count1 =1; temp1=fre_r-13d1000; endelseif(fre_r1000) begin count1 =0; temp1=fre_r; endelse begin count1 =5; temp1=fre_r-13d5000;endendgewei:beginstate =900) begin count2 =9; temp2=800)&(temp1900) begin count2 =8; temp2=700)&(temp1800) begin count2 =7; temp2=600)&(temp1700) begin count2 =6; temp2=500)&(temp1600) begin count2 =5; temp2=400)&(temp1500) begin count2 =4; temp2=300)&(temp1400) begin count2 =3; temp2=200)&(temp1300) begin count2 =2; temp2=100)&(temp1200) begin count2 =1; temp2=temp1-13d100; endelseif(temp1100) begin count2 =0; temp2=temp1; endelse begin count2 =0; temp2=temp1-13d900; endendshifenwei:beginstate =90) begin count3 =9; temp3=80)&(temp290) begin count3 =8; temp3=70)&(temp280) begin count3 =7; temp3=60)&(temp270) begin count3 =6; temp3=50)&(temp260) begin count3 =5; temp3=40)&(temp250) begin count3 =4; temp3=30)&(temp240) begin count3 =3; temp3=20)&(temp230) begin count3 =2; temp3=10)&(temp220) begin count3 =1; temp3=temp2-13d10; endelseif(temp210) begin count3 =0; temp3=temp2; endelse begin count3 =0; temp3=temp2-13d90; endendbaifenwei:beginstate = shiwei;/百分位/ count4 = temp33:0; enddefault:beginstate = shiwei;endendcase end/显示模块/reg 18:0 count_1ms; /用来产生数码管动态显示的位变化的驱动时钟always (posedge clk or negedge rst_n)if(!rst_n) begincount_1ms = 19d0;endelse begin count_1ms = count_1ms + 1b1; end /数码管动态扫描的位产生单元 always (posedge clk or negedge rst_n) if(!rst_n)sm_bit=4b0000;elsebegincase(count_1ms18:16) /数码管动态显示的位扫描 /基本上是每一位亮1ms3b000: sm_bit=4b1110;3b001: sm_bit=4b1101;3b010: sm_bit=4b1011;3b011: sm_bit=4b0111;default: sm_bit=4b1111;endcaseendalways (posedge clk or negedge rst_n)if(!rst_n) beginsegment =8h03; endelsebegincase(sm_bit)4b1110:segment=convent(count1); /十位4b1101:segment=convent(count2)-8d1;/个位 /显示小数点4b1011:segment=convent(count3); /十分位4b0111:segment=convent(count4); /百分位default:segment=8b1111_1111;endcaseendfunction 7:0 convent;/将自然数转化成共阳数码管的函数input 3:0 bcd; /输入为自然数case(bcd)4d0: convent=8h        
    温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 饲料生产线技术升级与创新方案
- 固废破碎筛分过程的优化与调控方案
- 储能系统功率平衡优化方案
- 2025福建福州文化旅游投资集团有限公司招聘2人笔试历年参考题库附带答案详解
- 2025广西投资集团咨询有限公司社会招聘1人笔试历年参考题库附带答案详解
- 2025四川泸州市纳溪区融新文化传媒有限责任公司面向社会招聘3人笔试历年参考题库附带答案详解
- 2025内蒙古能源集团有限公司市场化选聘高级管理人员3人笔试历年参考题库附带答案详解
- 2025中煤科工能源科技发展有限公司全球校园招聘笔试历年参考题库附带答案详解
- 智能化水利灌溉调度方案
- 北京竞赛数学真题及答案
- 2025年乐都区面向社会公开招聘社区工作人员考试参考题库及答案解析
- 光伏储能电池安全运行的操作规程
- 期中评估卷- 2025-2026学年英语六年级上学期 人教精通版 (含答案解析)
- 慢性支气管炎知识培训课件
- 2025年冠脉介入培训试题及答案
- 2025国家义务教育质量监测试题(含答案)
- 冠脉介入考试题及答案
- 公共场所卫生检验方法 第2部分:化学性指标-编制说明
- 2025时事政治必考题库(含答案)
- 垫付资金三方合同协议书
- 校园欺凌预防与干预实务操作手册
 
            
评论
0/150
提交评论