文档详情

第9章Verilog数字电路设计报告.ppt

发布:2017-01-15约5.83千字共31页下载文档
文本预览下载声明
(1)8位级连加法器 8×8并行乘法器的门级综合原理图 (2)移位相加乘法器 移位相加乘法器将乘法变为加法实现,其设计思路是:乘法通过逐次移位相加实现,每次判断乘数的最低位,若为1则将被乘数移位相加。 (3)加法树乘法器 (4)查找表乘法器 查找表乘法器将乘积直接存放在存储器中,将操作数(乘数和被乘数)作为地址访问存储器,得到的输出数据就是乘法运算的结果。 查找表方式的乘法器速度只局限于所使用存储器的存取速度。但由于查找表规模随操作数位数增加而迅速增大,因此如用于实现位数宽的乘法操作,需要FPGA器件具有较大的片内存储器模块。比如,要实现8×8乘法,要求存储器的地址位宽为16位,字长为16位,即存储器大小为1M比特。 乘累加器的结构框图 乘累加器(MAC) module MAC(out,opa,opb,clk,clr); output[15:0] out;input[7:0] opa,opb; input clk,clr; wire[15:0] sum; reg[15:0] out; ? function[15:0] mult; //函数定义,mult函数完成乘法操作 input[7:0] opa,opb; reg [15:0] result; integer i; begin result=opa[0]? opb : 0; for(i=1; i=7; i=i+1) begin if(opa[i]==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 endmodule 9.4 奇数分频与小数分频 在实际中我们经常会遇到这样的问题,需要进行奇数次分频,同时又要得到占空比是50%的方波波形。 可采用如下方法:用两个计数器,一个由输入时钟上升沿触发,一个由输入时钟下降沿触发,最后将两个计数器的输出相或,即可得到占空比为50%的方波波形。 占空比50%的奇数分频(模7) module count7(RESET,CLK,COUT); input CLK,RESET; output COUT; reg[2: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 功能仿真波形 (2)小数分频 可用下面的方法大致实现小数分频,即先设计两个不同分频比的整数分频器,然后通过控制两种分频比出现的不同次数来获得所需要的小数分频值,从而实现平均意义上的小数分频。 8.1小数分频器 module fdiv8_1(clk_in,rst,clk_out); input clk_in,rst; output clk_out; reg clk_out; reg[3:0] cnt1; //cnt1计分频的次数 reg[3:0] cnt2; always@(posedge clk_in or posedge rst) begin if(rst) begin cnt1=0; cnt2=0; clk_out=0; end else if(cnt19) //9次8分频 begin if(cnt27) begin cnt2=cnt2+1; clk_out=0; end else begin cnt2=0
显示全部
相似文档