基于System-Verilog的流水灯设计与仿真

文章目录

  • 一、system Verilog
    • 1.语言基本介绍
    • 2.过程赋值和连续赋值
  • 二、编写testbench仿真
    • 1.流水灯testbench
    • 2.2位全加器
    • 3.实验结果


一、system Verilog

1.语言基本介绍

像 Verilog 和 VHDL 之类的硬件描述语言 (HDL) 主要用于描述硬件行为,以便将其转换为由组合门电路和时序元件组成的数字块。为了验证 HDL 中的硬件描述正确无误,就需要具有更多功能特性的面向对象的编程语言 (OOP) 来支持复杂的测试过程,这种语言通常被称为硬件验证语言 (HVL)。

SystemVerilog 是 Verilog 的扩展,具有诸多此类验证功能,能支持工程师在仿真中使用复杂的测试激励文件结构和随机激励来验证设计。

相比于 Verilog,SystemVerilog 的主要优势体现在它能够执行受约束的随机激励、在测试激励文件构造中使用 OOP 功能特性、功能覆盖范围、断言等等。

2.过程赋值和连续赋值

在 SystemVerilog 中,有两种赋值方式:过程赋值(Procedural Assignment)和连续赋值(Continuous Assignment)。它们用于在模块中定义信号的行为。

    1.过程赋值(Procedural Assignment): 过程赋值用于在 always 块内或函数、任务中对信号进行赋值。过程赋值使用 = 或 <= 运算符。

使用 = 运算符进行赋值时,表示阻塞赋值。即,在当前语句执行完成之前,不会进行下一条语句的执行。具有以下特点:
块结束后才完成赋值操作。
值并不是立刻就改变的。
这是一种比较常用的赋值方法。(特别在编写可综合模块时)
使用 <= 运算符进行赋值时,表示非阻塞赋值。即,所有的非阻塞赋值语句都会同时执行,并且不会等待其它语句的完成。具有以下特点:
赋值语句执行完后,块才结束。
值在赋值语句执行完后立刻就改变的。
可能会产生意想不到的结果。
注:一般不会将阻塞赋值和非阻塞赋值一起使用。

二、编写testbench仿真

1.流水灯testbench

module led_chaser_tb;// 参数定义LED数量
parameter NUM_LEDS = 8;
// 测试信号
logic [NUM_LEDS-1:0] leds;
// 时钟信号
logic clk;// 生成时钟
always #10 clk = ~clk;// 实例化被测试模块
led_chaser uut (.clk(clk),.leds(leds)
);// 初始化测试
initial begin// 初始化输入和输出clk = 0;leds = '0;// 运行仿真#100;$finish;
end
// 监视LED状态
always @(posedge clk) begin$display("Time: %0t, LED State: %b", $time, leds);
end
endmodule

2.2位全加器

代码如下(示例):

module full_adder(input wire a,  // 第一个加数input wire b,  // 第二个加数input wire cin, // 进位输入output wire sum, // 结果output wire cout // 进位输出
);assign sum = a ^ b ^ cin; // 计算结果assign cout = (a & b) | (b & cin) | (a & cin); // 计算进位endmodule

3.实验结果

在这里插入图片描述

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

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

相关文章

【实用技巧】Unity中的3D物理系统:刚体——使用技巧

在使用Unity的3D物理系统中的刚体&#xff08;Rigidbody&#xff09;时&#xff0c;有一些技巧可以帮助你更有效地实现物理效果和优化性能。以下是一些使用刚体的技巧&#xff1a; 合理使用Is Kinematic属性&#xff1a; 对于那些不需要物理计算的对象&#xff0c;比如玩家控制…

海底管缆先敷后埋与边敷边埋有什么区别?

海缆铺设有两种方式&#xff1a;“边敷边埋”和“先敷后埋”。 “边敷边埋”冲埋式埋设犁施工法———通过埋设犁(水力开沟机)泵送高压水&#xff0c;在海底冲出一条沟槽的同时&#xff0c;将海缆平铺下去,然后利用在潮汐作用下海床面自行回填(必要时采取压盖保护施工)。主要施…

[linux]如何跟踪linux 内核运行的流程呢

前面已经可以把内核编译出来&#xff0c;但是作为技术狗想看到内核是怎么运行的怎么办&#xff1f; 内核很多代码都是C语言写的&#xff0c;那简单&#xff0c;添加2行代码&#xff1a; include/linux/printk.h 529和530原来的&#xff1a; #define pr_info(fmt, ...) \ …

python查看包的版本

在Python中,有多种方法可以查看已安装包的版本。以下是几种常用的方法: 使用pip命令: 在命令行或终端中,你可以使用pip命令来查看已安装包的版本。例如,要查看numpy的版本,可以运行: pip show numpy这将显示numpy包的详细信息,包括版本号。 如果你使用的是pip3(对应于…

vue input 限制输入,小数点后保留两位 以及 图片垂直居中显示 和 分享 git 小技巧

&#xff08;1&#xff09;input 限制输入&#xff0c;小数点后保留两位 <template><div><el-input v-model"number" input"checkNumber" blur"completeNumber" placeholder"请输入"></el-input></div>…

解析如何在vue3中使用Element-UI组件以及main.js文件

关于vue的环境配置在前文《Vue3项目——配置vue环境和构建一个vue项目》有讲。 配置Vue项目 今天我们配置vue项目时&#xff0c;直接勾选Default即可。 安装Element-UI组件库 首先是对Element-UI组件的安装&#xff0c;正常安装的命令为 npm install element-ui --save但是…

文章解读与仿真程序复现思路——电工技术学报EI\CSCD\北大核心《计及台风时空特性和灵活性资源协同优化的配电网弹性提升策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

78、区间选点

区间选点 题目描述 给定N个闭区间[ai,bi]&#xff0c;请你在数轴上选择尽量少的点&#xff0c;使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数N&#xff0c;表示区间数。 接下来N行&#xf…

鸿蒙轻内核M核源码分析系列二一 03 文件系统LittleFS

2.2 文件信息数组操作 函数LfsAllocFd()设置文件信息数组元素信息。参数fileName为文件路径信息&#xff0c;传出参数fd为文件描述符即数组索引。遍历文件信息数组&#xff0c;遍历到第一个未使用的元素标记其为已使用状态&#xff0c;设置文件路径信息&#xff0c;把数组索引…

【LeetCode最详尽解答】167-两数之和 II-输入有序数组 Two-Sum-II-Input-Array-Is-Sorted

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 链接&#xff1a; 167-两数之和 II-输入有序数组 直觉 这是一个典型的双指针问题。 输入&#xff1a…

gbase8s数据库阻塞检查点和非阻塞检查点的执行机制

1. 检查点的描述 为了便于数据库系统的复原和逻辑恢复&#xff0c;数据库服务器生成的一致性标志点&#xff0c;称为检查点&#xff0c;其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动 如果存在检查点&#…

HTML DOM 对象

HTML DOM 对象 1. 概述 HTML DOM(文档对象模型)是一个跨平台和语言独立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。在HTML DOM中,文档被表示为节点树,其中每个节点代表文档中的一个部分,例如元素、文本或属性。HTML DOM对象是构成这个节点树的基…

Windows 服务器Nginx 下载、部署、配置流程(图文教程)

不定期更新 目录 一、下载Nginx安装包 二、上传安装包 三、启动Nginx 四、Nginx常用命令 五、Nginx&#xff08;最小&#xff09;配置详解 六、Nginx&#xff08;基础&#xff09;配置详解 七、反向代理 八、负载均衡 九、动静分离 十、报错 一、下载Nginx安装包 四…

【源码】综合股票币币合约交易所源码/etf交易所源码/美股港股台股交易所源码

支持多国语言 全开源可二开的一个版本&#xff01;支持虚拟货币 ETF 外汇 美股 A股 港股 台股。 前端是VUE开发&#xff08;带vue工程源码&#xff09;后端JAVA开发&#xff01;搭建也相对简单。 总的来说功能非常强大&#xff0c;适合线上运营的一个版本&#xff0c;有兴趣的可…

(53)MOS管专题--->(08)MOS管N沟道MOS管

(08)MOS管N沟道MOS管 1 目录 (a)IC简介 (b)数字IC设计流程 (c)Verilog简介 (d)MOS管N沟道MOS管 (e)结束 1 IC简介 (a)在IC设计中,设计师使用电路设计工具(如EDA软件)来设计和模拟各种电路,例如逻辑电路、模拟电路、数字信号处理电路等。然后,根据设…

【因果推断python】38_预测模型1

目录 工业界中的机器学习 之前的部分涵盖了因果推理的核心。那里的技术是众所周知和成熟的。他们经受住了时间的考验。第一部分建立了我们可以依赖的坚实基础。用更专业的术语来说&#xff0c;第一部分侧重于定义什么是因果推理&#xff0c;哪些偏差会阻止相关性成为因果关系&…

支付数据安全

支付数据安全是确保支付系统和用户信息安全的关键环节&#xff0c;以下是一些可以采取的措施来增强支付数据的安全性&#xff1a; 数据加密&#xff1a;使用强加密算法来保护存储和传输中的支付数据&#xff0c;确保即使数据被截获也无法被未授权者读取[26]。 使用安全的通信协…

自定义防抖注解

问题场景 在开发中由于可能存在的网络波动问题导致用户重复提交&#xff0c;所以自定义一个防抖注解。设计思路&#xff1a;自定义注解加在接口的方法上&#xff0c;注解中设置了SPEL表达式&#xff0c;可以通过SPEL表达式从接口参数中提取Redis的Key&#xff0c;以这个Key作为…

空气的物性解释

什么是空气&#xff1f;什么是常态空气&#xff1f;空气就是我们生活在其中的大气。常态空气是一个规定的值&#xff08;不同国家有所不同&#xff09;&#xff1a;压力0.1MPa&#xff08;或者说是1个标准大气压&#xff09;、温度20℃、相对湿度为36%状态下称之为常态空气。常…

Techo TVP技术 沙龙

Techo TVP技术 沙龙 今天参加了 在上海 徐汇 腾讯云大厦 举办的 Techo TVP 技术沙龙&#xff08;主要介绍 AI agent 让我感受很深&#xff09; &#xff0c;那什么是 AI Agent呢&#xff1f; 是一个智能体&#xff0c;由大语言模型驱动&#xff0c;具有自主理解、感知、规划、…