当前位置:首页 > 北航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
共分享92篇相关文档