原创 CPLD笔记1 蜂鸣器实验

2010-2-18 18:21 2634 9 11 分类: FPGA/CPLD

笔记简单的蜂鸣器实验<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


实验的开始就是蜂鸣器的实验,作为入门实验,掌握VerilogDHL语言的概念确实很不错。这章笔记主要是分析Verilog DHL的源码,因为这就是实验的目的。其他的东西就不详谈了。


 


module lesson01 (clk, rst_n, clk_div);



input clk;


input rst_n;


output clk_div;



reg[19:0] count;


reg clk_div_r;



//---------------------------------------------------



always @ (posedge clk or negedge rst_n)


if(!rst_n) 


count <= 20'd0;


else 


count <= cnt+1'b1;



//----------------------------------------------------



always @ (posedge clk or negedge rst_n) 


if(!rst_n) 


clk_div_r <= 1'b0;


else if(count == 20'hffffff) 


clk_div_r <= ~clk_div_r;



//----------------------------------------------------



assign  clk_div = clk_div_r;



endmodule



 


以上的模块引入了clk,rst_n,,clk_div wire型的引脚,前两者为输入,后者为输出。该模块建立了两个寄存器,一个是20位的counter寄存器,和一个(默认32位)clk_div_r的寄存器。前者用来计数,后者原来记录某种状态。







Always块的作用,大家估计都知道了吧!?只要@内的条件触发都会执行一次always里面的代码。


 


我们先看第一个always块,该always块是每个时钟的上升沿都会使count寄存器递增。而第二个always块的功能是每个时钟的上升沿都检查count寄存器的值是否等于0xfffff,如果等于条件成立,那么clk_div_r就会赋予自己求反的结果。最后利用clk_div_r的结果来设置clk_div的逻辑。(assign是用来建立逻辑表达式)


 


在这里,有几个容易犯错的概念。CDPL不像单片机那样都是顺序执行代码,而它会因不同的代码编辑方法,而执行不一样的功能。如上题:寄存器的建立是一开始就完成always块是都时同是执行。而且寄存器的初始化在always块的rst_n下降沿完成


 


那么蜂鸣器的频率是多少呢?使用晶振是50Mhz,那么该表示计数器每20ns递增一次。Count寄存器的最大值是20位,也就是说...


 


( 2^20 ) - 1 = 104587;


14045875 * 20ns = 20.97152 ms


 


蜂鸣器每20.97142 ms翻转一次,一个周期是 2* 20.97142ms ,大约是40 ms。


所以蜂鸣器的频率是 25Hz。


 


结束语:


我错了,我一开始把它当着单片机来看,害了自己走了很大的弯路,CDPL真的很强大(我开始学AVR的时候,也说AVR很强大)。最后还有一个重点就是,那个 <=  阻塞赋值运算符,要好好理清他的作用,不然是读不明白该代码的。

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1609127 2010-2-23 13:25

目前正在新手上路,还有很多东西,不会,请多多指教

用户146077 2010-2-19 18:30

lz这个代码有一处不稳定 在异常状态下恢复不了
相关推荐阅读
用户1609127 2011-10-22 18:26
Verilog的私私细语 - 时钟化和信号的长度
目录 第2章 时钟化和信号的长度 2.01 一个时钟一块数据的概念 2.02 信号时钟化 2.03 深入了解模块的沟通 2.04 电平检测模块的整合(即时事件在时序上的不和谐)      实验八:电...
用户1609127 2011-09-08 12:47
瞎搞Time Quest 和无责任的笔记 第二章
最近整合篇的第二章的构思和灵感都累积不少了,应该是时候开工了。恰好手头上还有一本笔记还没有写完,就是这本瞎搞TimeQuest的第二章。目录笔者也懒得贴了,看过第一章的同学多少也会猜到第二章的内容是什...
用户1609127 2011-08-29 18:21
瞎搞Time Quest 和无责任的笔记 第一章
哎呀 ... 潜水了都有一段时间了,这是最近研究的成果和目标。 话说TimeQuest这个东西真的很搞怪呀,做得笔者不得不从其他的方向去研究它。 好了还是切入正题,TimeQuest用作静态时序的工具...
用户1609127 2011-07-06 17:43
Verilog的私私细语 - 整合的概念
目录         02  第1章  整合的概念          1.01  源码上的整合                   实验一:字面上的整合          1.02  时钟和步骤的定...
用户1609127 2011-06-22 10:18
VerilogHDL那些事儿 - 建模篇v4 + 时序篇v1
VerilogHDL那些事儿 - 建模篇v4 ====== v4 ====== 主要是修改了大量用法上的BUG和极限的精简内容 https://docs.google.com/leaf?id=0B...
用户1609127 2011-06-10 13:19
Verilog HDL的礼物 - Verilog HDL扫盲文
目录 02第0章 Verilog HDL语言扫盲文 030.01 各种的HDL语言 030.02 HDL语言的层次 03 0.03 RTL级和组合逻辑级 040.04 Verilog HDL语言真的那...
EE直播间
更多
我要评论
2
9
关闭 站长推荐上一条 /3 下一条