System Verilog实现流水灯

文章目录

  • 一 System Verilog
    • 1.1 Systemverilog简介
    • 1.2 与verilog的区别
      • 1.2.1 两态数据类型(1,0)
      • 1.2.2 枚举类型和用户自定义类型
      • 1.2.3 数组与队列
      • 1.2.4 字符串
      • 1.2.5 结构体和联合体
      • 1.2.6 常量
      • 1.2.7 过程语句
      • 等等
  • 二 流水灯代码
  • 三 实验效果
  • 总结
  • 参考资料

一 System Verilog

如果没有硬件描述语言(HDL hardware description language)?
kimi的回答 :需要手动绘制电路原理图、手动布线、要打出电路板后测试验证设计的正确性…
没有HDL,数字硬件电路的设计和设置将更加依赖于手动操作和物理原型,这将大大增加设计周期、成本和出错的风险。此外,设计过程将更加繁琐,且难以实现现代电子系统中常见的复杂性和灵活性。
硬件描述语言可以做什么?
数字电路和系统的设计、建模、仿真、验证和综合。以文本形式描述数字电路的行为和结构,从而创建电路的模型。模拟电路功能,完成仿真。完成电路的优化(综合)。自动化布局和布线。与EDA集成。
硬件验证语言(Hardware Verification Language, HVL):Open Vera ,e语言,PSL,SystemC,SystemVerilog等

1.1 Systemverilog简介

SystemVerilog既是硬件描述语言(rtl(Register Transfer Level)级),也是硬件验证语言(testbench)。用于为ASIC和FPGA/SoC算法和系统建模、设计、仿真、验证、测试和实现。SystemVerilog基于Verilog语言并进行了大量扩张,并在2009年与Verilog一样称为了同一IEEE标准的一部分。支持有约束随机验证、断言和功能覆盖率,并且支持面向对象的编程。

1.2 与verilog的区别

新增数据类型:

  • 两态(I/O)数据类型
  • 枚举类型和用户自定义类型
  • 动态数组、关联数组和队列
  • 联合体和结构体
  • 字符串

1.2.1 两态数据类型(1,0)

verilog中有两种基本数据类型,reg和wire,都是四态数据类型(0,1,Z,X)。存储组合逻辑和时序逻辑的数据类型可以是标量,向量(reg[7:0]),integer,time,real,可以定义一个固定大小的数组。存储都是静态的。

systemverilog中引入两态数据类型 bit(无符号的),short int , int, longint, byte
在这里插入图片描述
logic是system verilog引入的新的四态数据类型,system verilog对reg的数据类型做了改进,可以被连续赋值语句(assign)、门逻辑和模块直接驱动(可以同时用于时序和组合逻辑)。
kimi写的例子:

module top_module;// 定义一个reg类型的变量,它可以被连续赋值语句驱动reg my_signal;// 连续赋值语句,类似于Verilog-1995中的wireassign my_signal = some_condition ? 1'b1 : 1'b0; // some_condition是一个条件表达式// 时钟信号input clk;// 时序逻辑,my_signal也可以在这里被赋值always_ff @(posedge clk) beginmy_signal <= another_condition ? 1'b1 : 1'b0; // another_condition是另一个条件表达式end// 其他逻辑...
endmodule

1.2.2 枚举类型和用户自定义类型

枚举:

// enum [data_type] {name1 = value1, name2 = value2...} var_name;
enum {red, yellow, green} light1, light2;
//使用
light1 = red;
//错误使用
light1 = 0;

在这里插入图片描述
用户自定义类型:

parameter OPSIZE=8;
//将reg[7:0] 定义为opreg_t
typedef reg[OPSIZE-1:0] opreg_t;
//使用
opreg_t op_a, op_b;
module test_typedef();typedef enum {red, green, blue, yellow, white, blach} colors;colors my_colors;initialbegin$display("my_color's default value is %s", my_colors);my_colors = green;my_colors = colors'(2);$display("my_color's %s",my_colors.name);end
endmodule

1.2.3 数组与队列

在这里插入图片描述

  • 静态数组

静态数组扩展了原始数组的概念,允许编程者定义每一位是如何存储的。

bit [7:0] c1; //压缩数组(维数定义在变量标识符之前),可以被指定为任何网线或者标量类型。
real u [7:0]; //非压缩数组(维数定义在变量标识符之后),任何数据类型//静态数组的通用定义方法
//element_data_type [PRange1]...[PRangeN] array_name [Urange1]...[UrangeM];
bit [3:0][7:0] reg_32;
bit [3:0][7:0] mix_array[3]

在这里插入图片描述

  • 动态数组
//data_type array_name [];
bit [3:0] nibble[]; //4bit向量的动态数组;

动态数组实例:

module test_dy_array();int dyn1[],dyn2[];initial begindyn1 = new [100]; //分配100个foreach(dyn1[i])dyn2[i] = i;dyn2 = new [100](dyn1); //复制一个动态数组dyn2[0] = 5;end
endmodule

还有一些内置函数,size()、delete等。使用.语法调用。

  • 队列
    队列是一个大小可变,具有相同数据类型成员的有序集合。0代表第一个成员,$代表最后一个成员。
byte q1[$]; //字节队列
string names[$] = {"Bob"};//字符串格队列

1.2.4 字符串

string myName = "John Smith";

操作符:
== !={str1,str2}{n |str|} 复制n次strstr[index]str.method()
内置方法:
在这里插入图片描述

1.2.5 结构体和联合体

实例:

module struct_example();struct {bit[7:0] my_byte;int my_data;real pi;}my_struct;initial beginmy_struct.my_byte = 8'hab;my_struct=`{0,99,3.14}`;end
endmodule

1.2.6 常量

parameterlocalparamspecparamconst

1.2.7 过程语句

在这里插入图片描述
赋值包括了阻塞、非阻塞、自加/减、过程连续赋值语句。
控制结构包括了条件选择语句if…else,case;循环语句 for ,while, do…while,repeat,forever;跳转语句break,continue,return

等等

二 流水灯代码

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

三 实验效果

在这里插入图片描述
testbench效果
在这里插入图片描述

总结

参考资料

system verilog绿皮书

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

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

相关文章

基于睡眠声音评估睡眠质量

随着健康意识的增强&#xff0c;人们越来越关注睡眠质量。确保获得充足的高质量睡眠对于维持身体健康和心理平衡至关重要。专业的睡眠状态测量主要通过多导睡眠图&#xff08;PSG&#xff09;进行。然而&#xff0c;PSG会给受试者带来显著的身体负担&#xff0c;并且在没有专业…

十大人工智能企业

​​​​​​链接&#xff1a;​​​​​​人工智能品牌排行-人工智能十大公司-人工智能十大品牌-Maigoo品牌榜

C# WPF入门学习主线篇(二十一)—— 静态资源和动态资源

C# WPF入门学习主线篇&#xff08;二十一&#xff09;—— 静态资源和动态资源 欢迎来到C# WPF入门学习系列的第二十一篇。在上一章中&#xff0c;我们介绍了WPF中的资源和样式。本篇文章将深入探讨静态资源&#xff08;StaticResource&#xff09;和动态资源&#xff08;Dynam…

借助ChatGPT完成课题申报书中框架思路写作指南

大家好&#xff0c;感谢关注。我是七哥&#xff0c;一个在高校里不务正业&#xff0c;折腾学术科研AI实操的学术人。可以和我&#xff08;yida985&#xff09;交流学术写作或ChatGPT等AI领域相关问题&#xff0c;多多交流&#xff0c;相互成就&#xff0c;共同进步 在课题申报…

数据挖掘--认识数据

数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性&#xff1a;基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析&#xff1a;基本概念和方法 数据对象与属性类型 属性&#xff1a;是一…

[312. 戳气球] 动态规划寻找转移函数

Problem: 312. 戳气球 文章目录 思路Code 思路 这个哥们写的思路真的很牛逼&#xff0c;转载一下他。 戳气球题解 Code class Solution { public:int maxCoins(vector<int>& nums) {nums.insert(nums.begin(), 1);nums.push_back(1);int n nums.size();vector<v…

MySQL免安装版本安装与配置指南

MySQL&#xff0c;作为一款广受欢迎的关系型数据库管理系统&#xff0c;凭借其高效稳定的特点&#xff0c;成为了众多开发者的首选数据存储和查询工具。除了传统的安装版本外&#xff0c;MySQL还提供了免安装版本&#xff0c;为用户提供了快速部署和使用的便利。本文将详细指导…

# log.info(“消息发送成功“); 红色报错 解决方案

log.info(“消息发送成功”); 红色报错 解决方案 一、错误描述&#xff1a; 在使用 idea 创建 maven 项目导入 lombok 依赖时&#xff0c;出现 log.info 报红错误&#xff0c;检查导入依赖正确&#xff0c;网络正常&#xff0c;错误依旧。 二、解决方案&#xff1a; 1、在 i…

【Java毕业设计】基于JavaWeb的洗衣店管理系统

文章目录 摘要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 SpringBoot框架1.4.2 MySQL数据库1.4.3 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能模块设计3.2 系统流程设计3.3 数据库设计3.3.1 …

嵌入式中C语言经典的面试题分享

#error的作用是什么? #error 指令让预处理器发出一条错误信息,并且会中断编译过程。下面我们从Linux代码中抽取出来一小段代码并做修改得到示例代码: 这段示例代码很简单,当RX_BUF_IDX宏的值不为0~3时,在预处理阶段就会通过 #error 指令输出一条错误提示信息: "…

GPT-4与GPT-4O的区别详解:面向小白用户

1. 模型介绍 在人工智能的语言模型领域&#xff0c;OpenAI的GPT-4和GPT-4O是最新的成员。这两个模型虽然来源于相同的基础技术&#xff0c;但在功能和应用上有着明显的区别。 GPT-4&#xff1a;这是一个通用型语言模型&#xff0c;可以理解和生成自然语言。无论是写作、对话还…

【Python】探索 One-Class SVM:异常检测的利器

我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 &#x1f3b5; 牛奶咖啡《从你的全世界路过》 在数据科学和机器学习领域&#xff0c;异常检测&#xff08;Anomaly Detection&#xff09;是…

SQL Server(四)

SQL Server的优势&#xff1a; 强大的数据管理能力&#xff1a; SQL Server可以处理大量的数据&#xff0c;具有高性能和可靠性&#xff0c;支持多种数据类型和函数&#xff0c;满足复杂数据处理需求。丰富的企业级特性&#xff1a; 提供了高可用性、集成服务、分析服务等丰富…

支持向量机(SVM): 从理论到实践的指南(1)

支持向量机&#xff08;SVM&#xff09;被誉为数据科学领域的重量级算法&#xff0c;是机器学习中不可或缺的工具之一。SVM以其优秀的泛化能力和对高维数据的管理而备受推崇。本文旨在梳理SVM的核心概念以及其在实际场景中的应用。 SVM的核心理念 SVM专注于为二分类问题找到最…

Mysql学习(七)——约束

文章目录 四、约束4.1 概述4.2 约束演示4.3 外键约束 总结 四、约束 4.1 概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。分类&#xff1a; 4.2 约束演示 根据需求&…

SOA的设计模式_1.服务注册表模式

1.注册表 访问注册表&#xff08;Service Registry&#xff09;主要在SOA设计时段使用&#xff0c;虽然它们常常也具有运行时段的功能。注册表支持驱动SOA治理的服务合同、策略和元数据的开发、发布和管理。因此&#xff0c;它们提供一个主控制点&#xff0c;或者称为策略执行…

著名AI人工智能社会学家唐兴通谈数字社会学网络社会学主要矛盾与数字空间社会网络社会的基本议题与全球海外最新热点与关注社会结构社会分工数字财富数字游民数字经济

如果人工智能解决了一切&#xff0c;人类会做什么&#xff1f; 这个问题的背后是人工智能时代的社会主要矛盾会是什么&#xff1f;那么整个社会的大的分工体系就会围绕主要矛盾开展。 《人工智能社会主要矛盾》 在农业社会&#xff0c;主要矛盾是人口增长和土地资源之间的关…

【日常记录】【JS】中文转拼音的库 pinyin-pro

文章目录 1、介绍2、pinyin-pro 基本使用3、参考链接 1、介绍 pinyin-pro 是一个专业的 JavaScript 中文转拼音的库&#xff0c;具备多音字识别准确、体积轻量、性能优异、功能丰富等特点。 常用的案例 搜索功能增强&#xff1a;在输入框输入汉字时&#xff0c;可以转化为拼音输…

[CR]厚云填补_综述整理

SAR-to-Optical Image Translation and Cloud Removal Based on Conditional Generative Adversarial Networks: Literature Survey, Taxonomy, Evaluation Indicators, Limits and Future Directions Abstract 由于光学图像的局限性&#xff0c;其波段无法穿透云层&#xff0…

算法竞赛一句话解题经典问题分析 ©ntsc 2024

原名&#xff1a;算法竞赛一句话解题&经典问题分析 ©ntsc 2024 处理进度 绿&#xff1a;P1381【~P&#xff08;今日进度&#xff09;】蓝&#xff1a;P1099 致CSDN网友&#xff1a; 本文章不定期更新&#xff01;文章链接&#xff1a; 经典问题分析 基础知识与编程…