资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第9章 Verilog数字电路设计9.1 加法器 级连加法器 并行加法器 超前进位加法器 流水线加法器(1)8位级连加法器module add_jl(sum,cout,a,b,cin); input7:0 a,b; input cin; output7:0 sum; output cout; full_add1 f0(a0,b0,cin,sum0,cin1); full_add1 f1(a1,b1,cin1,sum1,cin2); full_add1 f2(a2,b2,cin2,sum2,cin3); full_add1 f3(a3,b3,cin3,sum3,cin4); full_add1 f4(a4,b4,cin4,sum4,cin5); full_add1 f5(a5,b5,cin5,sum5,cin6); full_add1 f6(a6,b6,cin6,sum6,cin7); full_add1 f7(a7,b7,cin7,sum7,cout); endmodule8位级连加法器代码(2)并行加法器 module add_bx(cout,sum,a,b,cin); input7:0 a,b; input cin; output7:0 sum; output cout; assign cout,sum=a+b+cin; endmodule全部由逻辑门实现(3) 8位超前进位加法器 module add_ahead(sum,cout,a,b,cin); input7:0 a,b; input cin; output7:0 sum; output cout; wire7:0 G,P; wire7:0 C,sum; assign G0=a0 assign P0=a0|b0; assign C0=cin; assign sum0=G0P0C0; assign G1=a1 assign P1=a1|b1; assign C1=G0|(P0 assign sum1=G1P1C1; assign G2=a2 assign P2=a2|b2; assign C2=G1|(P1 assign sum2=G2P2C2; assign G3=a3 assign P3=a3|b3; assign C3=G2|(P2 assign sum3=G3P3C3;assign G4=a4 assign P4=a4|b4; assign C4=G3|(P3 assign sum4=G2P2C2; assign G5=a5 assign P5=a5|b5; assign C5=G4|(P4 assign sum5=G5P5C5; assign G6=a6 assign P6=a6|b6; assign C6=G5|(P5 assign sum6=G6P6C6; assign G7=a7 assign P7=a7|b7; assign C7=G6|(P6 assign sum7=G7P7C7; assign cout=G7|(P7 endmodule(4)流水线加法器 module adder8(cout,sum,a,b,cin,enable); input7:0 a,b; input cin,enable; output7:0 sum; output cout; reg cout; reg7:0 sum; reg3:0 tempa,tempb,firsts; reg firstc; always (posedge enable) begin firstc,firsts=a3:0+b3:0+cin; tempa=a7:4; tempb=b7:4; end always (posedge enable) begin cout,sum7:4=tempa+tempb+firstc; sum3:0=firsts; end endmodule9.2 乘法器 并行乘法器 移位相加 查找表 加法树module mult(outcome,a,b); parameter size=8; inputsize:1 a,b; output2*size:1 outcome; assign outcome=a*b; endmodule(1)并行乘法器利用Verilog语言的乘法操作符,可很容 易地实现并行乘法器,并可由EDA综合软 件自动转化为电路网表结构n88并行乘法器的门级综合原理图 (2)移位相加乘法器n移位相加乘法器将乘法 变为加法实现,其设计 思路是:乘法通过逐次 移位相加实现,每次判 断乘数的最低位,若为 1则将被乘数移位相加 。44移位相加乘法操作示意图8位移位相加乘法器顶层设计 8位移位相加乘法器时序仿真波形(3)加法树乘法器 加法树乘法器示意图 (4)查找表乘法器n查找表乘法器将乘积直接存放在存储器中,将操作 数(乘数和被乘数)作为地址访问存储器,得到的 输出数据就是乘法运算的结果。n查找表方式的乘法器速度只局限于所使用存储器的 存取速度。但由于查找表规模随操作数位数增加而 迅速增大,因此如用于实现位数宽的乘法操作,需 要FPGA器件具有较大的片内存储器模块。比如, 要实现88乘法,要求存储器的地址位宽为16位, 字长为16位,即存储器大小为1M比特。n乘累加器的结构框图 9.3 乘累加器(MAC)乘累加器(MAC)module MAC(out,opa,opb,clk,clr); output15:0 out;input7:0 opa,opb; input clk,clr; wire15:0 sum; reg15:0 out;function15:0 mult; /函数定义,mult函数完成乘法操作 input7:0 opa,opb; reg 15:0 result; integer i; begin result=opa0? opb : 0; for(i=1; i=7; i=i+1) begin if(opai=1) result=result+(opb(i-1);end mult=result; end endfunction assign sum=mult(opa,opb)+out; always (posedge clk or posedge clr) begin if(clr) out=0; else out=sum; end endmodulen在实际中我们经常会遇到这样的问题,需 要进行奇数次分频,同时又要得到占空比 是50%的方波波形。n可采用如下方法:用两个计数器,一个由 输入时钟上升沿触发,一个由输入时钟下 降沿触发,最后将两个计数器的输出相或 ,即可得到占空比为50%的方波波形。 9.4 奇数分频与小数分频 (1)奇数分频占空比50%的奇数分频(模7) module count7(RESET,CLK,COUT); input CLK,RESET; output COUT; reg2:0 m,n; wire COUT; reg COUT1,COUT2;assign COUT=COUT1|COUT2; always (posedge CLK) begin if(!RESET) begin COUT1=0; m=0; end else if(RESET) begin if(m=6) begin m=0; end else m=m+1;if(m=2) COUT1=COUT1; else if(m=5) COUT1=COUT1; end end占空比50%的奇数分频(模7)always (negedge CLK) begin if(!RESET) begin COUT2=0; n=0; end else if(RESET) begin if(n=6) begin n=0; end else n=n+1; if(n=2) COUT2=COUT2; else if(n=5) COUT2=COUT2; end end endmodule功能仿真波形模7奇数分频器功能仿真波形图 (2)小数分频 n可用下面的方法大致实现小数分频,即 先设计两个不同分频比的整数分频器, 然后通过控制两种分频比出现的不同次 数来获得所需要的小数分频值,从而实 现平均意义上的小数分频。 8.1小数分频器module fdiv8_1(clk_in,rst,clk_out); input clk_in,rst; output clk_out; reg clk_out; reg3:0 cnt1;/cnt1计分频的次数 reg3:0 cnt2; always(posedge clk_in or posedge rst) beginif(rst)begin cnt1=0; cnt2=0; clk_out=0;endelse if(cnt19)/9次8分频begin if(cnt27)begin cnt2=cnt2+1; clk_out=0;endelse begincnt2=0; cnt1=cnt1+1; clk_out=1;end endelse begin/1次9分频if(cnt28)begincnt2=cnt2+1; clk_out=0;endelsebegincnt2=0; cnt1=0; clk_out=1;endend end endmodule8.1小数分频功能仿真波形 功能仿真波形9.5 数字跑表 n设计一个数字跑表 ,该跑表具有复位 、暂停、秒表计时 等功能。n 跑表设三个输入端,分别为时钟输入(CLK )、复位(CLR)和启动/暂停(PAUSE)按 键。复位信号高电平有效,可对跑表异步清零 ;当启动/暂停键为低电平时跑表开始计时, 为高电平时暂停,变低后在原来的数值基础上 继续计数。 9.6 数字频率计 n设计一个4位频率计,可测量从1Hz到 9,999Hz的信号频率,并将被测信号的频 率在4个数码管上显示出来。n采用一个标准的基准时钟,在单位时间( 如1秒)里对被测信号的脉冲数进行计数, 即为信号的频率。4位数字频率计的框图 9.7 交通灯控制器 n设计一个十字路口交通灯控制器,其示 意图如图所示,A方向和B方向各设红( R)、黄(Y)、绿(G)和左拐(L)四 盏灯,四种灯按合理的顺序亮灭,并能 将灯亮的时间以倒计时的形式显示出来 。9.8 乐曲演奏电路n采用FPGA器件驱动小扬声器构成一个乐 曲演奏电路,演奏的乐曲选择“梁祝”片段 ,其曲谱如下。 乐曲演奏的原理n组成乐曲的每个音符的频率值(音调)及其 持续的时间(音长)是乐曲能连续演奏所需 的两个基本数据,因此只要控制输出到扬声 器的激励信号的频率的高低和持续的时间, 就可以使扬声器发出连续的乐曲声。 乐曲演奏电路原理框图 9.10 实用多功能数字钟 n用Verilog语言设计一个多功能数字钟,数字钟具 有下述功能(1)计时功能:包括时、分、秒的计时。(2)定时与闹钟功能:能在设定的时
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号