北航verilog上机实验报告(6)

2018-12-19 23:01

Verilog上机实验报告

实验六 在Verilog HDL中使用函数

一、 实验目的

1. 了解函数的定义和在模块设计中的使用;

2. 了解函数的可综合性问题;

3. 了解许多综合器不能综合复杂的算术运算。

二、 实验内容

设计一个带控制端的逻辑运算电路,分别完成正整数的平方、立方和最大数为5的阶乘的运算,要求可综合。编写测试模块,并给出各种层次的仿真波形,比较它们的不同。

三、 对任务的理解

本题要求完成一个带控制端的逻辑运算电路。当控制端的控制信号不同的时候,输出与输入之间的函数关系不同,分别为平方、立方和阶乘。

四、 实现思路

1. 首先这个逻辑运算电路应当有3个对外的端口,分别是:一个数据输入端口;

一个2位的功能控制端口;一个结果的输出端口。

2. 由于阶乘的最大数为5,因此输入最大数据为5,输出最大数据为5!=120设输

入数据为3位,输出数据为8位。

3. 通过条件分置于句来选择不同的函数功能。而每个函数功能分别编写来提高程

序的可读性和可移植性。

4. 测试模块产生随机的输入数据以及控制信号,因此利用系统任务$random来实

现。通过一个时钟信号,每隔一段时间产生新的随机数。

五、 代码

1. 主程序

---------------------------------------文件名 func.v--------------------------------------------

module func(in,out,s);

26

Verilog上机实验报告

input [2:0] in; output [7:0] out; input [1:0] s;

reg [7:0] out;

always @ (*) begin case (s)

2'b00: out<=square(in); 2'b01: out<=cube(in); 2'b10: out<=factorial(in); default: out<=out; endcase end

function [7:0] square; input [2:0] a;

assign square=a*a; endfunction

function [7:0] cube; input [2:0] b;

assign cube=b*b*b; endfunction

function [7:0] factorial; input [2:0] c; reg [2:0] index; begin

factorial=c?1:0;

for(index =2;index<=c;index=index+1) factorial=index*factorial; end

endfunction

endmodule

2. 测试模块

----------------------------------------文件名 func_tb.v----------------------------------- `timescale 1ns/1ns

27

Verilog上机实验报告

module t; reg [2:0] in; reg [1:0] s; wire[7:0] out;

reg clk;

initial begin in=0; s=0; clk=0;

#10000 $stop; end

always #50 clk=~clk; always @ (posedge clk) begin

in<={$random}%8; s<={$random}%4; end

func m (in,out,s);

endmodule

六、 仿真波形

七、 总结及对波形的说明

1. 实验结论

从波形中可以看出

当s=00时,in=101=5时,out=00011001=25。即完成了平方的功能。out与前一个

28

Verilog上机实验报告

时刻的out相同,即输出维持不变。

当s=01时,in=100=4时,out=01000000=64,;in=001=1时,out=00000001=1。即完成了立方的功能。

当s=10时,in=101=5,out=01111000=120。即完成了阶乘的功能。 当s=11时,out与前一个时刻的out相同,即输出维持不变。

可见,随着s和输入的变化,out都发生了相应的变化,满足题目的要求。

2. 实验总结

本次实验是Verilog上机的第五个实验,是一个较为复杂的组合逻辑电路。其中运用了函数来实现一些模块化的功能,增强了程序的可读性和可移植性。在今后进行Verilog程序设计的时候,也应当多用这样的写法。

3. Verilog 可综合的总结

1) 所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,

supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。

2) 所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,

delays,UDP,wait。

3) 有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,

real,disable,forever,arrays,memories,repeat,task,while。

29

Verilog上机实验报告

实验七 在Verilog HDL中使用任务(task)

一、 实验目的

1. 掌握任务在Verilog模块设计中的使用;

2. 学会在点评敏感列表的always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法。

二、 实验内容

用两种不同方法设计一个功能相同的模块,该模块能完成四个8位2进制数据的冒泡排序。第一种,模仿上面的例子用纯组合逻辑实现;第二种,假设8位数据是按照时钟节拍串行输入的,要求时钟触发任务的执行法,每个时钟周期完成一次数据交换的操作。比较两种不同方法的运行速度和消耗资源的不同。

三、 对任务的理解

本题要求实现一个数据的冒泡排序。要求两种方法实现。分别是并行输入数据的情况和串行输入数据的情况。

四、 实现思路

1. 第一种方法需要8个对外端口,分别为4个8位的输入端口和4个8位的输出

端口。第二种方法需要7个对外端口,分别是1个8位数据输入端口,1个时钟,1个复位端口和4个8位输出端口。

2. 两种方法中,都要把输入的4个数据储存在内部的四个存储器中,对这四个存

储器的数据进行冒泡排序,再将这四个储存器中的已经排序完成的数据输出。不同之处在于第一种方法直接将输入的数据储存起来。而第二种方法则每进来一个数据进行一次储存和一次排序。

3. 冒泡排序的算法可以通过比较和数据对换位置实现。其中数据对换位置的功能

多次重复使用,可以由一个任务来完成。

五、 代码

1. 主程序

30


北航verilog上机实验报告(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:法务会计视角下网络股票、期货诈骗证据研究

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

马上注册会员

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