练习六-使用Questasim来用verilog使用function函数

@TOC(使用Questasim来用verilog使用function函数

1,verilog中使用函数function

目的:

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

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

(3)了解许多综合器不能综合复杂的算术运算;
下例是函数调用的一个简单示范。

采用同步时钟触发运算的执行,每个clk时钟周期都会执行一次运算,并且在测试模块中,通过调用系统任务$display及在时钟的下降沿显示每次计算的结果。

2,RTL代码

cpp 复制代码
//
module	try_funct(
input				clk,
input				reset,
input	[3:0]		n,

output	reg	[31:0]	result
);

always@(posedge clk)	begin
	if(!reset)
		result	<= 0;
	else
		result	<= n * factorial(n)/((n * 2) + 1);
		//	verilog在整数除法运算结果中不考虑余数
end

function	[31:0]	factorial;	// 	函数定义,返回的是一个32位的数
input		[3:0]	operand;		//	输入只有一个4位的操作数
reg			[3:0]	index;			//	函数内部计数用中间变量
	begin
		factorial = operand ? 1 : 0;		//	先定义操作数为0时,函数的输出是0;不是0时,是1
		for(index = 2; index <= operand; index = index + 1)
			factorial = index * factorial;	// 表示阶乘的算术迭代运算
	end
endfunction

endmodule

3,测试代码

cpp 复制代码
//	测试模块
//	`include	"./tryfunct.v"
`timescale		1ns/100 ps
`define			clk_cycle 50

module			tryfunct_top;
reg		[3:0]	n, i;
reg				reset,	clk;

wire	[31:0]	result;

initial	begin
clk 	= 0;
n 		= 0;
reset	= 1;

#100
reset	= 0;	// 产生复位信号的负跳变沿
#100
reset	= 1;	// 复位信号恢复高电平后才开始输入n

for(i = 0; i<=15; i=i+1)	begin
	#200	n = i;
	end

#100;	$stop;
end

always #`clk_cycle	clk = ~clk;

try_funct	u_try_funct(
.clk	(clk),
.n		(n),
.result	(result),
.reset	(reset)
);

endmodule

4,输出波形


注意:
这是在Questasim下跑的,在Vivado下仿真也可以得到同样的结果。

但是,vivado下不可以将其生成 RTL netlist,如下图所示,

相关推荐
156082072194 小时前
JFMRFVU3P5G的bit正常,但烧录mcs程序后加载异常
fpga开发
狂奔蜗牛(bradley)4 小时前
把 EtherCAT 初始化从 FPGA 搬到 ARM:命令通道的接口设计与11个坑
arm开发·人工智能·fpga开发·架构
女神下凡1 天前
芯参谋(37):EEPROM_电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
szxinmai主板定制专家2 天前
工业视觉新思路:FPGA图像预处理+RK NPU推理,实现高速缺陷检测
人工智能·嵌入式硬件·fpga开发·rk3576+codesys
FPGA小徐2 天前
【硬件实战】立创 EDA 绘制 TF/SD 卡模块电路|SPI 模式原理图 + 阻抗匹配 + PCB 布局布线全教程
单片机·嵌入式硬件·fpga开发
狂奔蜗牛(bradley)2 天前
EtherCAT DC 分布式时钟同步的 ModelSim 仿真:从帧模板到从站行为建模
人工智能·嵌入式硬件·fpga开发·架构
ALINX技术博客3 天前
8 通道同步采样 ADC!AN706 波形显示实验 【FPGA黑金云课堂】
fpga开发
szxinmai主板定制专家3 天前
RK3568+FPGA+CODESYS异构控制方案:赋能半导体设备与工业自动化升级
人工智能·fpga开发·自动化·rk3576·半导体设备
辰丁电子3 天前
allegro入门教程-菜单栏Logic
fpga开发·pcb设计·pcb工艺·layout·pcb layout
FPGA小徐4 天前
数字IC/FPGA设计基础_ILA原理与使用
fpga开发