verilog数字电路设计

上传人:第*** 文档编号:49169960 上传时间:2018-07-24 格式:PPT 页数:33 大小:459KB
返回 下载 相关 举报
verilog数字电路设计_第1页
第1页 / 共33页
verilog数字电路设计_第2页
第2页 / 共33页
verilog数字电路设计_第3页
第3页 / 共33页
verilog数字电路设计_第4页
第4页 / 共33页
verilog数字电路设计_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《verilog数字电路设计》由会员分享,可在线阅读,更多相关《verilog数字电路设计(33页珍藏版)》请在金锄头文库上搜索。

1、第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

2、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位超前进位加

3、法器 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 a

4、ssign 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 a

5、ssign 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

6、+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语言的乘法操作符,可很容 易

7、地实现并行乘法器,并可由EDA综合软 件自动转化为电路网表结构n88并行乘法器的门级综合原理图 (2)移位相加乘法器n移位相加乘法器将乘法 变为加法实现,其设计 思路是:乘法通过逐次 移位相加实现,每次判 断乘数的最低位,若为 1则将被乘数移位相加 。44移位相加乘法操作示意图8位移位相加乘法器顶层设计 8位移位相加乘法器时序仿真波形(3)加法树乘法器 加法树乘法器示意图 (4)查找表乘法器n查找表乘法器将乘积直接存放在存储器中,将操作 数(乘数和被乘数)作为地址访问存储器,得到的 输出数据就是乘法运算的结果。n查找表方式的乘法器速度只局限于所使用存储器的 存取速度。但由于查找表规模随操作数位

8、数增加而 迅速增大,因此如用于实现位数宽的乘法操作,需 要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

9、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%的

10、方波波形。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

11、; 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 e

12、nd 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

13、(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设计一个

14、数字跑表 ,该跑表具有复位 、暂停、秒表计时 等功能。n 跑表设三个输入端,分别为时钟输入(CLK )、复位(CLR)和启动/暂停(PAUSE)按 键。复位信号高电平有效,可对跑表异步清零 ;当启动/暂停键为低电平时跑表开始计时, 为高电平时暂停,变低后在原来的数值基础上 继续计数。 9.6 数字频率计 n设计一个4位频率计,可测量从1Hz到 9,999Hz的信号频率,并将被测信号的频 率在4个数码管上显示出来。n采用一个标准的基准时钟,在单位时间( 如1秒)里对被测信号的脉冲数进行计数, 即为信号的频率。4位数字频率计的框图 9.7 交通灯控制器 n设计一个十字路口交通灯控制器,其示 意图如

15、图所示,A方向和B方向各设红( R)、黄(Y)、绿(G)和左拐(L)四 盏灯,四种灯按合理的顺序亮灭,并能 将灯亮的时间以倒计时的形式显示出来 。9.8 乐曲演奏电路n采用FPGA器件驱动小扬声器构成一个乐 曲演奏电路,演奏的乐曲选择“梁祝”片段 ,其曲谱如下。 乐曲演奏的原理n组成乐曲的每个音符的频率值(音调)及其 持续的时间(音长)是乐曲能连续演奏所需 的两个基本数据,因此只要控制输出到扬声 器的激励信号的频率的高低和持续的时间, 就可以使扬声器发出连续的乐曲声。 乐曲演奏电路原理框图 9.10 实用多功能数字钟 n用Verilog语言设计一个多功能数字钟,数字钟具 有下述功能(1)计时功能:包括时、分、秒的计时。(2)定时与闹钟功能:能在设定的时

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号