教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

Verilog HDL语言设计实验指导书(2004)(3)

来源:网络收集 时间:2026-05-01
导读: begin end j F500K else j endmodule end 测试模块源代码: //--------------- fdivision_Top.v ------------------------ `timescale 1ns/100ps `define clk_cycle 50 module division_Top; reg F10M_clk,RESET; w

begin end

j <= 0;

F500K <= ~F500K;

else

j <= j+1;

endmodule

end

测试模块源代码:

//--------------- fdivision_Top.v ------------------------ `timescale 1ns/100ps `define clk_cycle 50 module division_Top;

reg F10M_clk,RESET; wire F500K_clk; always

#`clk_cycle F10M_clk = ~ F10M_clk; initial

begin

RESET=1; F10M=0; #100 RESET=0; #100 RESET=1; #10000 $stop;

end

fdivision fdivision (.RESET(RESET),.F10M(F10M_clk),.F500K(F500K_clk)); endmodule 仿真波形:

2.设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别

非阻塞赋值语句(<=)右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行,而阻塞赋值语句(=)在每个右端表达式计算完成后立即赋值给左端变量。非阻塞赋值不能用于

9

assign语句中,而只能用于对寄存器型变量进行赋值,只能在intial和always等过程过程块中。阻塞赋值既能用于assign语句,也能用于intial和always等过程赋值中。对于时序逻辑的描述和建模,应尽量使用非阻塞赋值方式。若在同一个always过程块中描述时序和组合逻辑混合电路时也最好使用非阻塞赋值方式。

在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用,有时为了在同一周期实现相互关联的操作,也使用了阻塞赋值语句。

可综合设计中阻塞赋值和非阻塞赋值设计要点:

1)非阻塞赋值不能用于assign持续赋值中,一般只出现在initial和always等过程块中,对reg型变量进行赋值;

2)当用always块来描述组合逻辑时,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值;

3)在向函数funtion的返回值赋值时,应使用阻塞赋值;

4)不能在一个以上的always过程块中对同一个变量赋值,这样会引起冲突,在综合时会报错; 5)在一个模块中,严禁对同一个变量既进行阻塞赋值,又进行非阻塞赋值,这样会在综合时报错;

6)对时序逻辑的描述和建模,应尽量使用非阻塞赋值方式,此外,若在同一个always过程块中描述时序和组合逻辑混合电路时,最好使用非阻塞赋值方式。

阻塞赋值与非阻塞赋值示例:分别采用阻塞赋值语句和非阻塞赋值语句的两个看上去非常相似的两个模块blocking.v和non_blocking.v来阐明两者之间的区别。 模块源代码:

// ------------- blocking.v --------------- module 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;

$display(\

end

endmodule

//------------- non_blocking.v ------------------- module non_blocking(clk,a,b,c);

10

output [3:0] b,c;

input [3:0] a; input clk; reg [3:0] b,c; always @(posedge clk) end

begin b <= a; c <= b;

$display(\

endmodule 测试模块源代码:

//------------- compareTop.v ----------------------------- `timescale 1ns/100ps `include \`include \module compareTop;

wire [3:0] b1,c1,b2,c2;

reg [3:0] a; reg clk; initial

begin end

clk = 0;

forever #50 clk = ~clk;

initial

begin a = 4'h3;

$display(\# 100 a = 4'h7;

$display(\# 100 a = 4'hf;

$display(\# 100 a = 4'ha;

$display(\# 100 a = 4'h2;

11

end

$display(\# 100 $display(\$stop;

non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1);

endmodule 仿真波形(部分):

三、实验设备及实验注意事项

1.Modelsim6.0和Sypnify Pro7.3及以上版本EDA软件

Modelsim是美国Mentor Graphics公司的子公司Model Technology的产品,属于编译型的Verilog/VHDL混合型仿真器。Mentor Graphics公司是世界最著名的从事电子设计自动化(EDA)系统设计、制造、销售和服务的厂家之一。Modelsim可以在同一个设计中单独或混合使用Verilog和VHDL,允许Verilog模块调用VHDL的实体,或VHDL调用Verilog。由于Modelsim是编译型仿真器,使用编译后的HDL库进行仿真,因此在进行仿真前,必须编译所有的待仿真的HDL文件成为HDL仿真库,在编译时使源文件获得优化,提高了仿真速度。Modelsim 可以完成三个层次的Verilog仿真,分别为RTL级仿真、综合后门级仿真、适配后门级仿真。因为其功能的强大和完善,Modelsim已成为基于PC机Windows平台的最流行的HDL仿真和验证工具。

Synplify Pro/Synplify是由位于美国加州的Synplicity公司推出的专门用于FPGA/CPLD的逻辑综合工具,它支持Verilog HDL和VHDL高层次设计描述,在综合优化方面性能优异,应用广泛。Synplify Pro/Synplify支持Verilog 1364-1995标准,能以很高的效率将Verilog设计文件转换为针对选定器件的标准网表,并提供相应设计环境的配置文件,在综合后还可以生成Verilog仿真网表,以便对原设计进行功能仿真。

需要指出的是,最专业和强大的EDA软件都是基于服务器的UNIX软件,限于已有条件,本课程只能选择PC机Windows平台下最流行的Modelsim 和Synplify Pro这两种分别用于仿真和综合的EDA软件。 …… 此处隐藏:1097字,全部文档内容请下载后查看。喜欢就下载吧 ……

Verilog HDL语言设计实验指导书(2004)(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/565706.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)