西华大学课程设计说明书 2.3方案论证
(1)方案一:使用单片机设计成的系统外围电路相对较少,硬件搭建相对容易。51单片机的价格低廉,性能可靠。但是,单片机的管脚十分有限,计算速度相对CPLD慢,内部数据存储器为字节存储,难以满足八位十进制计数器的存储需要。
(2)方案二:采用CPLD来设计八位十进制计数器,测量精度高,运行速度快,采用verilog语言模块化编程,大大缩减了外围的硬件电路,节约了硬件资源,而且方便进行软件调试。
2.4方案选择
由于本次课程设计题目为八位十进制频率计,要求可测的频率范围为0到100MHZ,所以运算速度快、精度高、性能可靠、可将外围器件通过编程来代替的CPLD芯片更符合要求。综合比较结合各方面的优劣势,并参考本次课程设计要求,我选择了基于CPLD器件来实现八位十进制频率计的设计方案。
3、单元模块设计
本设计由复杂可编程逻辑器件(CPLD)作为控制芯片,通过Vreilog HDL硬件描述语言设计,运用自顶而下的设计思想,按功能逐层分割实现层次化的设计。总体设计方案为由晶振电路提供时钟信号。然后对系统时钟分频产生控制信号如秒脉冲tgate,锁存信号ale,译码控制信号的dclk和显示使能信号d_en,位选信号lclk。在控制信号作用下,被测脉冲mclk通过八位十进制bcd加法计数器计数,计数值通过锁存器锁存,然后经过七段显示译码器译码后用数码管实现动态显示。下面介绍主要模块的功能及作用。
3.1分频模块
在分频模块中,系统时钟s_clk设定为2ms,经过1000分频后便可以产生周期为2s的闸门信号tgate,锁存信号ale,译码信号dclk,显示使能信号d_en,同时对系统时钟经过60分频便可以得到周期为125ms的位选切换信号。
3.1.1分频模块波形仿真图
图3-1-1分频模块功能仿真图
5
西华大学课程设计说明书 3.1.2分频模逻辑综合图
图3-1-2分频模块逻辑综合图
3.1.3分频模块verilog源代码
module div(tgate,s_clk,ale,dclk,d_en,lclk,); input s_clk;
output tgate,ale,dclk,d_en,lclk; reg tgate,ale,dclk,lclk,d_en; integer i,j;
always @(posedge s_clk) begin if(i==499)
begin tgate=~tgate;ale=~ale;dclk=~dclk;d_en=~d_en;i=0;end
6
西华大学课程设计说明书 else i=i+1; end
always @(posedge s_clk) else j=j+1; end endmodule
if(j==30)begin lclk=~lclk;j=0;end
3.2计数模块
该计数模块为十位八进制bcd加法计数器,clrn为清零信号,高电平有效,
q为计数值,tgate为高电平为1s的门控信号,仿真中设定被测脉冲周期为40ms,对其在1s钟内进行计数,计数结果q值显示为25。符合理论计算结果。
3.2.1计数模块功能仿真波形
图3-2-1计数模块功能仿真图
7
西华大学课程设计说明书 3.2.2计数模块逻辑综合图
3.2.3计数模块verilog源代码
module counter(clrn,mclk,q,tgate,cunt); input clrn,mclk,tgate; output [15:0]q,cunt; reg [15:0]q;
always @(posedge mclk ) begin
if(!clrn) q[15:0]=0; else if(tgate) begin
if(q[15:0]==16'H9999) q[15:0]=0;
else if(q[11:0]==12'H999) q[15:0]=q[15:0]+12'H667; else if(q[ 7:0]== 8'H99) q[15:0]=q[15:0]+8'H67;
else if(q[ 3:0]== 4'H9) q[15:0]=q[15:0]+4'H7; //十六进制转换为十进制。 else q[15:0]=q[15:0]+1; end else q=0; end
assign cunt=q; endmodule
8
图3-2-2分频模块逻辑综合图
西华大学课程设计说明书
3.3锁存模块
在锁存模块locker中,采用ale信号的下降沿对计数模块的计数结果进行锁存,锁存时间由ale的周期确定,在仿真中将输入值din设定为随机值,ale设定为周期为2s的方波,qout为锁存结果输出端,输出端结果在ale下降沿到来时刻改变,其余时刻保持为锁存状态。
3.3.1锁存模块功能仿真波形
图3-3-1计数模块功能仿真图
3.3.2锁存模块逻辑综合图
图3-3-2计数模块功能仿真图
9