北航verilog实验报告(全)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
实验一 (2)
实验二 (8)
实验三 (14)
实验四 (27)
实验一
实验目的:熟悉硬件开发流程,掌握Modelsim设计与仿真环境,学会简单组合逻辑电路、简单时序逻辑电路设计,不要求掌握综合和综合后仿真。
实验内容:必做实验:练习一、简单的组合逻辑设计
练习二、简单分频时序逻辑电路的设计
选做实验:选做一、练习一的练习题
选做二、7段数码管译码电路
练习一、简单的组合逻辑设计
描述一个可综合的数据比较器,比较数据a 、b的大小,若相同,则给出结果1,否则给出结果0。
实验代码:
模块源代码:
module compare(equal,a,b);
input a,b;
output equal;
assign equal=(a==b)?1:0;
endmodule
测试模块源代码:
`timescale 1ns/1ns
`include "./compare.v"
module t;
reg a,b;
wire equal;
initial
begin
a=0;
b=0;
#100 a=0;b=1;
#100 a=1;b=1;
#100 a=1;b=0;
#100 a=0;b=0;
#100 $stop;
end
compare m(.equal(equal),.a(a),.b(b));
endmodule
实验波形
练习二、简单分频时序逻辑电路的设计
用always块和@(posedge clk)或@(negedge clk)的结构表述一个1/2分频器的可综合模型,观察时序仿真结果。
实验代码:
模块源代码:
module halfclk(reset,clkin,clkout);
input clkin,reset;
output clkout;
reg clkout;
always@(posedge clkin)
begin
if(!reset) clkout=0;
else clkout=~clkout;
end
endmodule
测试模块源代码:
`timescale 1ns/100ps
`define clkcycle 50
module tt;
reg clkin,reset;
wire clkout;
always#`clkcycle clkin=~clkin;
initial
begin
clkin=0;
reset=1;
#10 reset=0;
#110 reset=1;
#100000 $stop;
end
halfclk m0(.reset(reset),.clkin(clkin),.clkout(clkout));
endmodule
练习题1:设计一个字节(8位)的比较器。要求:比较两个字节的大小,并改写测试模型,使其能进行比较全面的测试。观察RTL级仿真、综合后门级仿真和布线后仿真有什么不同,并说明不同的原因。从文件系统中查阅自动生成的compare.vm,compare.vo文件和compare.v文件作比较,说出不同点和相同点。实验代码:
模块源代码:
module compare1(equal,a,b);
input [7:0]a,b;
output equal;
assign equal=(a>b)?1:0;
endmodule
测试模块源代码:
`timescale 1ns/1ns
`include "./compare1.v"
module ttt;
reg [7:0]a,b;
wire equal;
initial
begin
a=8'b00000000;
b=8'b00000000;
#100 a=8'b00001001;b=8'b00100010;
#100 a=8'b00110001;b=8'b00100100;
#100 a=8'b00010001;b=8'b00101000;
#100 a=8'b10000001;b=8'b00110000;
#100 $stop;
end
compare1 m(.equal(equal),.a(a),.b(b));
endmodule
实验分析:RTL,综合后门级仿真和布线后仿真的区别
1.RTL行为级仿真
这个阶段的仿真可以用来检查代码中的语法错误以及代码行为的正确性,其中不包括延时信息。如果没有实例化一些与器件相关的特殊底层元件的话,这个阶段的仿真也可以做到与器件无关。因此在设计的初期阶段不使用特殊底层元件即可以提高代码的可读性、可维护性,又可以提高仿真效率,且容易被重用。
2.综合后门级功能仿真(前仿真)
一般在设计流程中的第二个仿真是综合后门级功能仿真。绝大多数的综合工具除了可以输出一个.VO标准网表文件以外,还可以输出Verilog或者VHDL网表,其中标准网表文件是用来在各个工具之间传递设计数据的,并不能用来做仿真使用,而输出的Verilog或者VHDL网表可以用来仿真,之所以叫门级仿真是因为综合工具给出的仿真网表已经是与生产厂家的器件的底层元件模型对应起来了,所以为了进行综合后仿真必须在仿真过程中加入厂家的器件库,对仿真器进行一些必要的配置,不然仿真器并不认识其中的底层元件,无法进行仿真。Xilinx公司的集成开发环境ISE中并不支持综合后仿真,而是使用映射前门级仿真代替,对于Xilinx开发环境来说,这两个仿真之间差异很小。
3.时序仿真(后仿真)
在设计流程中的最后一个仿真是时序仿真。在设计布局布线完成以后可以提供一个时序仿真模型,这种模型中也包括了器件的一些信息,同时还会提供一个SDF时序标注文件(Standard Delay format Timing Anotation)。SDF时序标注最初使用在Verilog语言的设计中,现在VHDL语言的设计中也引用了这个概念。对于一般的设计者来说并不需知道SDF 对源程序.v的仿真称之为功能仿真,对.vo的仿真称之为网表仿真,这里使用的就是厂家实际用到的元件,是为了确认综合是不是实现了用户预想的功能。和加入sdo之后的仿真是真正加入了线路延时的仿真。