实验六 流水线与分频技术

上传人:wt****50 文档编号:39737460 上传时间:2018-05-19 格式:DOC 页数:6 大小:126.50KB
返回 下载 相关 举报
实验六 流水线与分频技术_第1页
第1页 / 共6页
实验六 流水线与分频技术_第2页
第2页 / 共6页
实验六 流水线与分频技术_第3页
第3页 / 共6页
实验六 流水线与分频技术_第4页
第4页 / 共6页
实验六 流水线与分频技术_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《实验六 流水线与分频技术》由会员分享,可在线阅读,更多相关《实验六 流水线与分频技术(6页珍藏版)》请在金锄头文库上搜索。

1、1实验六:流水线与分频设计实验实验六:流水线与分频设计实验班级:班级: 姓名:姓名: 学号:学号: 作业完成后作业完成后,以班级为单位以班级为单位,班长或课代表收集齐电子版实验报告班长或课代表收集齐电子版实验报告,统一提交统一提交.文件命名规则如文件命名规则如“通通 1_王五王五_学号学号”一、实验目的一、实验目的1、 掌握分频技术思路2、 掌握流水线设计的方法和基本形式二、预习要求二、预习要求1.了解 veirlogHDL 行为语句。 2.流水线和分频设计方法。三、三、实验基本概念实验基本概念偶数分频偶数分频 2N:模:模 N 计数器,计数器,0 到到 N,输出翻转,输出翻转 奇数分频奇数分

2、频 2N+1: (1)占空比占空比 X/(2N+1):用模:用模 2N+1 的计数器,的计数器,0x2N。从。从 0 计数到计数到 X 时钟翻时钟翻 转,计数到转,计数到 2N+1 再再翻转,并复位计数器。再再翻转,并复位计数器。 (2)占空比占空比 50%:基于(基于(1)中占空比为非)中占空比为非 50的输出时钟在输入时钟的上升的输出时钟在输入时钟的上升 沿触发翻转;若在同一个输入时钟周期内,此计数器的两次输出时钟翻转沿触发翻转;若在同一个输入时钟周期内,此计数器的两次输出时钟翻转 分别在与(分别在与(1)中对应的下降沿触发翻转,输出的时钟与()中对应的下降沿触发翻转,输出的时钟与(1)中

3、输出的时)中输出的时 钟进行逻辑或,即可得到占空比为钟进行逻辑或,即可得到占空比为 50的奇数倍分频时钟。当然其输出端的奇数倍分频时钟。当然其输出端 再与偶数倍分频器串接则可以实现偶数倍分频。再与偶数倍分频器串接则可以实现偶数倍分频。 N-0.5 分频:分频: N 模计数器,从模计数器,从 0 开始上升沿奇数,开始上升沿奇数,N-1 时输出翻转,在时钟翻转后经历时输出翻转,在时钟翻转后经历 0.5 个周期时,计数器输出时钟必须进行再次翻转,即当个周期时,计数器输出时钟必须进行再次翻转,即当 CLK 为下降沿时计为下降沿时计 数器的输入端应为上升沿脉冲,使计数器计数达到数器的输入端应为上升沿脉冲

4、,使计数器计数达到 N 而复位为而复位为 0 重新开始重新开始 计数同时输出时钟翻转。这个过程所要做的就是对计数同时输出时钟翻转。这个过程所要做的就是对 CLK 进行适当的变换,进行适当的变换, 使之送给计数器的触发时钟每经历使之送给计数器的触发时钟每经历 N-0.5 个周期就翻转一次。个周期就翻转一次。2任意任意 N+A/B 分频分频 分别设计一个分频值为分别设计一个分频值为 N 和分频值和分频值 N1 的整数分频器,采用脉冲计数来的整数分频器,采用脉冲计数来 控制单位时间内两个分频器出现的次数。控制单位时间内两个分频器出现的次数。 设设 N 出现的频率为出现的频率为 a,则,则 Na(N+

5、1)(B-a)NBA 求解求解 aB-A; 所以所以 N1 出现的频率为出现的频率为 A。 例如:例如: 8.1 分频分频 N=8 N+1=9 A=1 B=10 a=9 N*a+(N+1)x1=8*9+9*1 10.23 分频:分频: N=10 N+1=11 A=23 B=100 a=77 N*a+(N+1) x1=10*77+11*23【例例 9.10】 占空比占空比 50%的奇数分频(模的奇数分频(模 7) module count7(reset,clk,cout); input clk,reset; output wire cout; reg2:0 m,n; reg cout1,cout

6、2;assign cout=cout1|cout2;/两个计数器的输出相或两个计数器的输出相或 always (posedge clk) begin if(!reset) begin cout1=0; m=0; end else begin if(m=6) m=0; else m=m+1; if(m3) cout1=1; else cout1=0; end end always (negedge clk) begin if(!reset) begin cout2=0; n=0; end else begin if(n=6) n=0; else n=n+1;3if(n3) cout2=1; el

7、se cout2=0; end end endmodule 【例例 9.11】 占空比占空比 50%的奇数分频的奇数分频 module count_num(reset,clk,cout); parameter NUM=13; input clk,reset; output wire cout; reg4:0 m,n; reg cout1,cout2; assign cout=cout1|cout2; always (posedge clk) begin if(!reset) begin cout1=0; m=0; end else begin if(m=NUM-1) m=0; else m=m

8、+1; if(m(NUM-1)/2) cout1=1; else cout1=0; end end always (negedge clk) begin if(!reset) begin cout2=0; n=0; end else begin if(n=NUM-1) n=0; else n=n+1; if(n(NUM-1)/2) cout2=1; else cout2=0; end end endmodule【例例 9.12】 5.5 半整数分频源代码半整数分频源代码 module fdiv5_5(clkin,clr,clkout); input clkin,clr; output reg

9、clkout; reg clk1; wire clk2; integer count;xor xor1(clk2,clkin,clk1); /异或门异或门 always(posedge clkout or negedge clr) /2 分频器分频器 begin if(clr) begin clk1=1b0; end else clk1=clk1; endalways(posedge clk2 or negedge clr) /模模 5 分频器分频器 begin if(clr) begin count=0; clkout=1b0; endelse if(count=5) /要改变分频器的模,只

10、需改变要改变分频器的模,只需改变 count 的值的值 begincount=0; clkout=1b1; end else begin count=count+1; clkout=1b0; end end endmodule 【例例 9.13】 8.1 小数分频源代码小数分频源代码 module fdiv8_1(clk_in,rst,clk_out); input clk_in,rst; output reg clk_out;reg3:0 cnt1,cnt2;/cnt1 计分频的次数计分频的次数4always(posedge clk_in or posedge rst) begin if(r

11、st) 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; cnt1=cnt1+1; clk_out=1; end end else begin /1 次次 9 分频分频 if(cnt28) begin cnt2=cnt2+1; clk_out=0; end else begin cnt2=0; cnt1=0; clk_out=1; end end end endmodule 流水线

12、流水线: 如某个复杂逻辑功能的实现需较长的延时,可将其分解为几个(如如某个复杂逻辑功能的实现需较长的延时,可将其分解为几个(如 3 个)步骤来实现,每个)步骤来实现,每 一步的延时变小,在各步间加入寄存器,以暂存中间结果,这样可大大提高整个系统的最一步的延时变小,在各步间加入寄存器,以暂存中间结果,这样可大大提高整个系统的最 高工作高工作两级流水实现的两级流水实现的 8 位加法器位加法器 module adder_pipe2(cout,sum,ina,inb,cin,clk); input7:0 ina,inb; input cin,clk; output reg7:0 sum; output

13、 reg cout; reg3:0 tempa,tempb,firsts; reg firstc; always (posedge clk) begin firstc,firsts=ina3:0+inb3:0+cin; tempa=ina7:4; tempb=inb7:4; end always (posedge clk) begin cout,sum7:4=tempa+tempb+firstc; sum3:0=firsts; end endmodule 四级流水线实现的四级流水线实现的 8 位加法器位加法器 module pipeline(cout,sum,ina,inb,cin,clk);

14、5output7:0 sum;output cout; input7:0 ina,inb;input cin,clk; reg7:0 tempa,tempb,sum; reg tempci,firstco,secondco,thirdco, cout; reg1:0 firsts, thirda,thirdb; reg3:0 seconda, secondb, seconds; reg5:0 firsta, firstb, thirds; always (posedge clk)begin tempa=ina; tempb=inb; tempci=cin; end /输入数据缓存输入数据缓存

15、always (posedge clk)begin firstco,firsts=tempa1:0+tempb1:0+tempci; /第一级加(低第一级加(低 2 位)位) firsta=tempa7:2; firstb=tempb7:2; /未参加计算的数据缓存未参加计算的数据缓存 end always (posedge clk) begin secondco,seconds=firsta1:0+firstb1:0+firstco,firsts; seconda=firsta5:2; secondb=firstb5:2; /数据缓存数据缓存 end always (posedge clk) begin thirdco,thirds=seconda1:0+

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

当前位置:首页 > 生活休闲 > 社会民生

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