数电第4版 课件 第9章课件 4 常用模块的Verilog HDL代码_第1页
数电第4版 课件 第9章课件 4 常用模块的Verilog HDL代码_第2页
数电第4版 课件 第9章课件 4 常用模块的Verilog HDL代码_第3页
数电第4版 课件 第9章课件 4 常用模块的Verilog HDL代码_第4页
数电第4版 课件 第9章课件 4 常用模块的Verilog HDL代码_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4常用模块的VerilogHDL代码1.模为30的BCD码加法计数器2.可逆计数器4.多功能移位寄存器3.三态输出并行寄存器5.序列信号发生器6.分频器1.模为30的BCD码加法计数器

具有同步清零和同步预置数功能,rst和load高电平有效,en高电平有效。1.模为30的BCD码加法计数器

具有同步清零和同步预置数功能,rst和load高电平有效,en高电平有效。时钟clk清零rst预置数load计数使能en预置数据输入d[7..0]计数状态输出q[7..0]进位输出rco↑1××××××××××00000000#↑01×d[7..0]d[7..0]#↑001××××××××计数#↑000××××××××保持#1.模为30的BCD码加法计数器

modulecounter30(clk,rst,en,load,d,rco,q);inputclk,rst,en,load;//时钟,清零,计数使能,预置数input[7:0]d;//预置数据输入端outputrco;//进位输出outputreg[7:0]q;//计数状态输出,变量的数据类型为regalways@(posedgeclk)//开始always过程,声明敏感信号beginif(rst)q<=0; //rst=1时清零elseif(load)q<=d;//rst=0,load=1时预置数elseif(en) //rst=0,load=0,en=1,开始计数过程1.模为30的BCD码加法计数器

beginif(q[3:0]==9) //判断个位是否为9begin q[3:0]<=0;//个位为9时,将个位赋值为0if(q[7:4]==2)q[7:4]<=0;//若十位是2,则将十位赋值为0elseq[7:4]<=q[7:4]+1;endelseq[3:0]<=q[3:0]+1;//个位不为9,则个位加1endendassignrco=((q==8'h29)&&(en==1))?1:0;//产生进位信号endmodule仿真结果1.模为30的BCD码加法计数器

2.可逆计数器

4位二进制可逆计数器,具有同步清零和同步置数功能;rst和load高电平有效;updown=1加法计数,updown=0减法计数。时钟clk清零rst预置数load加减控制updown预置数据输入d[3..0]计数状态输出q[3..0]进位输出rco↑1××××××0000#↑01×d[3..0]d[3..0]#↑001××××加计数#↑000××××减计数#VerilogHDL代码2.可逆计数器

modulekn_counter(clk,rst,load,updown,d,q,rco);parametersize=4;//定义参数计数器位数size=4input[size-1:0]d;//预置数据输入端inputclk,rst,load,updown;//时钟,清零,预置数,加减控制端outputreg[size-1:0]q;//计数状态输出,变量的数据类型为regoutputrco; //进位/借位输出always@(posedgeclk) //开始always过程,声明敏感信号beginif(rst)q<=0; //rst=1时清零elseif(load)q<=d; //rst=0,load=1时预置数elseif(updown)q<=q+1; //rst=0,load=0,updown=1,加法计数elseq<=q-1; //rst=0,load=0,updown=0,减法计数endassignrco=((q==4'b1111)&&(updown==1)||(q==4'b0000)&&(updown==0))?1:0;//产生进位/借位计数endmodule2.可逆计数器

3.三态输出并行寄存器

输出使能oe时钟clk数据输入d[7..0]数据输出q[7..0]1××Z(高阻)0↑d[7..0]d[7..0]

三态输出数码寄存器,带输出使能oe,oe=1时输出高阻态。Verilog代码moduleregister374(oe,clk,d,q);inputclk,oe; //时钟,输出使能input[7:0]d; //数据输入端outputreg[7:0]q; //数据输出端always@(posedgeclkorposedgeoe)if(oe)q<=8'bz; elseq<=d; //若oe=1输出高阻态;若oe=0,将输入数据送入输出端endmodule3.三态输出并行寄存器

仿真及结果3.三态输出并行寄存器

从上述仿真结果看,当oe由高电平变成低电平后,q仍然输出为高阻,这与预想的电路功能不符,观察一下综合后的电路。moduleregister374(oe,clk,d,q,qo);inputclk,oe;input[7:0]d;outputreg[7:0]q;outputreg[7:0]qo;always@(posedgeclk)beginq<=d; endalways@(oe)if(oe)qo<=8'bz;elseqo<=q;endmodule3.三态输出并行寄存器

3.三态输出并行寄存器

4.多功能移位寄存器

4.多功能移位寄存器

moduleshift_register(q,d,clk,mr,sl,sr,s1,s0);output[3:0]q; //移位寄存器输出端input[3:0]d; //数据输入端inputclk,mr,sl,sr,s1,s0; //时钟、清零、左移串行输入、右移串行输入、模式选择信号reg[3:0]temp; //定义一个4位reg型数据tempwire[1:0]mode; //定义一个2位wire型数据moderegx; //定义一个1位reg型数据xassignmode={s1,s0};assignq=temp;4.多功能移位寄存器

always@(posedgeclk)beginif(mr==0)begintemp<=4'b0000;x<=1'b0;endelsebegincase(mode)2'b00:temp<=temp;//S1S0=00时,保持功能2'b01://S1S0=01时,右移功能beginx<=sr;temp<=temp>>1;temp[3]<=x;end2'b10://S1S0=10时,左移功能beginx<=sl;temp<=temp<<1;temp[0]<=x;End2'b11:temp<=d;//S1S0=11时,并行置数功能endcaseendendendmodule4.多功能移位寄存器

5.序列信号发生器

在同步脉冲作用下循环地产生一串周期性的二进制信号,能产生这种信号的逻辑器件就称为序列信号发生器。例:设计产生序列11100100。moduleseq_gen(dout,clk,rst);outputdout;inputclk,rst;regdout;reg[7:0]q;always@(posedgeclk)//时钟上升沿到来beginif(rst) //复位信号有效if(rst)//复位信号有效begindout<=0;q<=8'b11100100;endelsebegindout<=q[7];q<={q[6:0],q[7]};endendendmodule5.序列信号发生器

仿真结果:6.分频器

在数字电子系统设计中,分频器是一种应用十分广泛的电路。其功能就是对较高频率的信号进行分频。(1)分频系数是2的整数次幂的分频器

对于分频系数是2的整数次幂的分频器来说,可以直接将计数器的相应位赋給分频器的输出信号即可。下面以一个一个通用的可输出输入信号的2分频信号、4分频信号、8分频信号的分频器为例,介绍此类型分频器的设计方法。modulediv248(div2,div4,div8,clk);inputclk;outputdiv2,div4,div8; //输出2分频、4分频、8分频regdiv2,div4,div8;reg[2:0]cnt;always@(posedgeclk)//时钟上升沿到来begincnt<=cnt+1;div2<=cnt[0];div4<=cnt[1];div8<=cnt[2];endendmodule6.分频器

6.分频器

仿真结果(2)分频系数不是2的整数次幂的分频器moduleDIV12(div12,clk);inputclk;outputdiv12; //输出12分频regdiv12;reg[2:0]cnt;always@(posedgeclk)//时钟上升沿到来

对于分频系数不是2的整数次幂的分频器来说,仍然可以用计数器来实现,不过需要对计数器进行控制。下面以一个分频系数为12的分频器为例,介绍此类型分频器的设计方法。6.分频器

beginif(cnt==3'b101)begin div12<=~div12;cnt<=0;endelsebegin cnt<=cnt+1;endendendmodule6.分频器

(3)占空比不是1:1的分频器

上面两个例子所描述的分频器,其分频输出信号的占空比均为1:1。然而在实际的数字电路设计中,经常会需要占空比不是1:1的分频信号。这种分频器的实现方法也是通过计数器的控制得到的。下面以一个分频系数为6、占空比为1:5的偶数分频器为例,介绍此类分频器的设计方法。6.分频器

modulediv6(div6,clk);inputclk;outputdiv6; //输出6分频regdiv6;reg[2:0]cnt;always@(posedgeclk)//时钟上升沿到来beginif(cnt==3’b101)begindiv6<=1;cnt<=0;endelsebegindiv6<=0;cnt<=cnt+1;endendendmodule6.分频器

(4)奇数分频器

奇数分频器是指分频系数为N=2n+1(n=1,2,…)。如果输入信号的频率为f,则分频器输出信号频率为f/(2n+1)。下面介绍两种奇数分频器的设计方法。

占空比不是1:1的奇数分频器与占空比不是1:1的偶数分频器设计方法相同,均是通过对计数器的控制来实现。下面以一个分频系数为7、占空比为1:6的奇数分频器为例,介绍此类分频器的设计方法。占空比不是1:1的奇数分频器6.分频器

(4)奇数分频器modulediv7(div7,clk);outputdiv7;inputclk;regdiv7;reg[2:0]cnt;always@(posedgeclk)6.分频器

beginif(cnt==6)begindiv7<=1;cnt<=0;endelsebegincnt<=cnt+1;div7<=0;endendendmodule(4)奇数分频器占空比为1:1的奇数分频器

占空比为1:1的奇数分频器的实现方法是:设计两个计数器,一个计数器采用时钟

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论