硬件描述语言与FPGA技术实验指导书(2012版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《硬件描述语言与FPGA技术》
实验指导书
西北工业大学
2012/10/10
目录
实验一简单的组合逻辑设计 (3)
实验二简单分频时序逻辑电路的设计 (6)
实验三利用条件语句实现计数分频时序电路 (9)
实验四阻塞赋值与非阻塞赋值的区别 (12)
实验五用always块实现较复杂的组合逻辑电路 (16)
实验六在Verilog中使用函数 (20)
实验七在Verilog HDL中使用任务(task) (23)
实验八利用有限状态机进行时序逻辑的设计 (27)
实验九利用状态机实现比较复杂的接口设计 (32)
练习十利用SRAM设计一个FIFO (39)
实验一简单的组合逻辑设计
一、实验目的
1. 学习Quartus和ModSim两种EDA工具的使用方法;
2.掌握基本组合逻辑电路的实现方法;
3.初步了解两种基本组合逻辑电路的生成方法;
4.学习测试模块的编写;
5.通过综合和布局布线了解不同层次仿真的物理意义。
二、实验内容
本次实验采用Verilog HDL语言设计一个可综合的数据比较器,其功能是比较数据a与数据b的结果,如果两个数据相同,则输出结果1,否则给出结果0;并写出测试模型,使其进行比较全面的测试。
三、实验仪器、设备
预装了开发工具ModelSimSE、synplify的PC机。
四、实验原理
1.组合逻辑电路是指在任何时刻,输出状态只决定于同一时刻各输入状态的组合而与
电路以前状态无关,而与其他时间的状态无关。其逻辑函数如下:
Li=f(A1,A2,A3……An) (i=1,2,3…m)
其中,A1~An为输入变量,Li为输出变量。
2.组合逻辑电路的特点归纳如下:
① 输入、输出之间没有返馈延迟通道;
② 电路中无记忆单元。
3.组合逻辑设计示例:可综合的数据比较器。它的功能是比较数据a与数据b,如果
两个数据相同,则给出结果1,否则给出结果0。描述组合逻辑时常使用assign
结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格
式。
模块源代码:
//--------------- compare.v -----------------
module compare(equal,a,b);
output equal;
assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时,
//equal输出为0。
endmodule
测试模块源代码:
`timescale 1ns/1ns
`include "./compare.v"
module comparetest;
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 $stop;
end
compare compare1(.equal(equal),.a(a),.b(b));
endmodule
仿真波形如下:
五、实验步骤
1.建立工程文件,编写模块源码和测试模块,要求测试模块对源文件进行比较全面的
2.编译源码和测试模块,用测试模块对源文件进行测试,并进行仿真;
3.观察综合后生成的文件和源文件的不同点和相同点。
4. 综合时采用不同的FPGA器件,观察综合后的结果有什么不同。
六、实验报告要求
1.要求实验报告中有编写模块源码和测试模块;
2.要求实验报告中有综合后RTL图形;
3.要求实验报告中有仿真后的波形;
4. 对课后思考题进行分析说明。
七、实验注意事项
1.采用Altera公司的Cyclone II系列的EP2C35型FPGA作为建立工程、代码编译、综合库时使用的库器件;
2.综合使用synplify工具,布局布线使用quartus II自带工具;
3.仿真使用ModelSim工具。
八、思考题
1.课本练习一的测试方法二中,第二个initial块有什么用?它与第一个initial 块有什么关系?
2.如果在第二个initial块中,没有写出#10000或者$stop,仿真会如何进行?
3.比较两种测试方法,哪一种更全面?
实验二简单分频时序逻辑电路的设计
一、实验目的
1.掌握条件语句在简单时序模块设计中的使用;
2. 掌握verilog语句在简单时序模块设计中的使用;
3.学习在Verilog模块中应用计数器;
4.学习测试模块的编写、综合和不同层次的仿真。
二、实验内容
1.使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑,设计1/2分频的可综合模型。得到如下波形图:
2.对模块进行RTL级仿真、综合后门级仿真,布局布线仿真;
三、实验仪器、设备
预装了开发工具synplify、ModelSimSE的PC机。
四、实验原理
1.使用always过程赋值语句对上升沿进行响应,当时钟信号上升沿到来时,系统判断清零信号是否为0,如果为0,则clk_out信号清零,否则clk_out信号翻转clk_out=~clk_out。
2.系统1/2分频原理:一个时钟周期的上升沿时刻,若清零信号reset不为0,输出信号跳变一个周期,输入时钟信号需经过两个周期的上升沿,输出周期为输入周期的两倍,输出频率为输入频率的1/2,这样就完成了1/2分频的效果。
下面是一个可综合的1/2分频器模型。
//half_clk.v---------------------------------------
module half_clk(reset,clk_in,clk_out);
input clk_in,reset;
output clk_out;