北航verilog上机实验报告 联系客服

发布时间 : 星期五 文章北航verilog上机实验报告更新完毕开始阅读

Verilog上机实验报告

六、 仿真波形

七、 总结及对波形的说明

1. 实验结论

从波形中可以看出

在第一个时钟周期中crtl=100=4,此时out=in4=1101。 在第二个时钟周期中ctrl=101=5,此时out=in5=0110。

在第三个时钟周期中ctrl不变,但in5发生了变化,此时out=in5=1000。 可见,随着ctrl和输入的变化,out都发生了相应的变化,满足题目的要求。

2. 实验总结

本次实验是Verilog上机的第五个实验,是一个较为复杂的组合逻辑电路。在实现这样的电路的时候,一般考虑条件分支语句(如if..else或者case等)来实现相应的功能。

25

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