第4章组合与时序逻辑电路设计.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章组合与时序逻辑电路设计 1/6分频参考程序 module div_6(reset,clk_in,clk6_out); input clk_in,reset; output clk6_out; reg clk6_out; parameter WIDTH=2; reg [WIDTH:0]temp; always @(posedge clk_in) begin if(~reset)begin clk6_out<=0; clk10_out<=0; temp<=2; end //复位后当第一个脉冲来开始分频 else begin temp= temp+1 ; if(temp>2) begin clk6_out<= ~clk6_out ; temp<=0; end end end endmodule 1/6分频仿真结果 想一想?如何得到奇数倍的分频电路设计。 作业:设计1/10分频器,并给出仿真结果。 6T ②奇数倍分频器设计 当分频器系数N为奇数时,考虑采用双计数器计数,两个计数器同时计数,一个对输入时钟信号的上升沿计数,另一个则对信号的下降沿计数。计数器从0到N-1循环计数,且计数器的计数值小于(N-1)/2时输出1,计数值大于或等于(N-1)/2时输出0。在这样的控制方式下,分频后输出的波形恰好相差1/2时钟周期,将两个波形进行或(OR)操作后,即可得到所要的波形(占空比50%)。 占空比1/N 的N分频 占空比1/N 的N分频 1 >1 clkin qout2 qout1 clkout 三分频器实现原理图 T 3T 采集上升沿,计数小于(N-1)/2置1,否则置0 采集下升沿,计数小于(N-1)/2置1,否则置0 N=3,从0到N-1重复计数 将采集的上升和下降沿进行相“或”运算,得到1/3分频输出。 带异步复位或置位端口的寄存器可以由一个在always语句中被赋值的变量描述,并且该always语句的敏感列表中包含至少两个边沿敏感的信号,但不包含任何电平敏感的信号。此外,该always语句必须包含一个if条件语句,来指定寄存器的第一个异步赋值行为(如异步复位、置位等等),以及可选的else if嵌套条件语句来指定额外的异步赋值行为。最后一个else语句用于指定同步的寄存器赋值行为。异步赋值语句的输入信号通常连接到寄存器的复位或置位端口,而同步赋值语句的输入信号则连接在寄存器的数据输入端口,即通常所说的D端口。 异步寄存器设计 C:带同步复位的一位寄存器设计: 可见复位的发生是由时钟决定的,也就是说无论复位和使能都在时钟统一控制下进行的过程为同步寄存器。 例4.14 带同步复位的一位寄存器 同步寄存器设计 【例4.15】 带同步清0/同步置1(低电平有效)的一位寄存器 module dff_syn(q,d,clk,set,reset); input d,clk,set,reset; output reg q; always @(posedge clk) begin if(~reset) q<=1'b0; //同步清0,低电平有效 else if(~set) begin q<=1'b1 //同步置1,低电平有效 else q<=d; end endmodule 同步寄存器设计 同步复位说明: ②锁存器设计 在描述锁存器时,always语句中所有赋值表达式等号右边参与赋值的信号必须全部在敏感列表中列出,并且应该使用非阻塞赋值(Non-blocking assignment)来给锁存器变量赋值。该变量在always语句中存在有没有赋值的情况。 A: 一位简单锁存器 注意这里采用触发条件是电平触发(与寄存器采用的边缘触发不同),并且条件语句是不完备的。 B: 含清0控制的锁存器及其Verilog表述 上面采用数据流描述也产生了锁存器,即时序电路,这只是特例,很少采用这种做法,但这里要注意判断条件是不完备的,否则将产生组合电路。 module sel(CLK,D,Q); input CLK,D; output reg Q; always @ (CLK or D) if (CLK) Q <= D; else Q <= 1

文档评论(0)

xinfeiyang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档