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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Verilog HDL编程举例.docx

1、Verilog HDL编程举例设计示范和上机习题 练习一简单的组合逻辑设计/(方法一):/-文件名 compare.v -module compare(equal,a,b);input a,b;output equal; assign equal = (a=b)? 1 : 0; /a等于b时,equal输出为1;a不等于b时,equal输出为0。endmodule/(方法二):module compare(equal,a,b);input a,b;output equal;reg equal; always (a or b) if(a=b) /a等于b时,equal输出为1; equal =1

2、; else /a不等于b时,equal输出为0。 equal = 0; /思考:如果不写else 部分会产生什么逻辑? endmodule/- /-测试模块源代码(方法之一):timescale 1ns/1ns / 定义时间单位。include ./compare.v / 包含模块文件。在有的仿真调试环境中并不需要此语句。 /而需要从调试环境的菜单中键入有关模块文件的路径和名称module t; reg a,b; wire equal; initial / initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #1

3、00 a=1; b=0; #100 a=0; b=0; #100 $stop; /系统任务,暂停仿真以便观察仿真波形。 end compare m(.equal(equal),.a(a),.b(b); /调用被测试模块t.m endmodule /- 测试模块源代码(方法之二):-timescale 1ns/1ns / 定义时间单位。include ./compare.v / 包含模块文件。在有的仿真调试环境中并不需要此语句。 /而需要从调试环境的菜单中键入有关模块文件的路径和名称module t; reg a,b; reg clock; wire equal; initial / initi

4、al常用于仿真时信号的给出。 begin a=0; b=0; clock = 0; /定义一个时钟变量 end always #50 clock = clock; /产生周期性的时钟 always (posedge clock) /在每次时钟正跳变沿时刻产生不同的a 和 b begin a = $random%2; / 每次a是 0还是1是随机的。 b = $random%2; / 每次b是 0还是1是随机的。 end initial begin #100000 $stop; end /系统任务,暂停仿真以便观察仿真波形。 compare m(.equal(equal),.a(a),.b(b)

5、; /调用被测试模块t.mendmodule 练习二. 简单分频时序逻辑电路的设计/- 文件名:half_clk.v - module half_clk(reset,clk_in,clk_out);input clk_in,reset;output clk_out;reg clk_out;always (posedge clk_in) begin if(!reset) clk_out=0; else clk_out=clk_out; endendmodule/- 测试模块的源代码:-/- 文件名top.v -timescale 1ns/100psdefine clk_cycle 50modul

6、e top;reg clk,reset;wire clk_out;always #clk_cycle clk = clk; /产生测试时钟initial begin clk = 0; reset = 1; #10 reset = 0; #110 reset = 1; #100000 $stop; end half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out);endmodule练习三. 利用条件语句实现计数分频时序电路 /- 模块源代码:-/ - fdivision.v -module fdivision(RESET,F10M,F500

7、K);input F10M,RESET;output F500K;reg F500K;reg 7:0j; always (posedge F10M) if(!RESET) /低电平复位。 begin F500K = 0; j = 0; end else begin if(j=19) /对计数器进行判断,以确定F500K信号是否反转。 begin j = 0; F500K = F500K; end else j = j+1; endendmodule/- 测试模块源代码:-/- fdivision_Top.v -timescale 1ns/100psdefine clk_cycle 50modu

8、le division_Top; reg F10M,RESET;wire F500K_clk;always #clk_cycle F10M = F10M; initial begin RESET=1;F10M=0;#100 RESET=0;#100 RESET=1;#10000 $stop; endfdivision fdivision (.RESET(RESET),.F10M(F10M),.F500K(F500K_clk);endmodule 练习四. 阻塞赋值与非阻塞赋值的区别/ - 模块源代码:-/ - blocking.v -module blocking(clk,a,b,c); ou

9、tput 3:0 b,c; input 3:0 a; input clk; reg 3:0 b,c; always (posedge clk) begin b = a; c = b; $display(Blocking: a = %d, b = %d, c = %d ,a,b,c); end endmodule/- non_blocking.v -module non_blocking(clk,a,b,c); output 3:0 b,c; input 3:0 a; input clk; reg 3:0 b,c; always (posedge clk) begin b = a; c = b;

10、 $display(Non_Blocking: a = %d, b = %d, c = %d ,a,b,c); end endmodule/ - 测试模块源代码:-/- compareTop.v -timescale 1ns/100psinclude ./blocking.vinclude ./non_blocking.vmodule compareTop; wire 3:0 b1,c1,b2,c2; reg 3:0 a; reg clk; initial begin clk = 0; forever #50 clk = clk; /思考:如果在本句后还有语句,能否执行?为什么? end in

11、itial begin a = 4h3; $display(_); # 100 a = 4h7; $display(_); # 100 a = 4hf; $display(_); # 100 a = 4ha; $display(_); # 100 a = 4h2; $display(_); # 100 $display(_); $stop; end non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1);endmodule 练习五. 用always块实现较复杂的组合逻辑电路/-文件名 alu.v -define plus 3d0define minus 3d1define band 3d2define bor 3d3define unegate 3d4module alu(out,opcode,a,b);output7:0 out;reg7:0 out;input2:0 opcode;input7:0 a,b; /操作数。always(opcode or a or b) /电平敏感的always块begin case(opcode) plus: out = a+b; /加操作。 minus: out = a-b; /减操作。

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

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