可编程FPGA数字系统设计实验指导书 - 图文(4)

2019-05-24 11:21

14. 在上面界面上点“(等待一段时间或重) 15. 运行实验板,看逻辑变化

”将编译后的文件“XX.sof”下载到实验板中,看下载指示条

1 6

第三部分 Verilog HDL语言设计实验

实验一 简单的组合逻辑和时序逻辑的设计 一、实验目的

1、掌握基本组合逻辑电路的实现方法,掌握连续赋值语句和条件赋值语句的使用方法; 2、掌握基本时序逻辑电路的实现,掌握always语句的使用方法。

二、实验原理、内容及步骤

1、简单组合逻辑设计

描述组合逻辑电路通常利用assign连续赋值语句的数据流方式。连续赋值语句将值赋给线网(连续赋值不能为寄存器赋值)。连续赋值语句只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算,如果结果值有变化,新结果就赋给左边的线网。

连续赋值的目标类型如下:1) 标量线网;2) 向量线网;3) 向量的常数型位选择;4) 向量的常数型部分选择;5) 上述类型的任意的拼接运算结果。

组合逻辑设计示例:可综合的数据比较器。它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。

模块源代码:

//--------------- 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

测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。

测试模块源代码:

`timescale 1ns/1ns //定义时间单位。

`include \包含模块文件。在有的仿真调试环境中并不需要此语句。 //而需要从调试环境的菜单中键入有关模块文件的路径和名称 module comparetest; reg a,b; wire equal;

initial //initial常用于仿真时信号的给出。 begin a=0; b=0;

#100 a=0; b=1;

1 7

#100 a=1; b=1; #100 a=1; b=0;

#100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end

compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。 endmodule

2、简单时序逻辑设计

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型,我们通常使用always块和 @(posedge clk)或 @(negedge clk)的结构来表述时序逻辑。

时序逻辑设计示例:可综合的1/2分频器模型。 // 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;

end endmodule

在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的。对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号reset,当reset为低电平时,对电路中的寄存器进行复位。

测试模块的源代码:

//------------------- clk_Top.v ----------------------------- `timescale 1ns/100ps `define clk_cycle 50 module clk_Top.v

reg clk,reset; wire clk_out;

always #`clk_cycle clk = ~clk; initial

begin

clk = 0; reset = 1; #100 reset = 0; #100 reset = 1; #10000 $stop; end

half_clk half_clk(.reset(reset),.clk_in(clk),.clk_out(clk_out)); endmodule

1 8

3、组合逻辑及时序设计题

1. 设计一个字节(8位)比较器。要求:比较两个字节的大小,如a[7:0]大于 b[7:0],则点亮

LEDR0,否则点亮LEDR1;用DE2开发板上的switches SW17-0作为输入,用LED和7-segment displays显示为16进制。 2.作clk_in的二分频clk_out,要求输出与上例的输出正好反相。编写测试模块,给出测试波形。

三、实验报告要求

1、简要描述Verilog HDL中实现组合逻辑和时序逻辑的不同语法结构;

2、实验报告应包括Modelsim环境下仿真得到的波形和QuatusII环境下综合得到RTL级电路图; 3、实验报告应附硬件仿真的波形或显示的照片。

1 9

实验二 复杂时序逻辑电路的设计 一、实验目的

1、掌握条件语句if…else在复杂时序逻辑设计中的应用; 2、掌握阻塞赋值与非阻塞赋值的概念和区别,掌握阻塞赋值的使用情况。

二、实验原理、内容及步骤

1.条件语句在Verilog HDL中的使用

与常用的高级程序语言一样,为了描述较为复杂的时序关系,Verilog HDL提供了条件语句供分支判断时使用。在可综合风格的Verilog HDL模型中常用的条件语句有if…else和case…endcase两种结构,用法和C程序语言中类似。两者相较,if…else用于不很复杂的分支关系,实际编写可综合风格的模块、特别是用状态机构成的模块时,更常用的是case…endcase风格的代码。 条件语句示例:可综合风格的分频器。它的功能是将10M的时钟分频为500K的时钟。基本原理与1/2分频器是一样的,但是需要定义一个计数器,以便准确获得1/20分频。

模块源代码:

// --------------- fdivision.v ----------------------------- module fdivision(RESET,F10M,F500K);

input F10M,RESET; output F500K; reg F500K; reg [7:0]j;

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; end endmodule

测试模块源代码:

//--------------- fdivision_Top.v ------------------------

2 0


可编程FPGA数字系统设计实验指导书 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国家电网国网招聘综合能力测试考试笔试题内容试卷历年考试真题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: