Verilog数字电路设计_第1页
Verilog数字电路设计_第2页
Verilog数字电路设计_第3页
Verilog数字电路设计_第4页
Verilog数字电路设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

9.1加法器◆

级连加法器◆

并行加法器◆

超前进位加法器◆

流水线加法器(1)8位级连加法器moduleadd_jl(sum,cout,a,b,cin);input[7:0]a,b;inputcin;output[7:0]sum;outputcout;full_add1f0(a[0],b[0],cin,sum[0],cin1);full_add1f1(a[1],b[1],cin1,sum[1],cin2);full_add1f2(a[2],b[2],cin2,sum[2],cin3);full_add1f3(a[3],b[3],cin3,sum[3],cin4);full_add1f4(a[4],b[4],cin4,sum[4],cin5);full_add1f5(a[5],b[5],cin5,sum[5],cin6);full_add1f6(a[6],b[6],cin6,sum[6],cin7);full_add1f7(a[7],b[7],cin7,sum[7],cout);endmodule8位级连加法器代码(2)并行加法器moduleadd_bx(cout,sum,a,b,cin);input[7:0]a,b;inputcin;output[7:0]sum;outputcout;assign{cout,sum}=a+b+cin;endmodule全部由逻辑门实现(3)8位超前进位加法器

moduleadd_ahead(sum,cout,a,b,cin);input[7:0]a,b;inputcin;output[7:0]sum;outputcout;wire[7:0]G,P;wire[7:0]C,sum;assignG[0]=a[0]&b[0];assignP[0]=a[0]|b[0];assignC[0]=cin;assignsum[0]=G[0]^P[0]^C[0];assignG[1]=a[1]&b[1];assignP[1]=a[1]|b[1];assignC[1]=G[0]|(P[0]&cin);assignsum[1]=G[1]^P[1]^C[1];assignG[2]=a[2]&b[2];assignP[2]=a[2]|b[2];assignC[2]=G[1]|(P[1]&C[1]);assignsum[2]=G[2]^P[2]^C[2];assignG[3]=a[3]&b[3]; assignP[3]=a[3]|b[3];assignC[3]=G[2]|(P[2]&C[2]);assignsum[3]=G[3]^P[3]^C[3];assignG[4]=a[4]&b[4]; assignP[4]=a[4]|b[4];assignC[4]=G[3]|(P[3]&C[3]);assignsum[4]=G[2]^P[2]^C[2];assignG[5]=a[5]&b[5];assignP[5]=a[5]|b[5];assignC[5]=G[4]|(P[4]&C[4]);assignsum[5]=G[5]^P[5]^C[5];assignG[6]=a[6]&b[6]; assignP[6]=a[6]|b[6];assignC[6]=G[5]|(P[5]&C[5]);assignsum[6]=G[6]^P[6]^C[6];assignG[7]=a[7]&b[7];assignP[7]=a[7]|b[7];assignC[7]=G[6]|(P[6]&C[6]);assignsum[7]=G[7]^P[7]^C[7];assigncout=G[7]|(P[7]&C[7]);endmodule(4)流水线加法器moduleadder8(cout,sum,a,b,cin,enable);input[7:0]a,b;inputcin,enable;output[7:0]sum;outputcout;regcout;reg[7:0]sum;reg[3:0]tempa,tempb,firsts;regfirstc;always@(posedgeenable)begin{firstc,firsts}=a[3:0]+b[3:0]+cin;tempa=a[7:4];tempb=b[7:4];endalways@(posedgeenable)begin{cout,sum[7:4]}=tempa+tempb+firstc;sum[3:0]=firsts;endendmodule9.2乘法器◆

并行乘法器◆

移位相加◆

查找表◆

加法树modulemult(outcome,a,b);parametersize=8;input[size:1]a,b;output[2*size:1]outcome;assignoutcome=a*b;endmodule(1)并行乘法器利用Verilog语言的乘法操作符,可很容易地实现并行乘法器,并可由EDA综合软件自动转化为电路网表结构8×8并行乘法器的门级综合原理图(2)移位相加乘法器移位相加乘法器将乘法变为加法实现,其设计思路是:乘法通过逐次移位相加实现,每次判断乘数的最低位,若为1则将被乘数移位相加。4×4移位相加乘法操作示意图8位移位相加乘法器顶层设计

8位移位相加乘法器时序仿真波形(3)加法树乘法器加法树乘法器示意图

(4)查找表乘法器查找表乘法器将乘积直接存放在存储器中,将操作数(乘数和被乘数)作为地址访问存储器,得到的输出数据就是乘法运算的结果。查找表方式的乘法器速度只局限于所使用存储器的存取速度。但由于查找表规模随操作数位数增加而迅速增大,因此如用于实现位数宽的乘法操作,需要FPGA器件具有较大的片内存储器模块。比如,要实现8×8乘法,要求存储器的地址位宽为16位,字长为16位,即存储器大小为1M比特。乘累加器的结构框图9.3乘累加器(MAC)乘累加器(MAC)moduleMAC(out,opa,opb,clk,clr);output[15:0]out;input[7:0]opa,opb;inputclk,clr;wire[15:0]sum;reg[15:0]out;

function[15:0]mult;//函数定义,mult函数完成乘法操作input[7:0]opa,opb;reg[15:0]result;integeri;beginresult=opa[0]?opb:0;for(i=1;i<=7;i=i+1)beginif(opa[i]==1)result=result+(opb<<(i-1));endmult=result;endendfunction

assignsum=mult(opa,opb)+out;always@(posedgeclkorposedgeclr)beginif(clr)out<=0;elseout<=sum;endendmodule在实际中我们经常会遇到这样的问题,需要进行奇数次分频,同时又要得到占空比是50%的方波波形。可采用如下方法:用两个计数器,一个由输入时钟上升沿触发,一个由输入时钟下降沿触发,最后将两个计数器的输出相或,即可得到占空比为50%的方波波形。9.4奇数分频与小数分频

(1)奇数分频占空比50%的奇数分频(模7)

modulecount7(RESET,CLK,COUT);inputCLK,RESET;outputCOUT;reg[2:0]m,n;wireCOUT;regCOUT1,COUT2;assignCOUT=COUT1|COUT2;always@(posedgeCLK)beginif(!RESET)beginCOUT1<=0;m<=0;endelseif(RESET)begin if(m==6)beginm<=0;end elsem<=m+1; if(m==2)COUT1=~COUT1; elseif(m==5)COUT1=~COUT1; endend占空比50%的奇数分频(模7)always@(negedgeCLK)beginif(!RESET)beginCOUT2<=0;n<=0;end elseif(RESET) beginif(n==6)beginn<=0;end elsen<=n+1; if(n==2)COUT2=~COUT2; elseif(n==5) COUT2=~COUT2;endendendmodule功能仿真波形模7奇数分频器功能仿真波形图

(2)小数分频

可用下面的方法大致实现小数分频,即先设计两个不同分频比的整数分频器,然后通过控制两种分频比出现的不同次数来获得所需要的小数分频值,从而实现平均意义上的小数分频。

8.1小数分频器modulefdiv8_1(clk_in,rst,clk_out);inputclk_in,rst;outputclk_out;regclk_out;reg[3:0]cnt1; //cnt1计分频的次数reg[3:0]cnt2;always@(posedgeclk_inorposedgerst)beginif(rst)begincnt1<=0;cnt2<=0;clk_out<=0; endelseif(cnt1<9) //9次8分频

beginif(cnt2<7) begincnt2<=cnt2+1;clk_out<=0; end else begin cnt2<=0;cnt1<=cnt1+1;clk_out<=1; end end else begin //1次9分频

if(cnt2<8) begin cnt2<=cnt2+1;clk_out<=0; end else begin cnt2<=0;cnt1<=0;clk_out<=1; end endendendmodule8.1小数分频功能仿真波形功能仿真波形9.5数字跑表

设计一个数字跑表,该跑表具有复位、暂停、秒表计时等功能。

跑表设三个输入端,分别为时钟输入(CLK)、复位(CLR)和启动/暂停(PAUSE)按键。复位信号高电平有效,可对跑表异步清零;当启动/暂停键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的数值基础上继续计数。

9.6数字频率计

设计一个4位频率计,可测量从1Hz到9,999Hz的信号频率,并将被测信号的频率在4个数码管上显示出来。采用一个标准的基准时钟,在单位时间(如1秒)里对被测信号的脉冲数进行计数,即为信号的频率。4位数字频率计的框图

9.7交通灯控制器

设计一个十字路口交通灯控制器,其示意图如图所示,A方向和B方向各设红(R)、黄(Y)、绿(G)和左拐(L)四盏灯,四种灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来。9.8乐曲演奏电路采用FPGA器件驱动小扬声器构成一个乐曲演奏电路,演奏的乐曲选择“梁祝”片段,其曲谱如下。

乐曲演奏的原理组成乐曲的每个音符的频率值(音调)及其持续的时间(音长)是乐曲能连续演奏所需的两个基本数据,因此只要控制输出到扬声器的激励信号的频率的高低和持续的时间,就可以使扬声器发出连续的乐曲声。

乐曲演奏电路原理框图

9.10实用多功能数字钟

温馨提示

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

评论

0/150

提交评论