当前位置: 首页 > news >正文

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

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

      • 1,verilog中使用函数function
      • 2,RTL代码
      • 3,测试代码
      • 4,输出波形

1,verilog中使用函数function

目的:
(1)了解函数的定义和在模块设计中的使用;
(2)了解函数的可综合性问题;
(3)了解许多综合器不能综合复杂的算术运算;

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

2,RTL代码

//
module	try_funct(
input				clk,
input				reset,
input	[3:0]		n,output	reg	[31:0]	result
);always@(posedge clk)	beginif(!reset)result	<= 0;elseresult	<= n * factorial(n)/((n * 2) + 1);//	verilog在整数除法运算结果中不考虑余数
endfunction	[31:0]	factorial;	// 	函数定义,返回的是一个32位的数
input		[3:0]	operand;		//	输入只有一个4位的操作数
reg			[3:0]	index;			//	函数内部计数用中间变量beginfactorial = operand ? 1 : 0;		//	先定义操作数为0时,函数的输出是0;不是0时,是1for(index = 2; index <= operand; index = index + 1)factorial = index * factorial;	// 表示阶乘的算术迭代运算end
endfunctionendmodule

3,测试代码

//	测试模块
//	`include	"./tryfunct.v"
`timescale		1ns/100 ps
`define			clk_cycle 50module			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;	// 复位信号恢复高电平后才开始输入nfor(i = 0; i<=15; i=i+1)	begin#200	n = i;end#100;	$stop;
endalways #`clk_cycle	clk = ~clk;try_funct	u_try_funct(
.clk	(clk),
.n		(n),
.result	(result),
.reset	(reset)
);endmodule

4,输出波形

在这里插入图片描述
在这里插入图片描述

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

但是,vivado下不可以将其生成 RTL netlist,如下图所示,
在这里插入图片描述

相关文章:

  • 【CSH 入门基础 8 -- csh 中 set 与 setenv 的区别 】
  • 谷歌浏览器任意文件访问漏洞(CVE-2023-4357)复现
  • ky10 server aarch64 离线安装openssl3.1.4
  • Linux防火墙常用操作及端口开放
  • 车牌识别 支持12种中文车牌类型 车牌数据集下载
  • 使用契约的链上限价订单
  • 股票池(三)
  • MAVEN——PACKAGE、INSTALL、DEPLOY的联系与区别
  • Linux环境下C++ 接入OpenSSL
  • sql server修改表结构及字段数据类型
  • Android Studio 安装及使用
  • 中国出海主力系列专访之三七互娱:亚马逊云科技助力三七互娱海外“出圈”之路
  • go 适配器模式
  • MySQL/Oracle用逗号分割的id怎么实现in (逗号分割的id字符串)。find_in_set(`id`, ‘1,2,3‘) 函数,
  • 从哪些方面分析Linux内核源码
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Android 架构优化~MVP 架构改造
  • canvas 高仿 Apple Watch 表盘
  • JS函数式编程 数组部分风格 ES6版
  • linux安装openssl、swoole等扩展的具体步骤
  • Mac转Windows的拯救指南
  • PAT A1050
  • PhantomJS 安装
  • 闭包--闭包之tab栏切换(四)
  • 程序员最讨厌的9句话,你可有补充?
  • 分享一份非常强势的Android面试题
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端面试题总结
  • 浅谈web中前端模板引擎的使用
  • 实习面试笔记
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​TypeScript都不会用,也敢说会前端?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #QT(TCP网络编程-服务端)
  • $jQuery 重写Alert样式方法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (39)STM32——FLASH闪存
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (定时器/计数器)中断系统(详解与使用)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)windows配置JDK环境
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (七)理解angular中的module和injector,即依赖注入
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)Dubbo快速入门、介绍、使用
  • (一)基于IDEA的JAVA基础1
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转) 深度模型优化性能 调参
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)四层和七层负载均衡的区别