ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:17.13KB ,
资源ID:4959344      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4959344.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第7章代码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第7章代码.docx

1、第7章代码第7章 基于Verilog的时序电路设计及验证7.1.3 带清零D锁存器一module latch_1_c(Clk,D,Q,Rst); input Clk,D,Rst; output Q; reg Q; always (D or Clk or Rst)if (!Rst) Q=0; / 语句1else if (Clk) Q=D;endmodule程序说明:(1)程序采用具有时序语句特色的进程语句,其中数据信号D、时钟信号Clk和清0(复位)信号Rst都被列于敏感信号表中,实现了Clk的电平触发特性和Rst的异步特性。(2)异步清0实现的效果,就是当Rst一旦变成0,就马上对输出进行清0

2、,而不需要理会时钟、输入数据等的状态。也就是Rst是优先级最高的控制信号,在代码(语句1)中,可通过“ifelse if”语句来实现优先级控制。测试平台设计timescale 1ns/1ns module testbench_latch; reg clk,D,rst; wire Q; initial begin clk=0; #50 clk=1; #70 clk=0; #80 clk=1; end initial begin D=0; repeat(20) #20 D=$random; end initial begin rst=0; #60 rst=1; #80 rst=0; #40 rst

3、=1; endlatch_1_c testbench_latch(clk,D,Q,rst); endmodule7.2.2 D触发器二(异步清零边沿触发)module d_ff_2(D,Clk,Q,Rst,En); input D,Clk,Rst,En; output Q; reg Q; always (posedge Clk or negedge Rst) begin if (!Rst) Q=0; else if (En) Q=D; endendmodule测试平台设计timescale 1ns/1ns module testbench; reg D,Rst,Clk,En;wire Q; i

4、nitial Clk=0; parameter clock_period=20; always #(clock_period/2) Clk=Clk; initial begin D=0; repeat(20) #20 D=$random; end initial begin Rst=0; repeat(20) #20 Rst=$random; end initial begin En=0; repeat(20) #20 En=$random; endd_ff_2 testbench_dff(D,Clk,Q,Rst,En); initial #400 $finish;endmodule 7.2.

5、7 JK触发器module jk_ff(J,K,Clk,Q,Qn); input J,K,Clk; output Q,Qn; reg Q; assign Qn=Q; always (posedge Clk) case(J,K) 2b00:Q=Q; 2b01:Q=1b0; 2b10:Q=1b1; 2b11:Q=Q; default:Q=1bx; endcaseendmodule测试平台设计timescale 1ns/1ns module testbench; reg j,k,Clk; wire Q,Qn; initial Clk=0; parameter clock_period=20; alw

6、ays #(clock_period/2) Clk=Clk; initial begin j=0; repeat(20) #20 j=$random; end initial begin k=0; repeat(20) #20 k=$random; end initial #300 $finish; jk_ff testbench_jk(j,k,Clk,Q,Qn); endmodule7.3.2 基本寄存器二(异步清零异步置1)以下的设计具有异步清零端(Aclr)和异步置1端(Aset),异步清零的优先级比异步置1高。module reg4_2 (Data, Aclr, Aset, Clock

7、, Q); input 3:0 Data; input Aclr; input Aset; input Clock; output 3:0 Q; reg 3:0 Q; always (posedge Clock or negedge Aclr or posedge Aset) if (!Aclr) Q = 4b0000; else if (Aset) Q = 4b1111; else Q = Data;endmodule测试平台设计timescale 1ns/1ns module testbench; reg 3:0 Data;reg Aclr,Aset,Clock;wire 3:0 Q; i

8、nitial Clock=0;parameter clock_period=20;always #(clock_period/2) Clock=Clock;initial begin Data=0;repeat(20) #20 Data=$random; endinitial begin Aclr=0;repeat(20) #20 Aclr=$random; endinitial begin Aset=0; #200 Aset=1; endreg4_2 test_reg(Data, Aclr, Aset, Clock, Q); initial #300 $finish;endmodule7.3

9、.4 移位寄存器二(并入串出单向左移)module shift_reg_piso (Data, Enable, Shiften, Shiftin, Aclr, Clock, Shiftout); input 1:0 Data; input Aclr; input Enable; input Shiften; input Shiftin; input Clock; output Shiftout; reg 1:0 Qaux; always (posedge Aclr or posedge Clock) begin if (Aclr) Qaux = 0; else if (Enable) Qaux

10、 = Data; else if (Shiften) Qaux = Qaux0, Shiftin; / 语句1 end assign Shiftout = Qaux1; / 语句2endmodule程序说明:(1)程序实现2位移位寄存器,串行输出左向移位。(2)程序逻辑与设计一的一致,只是在最后输出的时候,设计一是并行输出整个结果,而设计二是输出最高位,达到串行输出的结果。(3)如果要改为右移,语句1应改为“Qaux = Shiftin, Qaux1;”,并且语句2改为输出最低位Qaux0。测试平台设计(1)timescale 1ns/1ns module testbench; reg 1:0

11、 Data;reg Aclr,Enable,Shiften,Shiftin,Clock;wire Shiftout; parameter clock_period=20;always #(clock_period/2) Clock=Clock;initial begin Data=0; repeat(20) #20 Data=$random; endinitial begin Clock=0; / 时钟信号的初始化,可放在任一个initial过程中 Aclr=0; #40 Aclr=1; #100 Aclr=0; endinitial begin Enable=0; #100 Enable=1

12、; #100 Enable=0; endinitial begin Shiften=0; repeat(20) #20 Shiften=$random; endinitial begin Shiftin=0; repeat(10) #40 Shiftin=$random; endshift_reg_piso testbench_piso(Data, Enable, Shiften, Shiftin, Aclr, Clock, Shiftout); initial #400 $finish;endmodule为了查看效果更完整,要把Qaux也输出显示到Wave窗口中,需要在“sim”窗口中选择“

13、testbench_piso”实例,然后在“objects”窗口中找到Qaux变量,把该变量设置在Wave窗口中显示。如果不把Qaux加入到波形中,光从Shiftout是很难看出其移位过程的。测试平台设计(2)在测试平台设计(1)中,对于每一个控制信号,要么指定变化的时间,要么周期性用随机数生成,这样可以产生不同的测试信号组合。但这样的设计很容易产生一些无意义的状态组合和有些情况未能列出。在测试平台设计(2)中,Aclr和Clock的信号单独产生;另外3个控制和输入信号(Enable,Shiften,Shiftin)则通过循环方法,生成所有可能出现的组合情况;Data输入则随机产生。times

14、cale 1ns/1ns module testbench2; reg 1:0 Data;reg Aclr,Enable,Shiften,Shiftin,Clock;wire Shiftout; reg2:0 CtrlVec;integer I;parameter period=20;always #(period/2) Clock=Clock;initial begin Clock=0;Aclr =0; #160 Aclr =1; endinitial begin Data=0; repeat(12) #20 Data=$random; endinitial begin for (I = 0

15、 ; I =11 ; I = I + 1) beginCtrlVec=I;Enable,Shiften,Shiftin= CtrlVec;#20; endendshift_reg_piso testbench_piso2(Data, Enable, Shiften, Shiftin, Aclr, Clock, Shiftout); initial #240 $finish;endmodule程序说明:(1)I的循环只需要8次即可列举出Enable,Shiften,Shiftin三个控制信号的8种状态组合,但为了测试Aclr为0时的结果,增加了4次循环(I等于811时)。(2)Enable,Sh

16、iften,Shiftin的组合情况从000111变化后,又重新从000开始,因为当I为8(即b1000)时,Enable,Shiften,Shiftin分别获得了低位的0,而最高位的1没有被任何变量获得,这是一个常用技巧。7.4.2 计数器二(带置数)module cnt4_2 (clock, q, aclr, sload, data); input clock; output 3:0 q; input aclr; input sload; input 3:0 data; reg 3:0 qaux; always (posedge clock or posedge aclr) begin i

17、f (aclr) qaux = 4b0000; else if (sload) qaux = data; else qaux = qaux + 1; end assign q = qaux;endmodule测试平台设计timescale 1ns/1nsmodule testbench;reg clock,sload,aclr;reg3:0 data;wire3:0 q;initialclock=0;parameter DELY=20;always #(DELY/2) clock = clock;initial begin sload=0;repeat(15) # DELY sload=$random; endinitial begin aclr=0; # DELY aclr=1; #60 aclr=0; endinitial begin data=0;repeat(15) # DELY data=$random; endcnt4_2 test_cnt_42(clock,q,aclr,sload,data); initial #300 $finish;endmodule

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1