基于System-Verilog的FPGA设计与仿真

一、System-Verilog

System Verilog的发展
SystemVerilog 的出现是为了因应日益复杂的数位电路设计和验证需求。虽然Verilog HDL 在早期的数位电路设计中得到了广泛应用,但随着技术的发展和电路复杂度的增加,Verilog HDL 在某些方面已经显得有些不足以满足设计者和验证工程师的需求。因此,有必要引入一种更强大、更灵活、更先进的硬体描述语言,从而诞生了SystemVerilog。

和Verilog的区别
Verilog
基本特性:

Verilog是一种高级的硬件描述语言,主要用于RTL(寄存器传输级)建模。
它提供了基本的建模结构,如模块、端口、线网列表、赋值语句、条件语句、循环语句等。
Verilog支持两种主要的描述风格:行为级建模(使用always块)和结构级建模(使用模块实例化)。
应用范围:

Verilog广泛用于数字电路的设计和验证,尤其是在ASIC(应用特定集成电路)和FPGA(现场可编程门阵列)的开发中。
它适用于简单的逻辑设计、复杂的微处理器设计以及PCB(印刷电路板)级别的设计。
局限性:

Verilog在设计大型、复杂的系统时可能会遇到一些限制,特别是在验证和测试方面。
它缺乏一些高级特性,如面向对象编程、高级验证构造和系统级建模。
SystemVerilog
基本特性:

SystemVerilog是Verilog的扩展,包含了Verilog的所有功能,并增加了许多新的特性。
它引入了面向对象编程(OOP)的概念,如类、继承、封装和多态性,这使得设计和验证更加模块化和可重用。
SystemVerilog提供了高级的数据类型、断言、覆盖率指令和随机化特性,这些特性在验证复杂系统时非常有用。
它支持系统级建模和低级别的硬件描述,使得设计可以从概念验证到硅实现的整个过程都得到支持。
应用范围:

SystemVerilog主要用于复杂的SoC(系统芯片)设计和验证,尤其是在需要高级验证技术和系统级建模的场景中。
它适用于验证复杂的IP核、总线接口、内存控制器以及多处理器系统。
优势:

SystemVerilog的高级特性使得设计和验证过程更加高效,减少了设计周期和成本。
它的面向对象特性和随机化特性使得创建复杂的测试环境和验证平台成为可能。
语法上两者的主要区别:

在语法上,Verilog和SystemVerilog之间存在一些显著的区别。这些区别反映了SystemVerilog在Verilog基础上增加的高级特性和功能。以下是一些主要的语法差异:

  1. 数据类型和变量声明
    Verilog:

变量声明必须指定数据类型(如wire, reg, integer等)。
变量类型必须一致,不能在同一个模块中混用不同类型的变量。
SystemVerilog:

引入了更多的数据类型,如logic, bit, byte, shortint等。
支持类型自动推导,变量可以在声明时省略类型,编译器会根据上下文自动推断。
支持结构体(struct)和联合体(union)等复杂的数据类型。
2. 面向对象编程
Verilog:

不支持面向对象编程。
SystemVerilog:

支持类(class)和对象的概念,允许创建类的实例,支持继承、封装和多态性。
可以使用new操作符创建对象,并使用dot操作符访问对象的成员。
3. 过程块和函数
Verilog:

使用always块来描述时序逻辑和行为模型。
使用task和function来定义过程和函数,但不支持函数作为参数传递。
SystemVerilog:

引入了always块的改进版本,如always_comb, always_ff, always_latch等,以提供更精确的时序控制。
函数(function)可以作为参数传递,支持返回值,并且可以重载。
4. 断言和覆盖率
Verilog:

不原生支持断言和覆盖率。
SystemVerilog:

支持assert语句和covergroup,用于验证设计的正确性和覆盖率。
可以定义属性(property)和假设(sequence),用于形式验证和测试。
5. 随机化和约束
Verilog:

不支持随机化和约束。
SystemVerilog:

提供了随机化(randomize)方法和约束(constraint)系统,用于生成随机测试和创建复杂的测试场景。
支持随机化序列和约束块,使得测试更加自动化和系统化。
6. 并发和同步
Verilog:

并发语句(如assign和always块)和同步语句(如begin和end)的使用较为分离。
SystemVerilog:

支持更高级的并发构造,如fork和join,以及disable语句,用于更精细的控制并发执行和同步。
7. 命名和作用域
Verilog:

命名规则相对简单,作用域主要依赖于模块和端口。
SystemVerilog:

引入了包(package)的概念,允许跨模块共享类型定义和函数。
支持命名空间(namespace),提供了更好的作用域管理。
这些语法上的差异使得SystemVerilog在设计和验证复杂系统时提供了更多的灵活性和功能。随着电子系统设计的不断进步,SystemVerilog的这些高级特性变得越来越重要。

二、流水灯

代码
led_flow.sv

module led_flow (input logic clk,       // 时钟信号input logic rst_n,     // 复位信号(低有效)output logic [7:0] led // 8位LED输出
);logic [23:0] counter;  // 24位计数器,用于产生慢时钟信号// 计数器逻辑always_ff @(posedge clk or negedge rst_n) beginif (!rst_n)counter <= 24'd0;elsecounter <= counter + 1;end// LED流水灯逻辑always_ff @(posedge counter[23] or negedge rst_n) beginif (!rst_n)led <= 8'b0000_0001;elseled <= {led[6:0], led[7]};end
endmodule

testbench

module led_flow_tb;logic clk;logic rst_n;logic [7:0] led;// 实例化待测试的流水灯模块led_flow uut (.clk(clk),.rst_n(rst_n),.led(led));// 时钟信号生成initial beginclk = 0;forever #10 clk = ~clk; // 50MHz时钟周期为20nsend// 测试逻辑initial begin// 初始化信号rst_n = 0;#100;rst_n = 1;// 仿真运行一段时间后结束#1000000;$stop;end
endmodule

三、实验效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350552.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

甘肃这款饼子很火 你是否有吃过呢

白吉饼那独特的外形&#xff0c;圆圆的十分可爱。&#x1f44f;它的表皮酥脆&#xff0c;内里绵软&#xff0c;麦香四溢。&#x1f60b;拿在手里沉甸甸的&#xff0c;就知道用料十足。 无论是直接吃&#xff0c;感受那纯粹的面香&#xff0c;还是夹上腊汁肉&#xff0c;变成美味…

智慧监狱技术解决方案

1. **建设背景**&#xff1a;介绍了智慧监狱建设的战略部署&#xff0c;包括司法部提出的“数字法治、智慧司法”信息化体系建设&#xff0c;以及智慧监狱建设的总体目标、重点任务和实施步骤。 2. **建设需求**&#xff1a;分析了当前监狱系统存在的问题&#xff0c;如子系统…

Python 小市值股票模型代码及回测分析

目录 一、模型介绍 二、代码详解 2.1 初始化函数 2.2 股票筛选过滤函数 2.3 止损函数 2.4 开盘时运行函数 2.5 调仓函数 三、回测结果分析 3.1 收益净值图与概述 3.2 模型收益概览 3.3 年度收益图 3.4 月度收益的时间序列 3.5 月度收益热力图 3.6 月度收益频次分…

手机上安装AI模型是一种什么体验?

昨天参加微软的AI DAY活动&#xff0c;看到微软的技术大佬分享了一个场景&#xff0c;就是坐飞机从上海到北京&#xff0c;机长广播因为天气原因&#xff0c;飞机需要盲降&#xff0c;他说当时听到盲降第一反应感觉有点恐慌&#xff0c;但是因为飞机上受限于网络环境&#xff0…

玄机平台应急响应—MySQL应急

前言 这个是比较简单的&#xff0c;其实和MySQL没啥太大的关系&#xff0c;没涉及太多MySQL的知识。看一下它的flag要求吧。 flag1 它说黑客写入的shell&#xff0c;那我们就去它的网站目录去看看&#xff0c;果然有一个叫sh.php的文件。 flag1{ccfda79e-7aa1-4275-bc26-a61…

C++ 18 之 函数的重载

c18函数的重载.cpp #include <iostream> #include <string.h> using namespace std;void fun4(int a) {cout << "int a: "<< a << endl; } void fun4(double a) {cout << "double a: " << a << endl; }v…

图书管理系统(SpringBoot+SpringMVC+MyBatis)

目录 1.数据库表设计 2.引入MyBatis和MySQL驱动依赖 3.配置数据库&日志 4.Model创建 5.用户登录功能实现 6.实现添加图书功能 7.实现翻页功能 1.数据库表设计 数据库表是应⽤程序开发中的⼀个重要环节, 数据库表的设计往往会决定我们的应⽤需求是否能顺利实现, 甚至决…

挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构

目标 在清晨的代码编辑器上&#xff0c;一场新的挑战即将开始。程序员们肃立于安静的办公室&#xff0c;眼神专注地盯着屏幕&#xff0c;等待着编译器的一声提示。 随着编译器输出的激动人心的"start!"的提示&#xff0c;战斗的序幕拉开了。Bug如潮水般涌来&#x…

SAP Build 2-PDF数据提取与决策

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent&#xff0c;否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…

什么是无头浏览器以及其工作原理?

如果您对这个概念还不熟悉&#xff0c;那么使用无头网络浏览器的想法可能会让您感到不知所措。无头浏览器本质上与您熟悉的网络浏览器相同&#xff0c;但有一个关键区别&#xff1a;它们没有图形用户界面 (GUI)。这意味着没有按钮、选项卡、地址栏或视觉显示。 相反&#xff0c…

极致深耕,打造核心竞争壁垒——探寻蓝思科技穿越周期的密码

作者 | 曾响铃 文 | 响铃说 一家企业&#xff0c;如何才能在时代变幻的风云中不计较一时得失&#xff0c;长期稳健发展&#xff0c;穿越周期&#xff1f;本期主题就来探寻一家在湖南的国际化企业的发展密码。 穿越周期的企业&#xff0c;都在坚持一个驱动发展的“原点” 细…

Python虚拟环境的配置

前言&#xff1a; 本人一度被Python的虚拟环境的配置所困扰&#xff0c;前段时间抽空学习了一下&#xff0c;现在总结一下方法&#xff0c;供大家参考。 先使用winr打开命令行窗口。 展示所有虚拟环境 conda env list 创建虚拟环境 例如我们创建一个叫做py_sk的虚拟环境 …

Windows下的zip压缩包版Mysql8.3.0数据迁移到Mysql8.4.0可以用拷贝data文件夹的方式

Windows下的zip压缩包版Mysql8.3.0数据迁移到Mysql8.4.0可以用拷贝data文件夹的方式 拷贝后, 所有账户和数据都是一样的 步骤 停止MySQL服务 net stop mysql 或 sc.exe stop mysql net stop mysqlsc.exe stop mysql卸载 Mysql8.3.0 的服务 mysqld remove 或 mysqld remove m…

工资信息管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;公告管理&#xff0c;津贴管理&#xff0c;管理员管理&#xff0c;绩效管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;津…

MEMS:Lecture 17 Noise MDS

讲义 Minimum Detectable Signal (MDS) Minimum Detectable Signal&#xff08;最小可检测信号&#xff09;是指当信号-噪声比&#xff08;Signal-to-Noise Ratio, SNR&#xff09;等于1时的输入信号水平。简单来说&#xff0c;MDS 是一个系统能够分辨出信号存在的最低输入信号…

Opencv基本操作

Opencv基本操作 导入并使用opencv进行图像与视频的基本处理 opencv读取的格式是BGR import cv2 #opencv读取的格式是BGR import numpy import matplotlib.pyplot as plt %matplotlib inline图像读取 通过cv2.imread()来加载指定位置的图像信息。 img cv2.imread(./res/ca…

HAL库开发--串口

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 开发流程 串口功能配置 串口功能开启 串口中断配置 串口参数配置 查询配置结果 发送功能测试 中断接收功能测试 printf配置 DMA收发 配置 DMA发送 DMA接收(方式1) DMA接收(方式2) 总结 前言…

OPNsense 24.1 - 基于 FreeBSD 的开源防火墙和路由平台

OPNsense 24.1 - 基于 FreeBSD 的开源防火墙和路由平台 请访问原文链接&#xff1a;https://sysin.org/blog/opnsense/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 关于 OPNsense OPNsense 是一个开源、易于使用且易于构建…

进程的创建和管理

一. 实验内容 1&#xff0e; 编写一个程序&#xff0c;程序中创建一个子进程。然后父、子进程各自独立运行&#xff0c;父进程不断地在标准输出设备&#xff08;即显示器&#xff09;上输出字母p和回车&#xff08;输出30次或以上&#xff09;&#xff0c;子进程不断地在标准输…

服务器远程桌面经常连接不上,造成远程桌面连接不上的原因都有哪些

服务器远程桌面连接不稳定或经常连接不上是一个较为常见的技术问题&#xff0c;其可能的原因涉及多个层面&#xff0c;包括网络设置、服务器配置、系统安全等方面。下面将详细探讨一些可能造成远程桌面连接问题的主要原因&#xff1a; 首先&#xff0c;网络连接不稳定是导致远…