基于System-Verilog点亮LED灯

2024-06-15 22:36
文章标签 led system verilog 点亮

本文主要是介绍基于System-Verilog点亮LED灯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、System-Verilog介绍
    • 1.1System-Verilog
  • 二、简单的语法介绍
    • 2.1接口实例
    • 2.2全局声明和语句实例
    • 2.3时间单位和精度
    • 2.4用户定义的类型
    • 2.5 枚举类型
  • 三、流水灯
  • 参考

一、System-Verilog介绍

1.1System-Verilog

SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型、结构、压缩和非压缩数组、 接口、断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力。
SystemVerilog由Accellera开发,它主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了强大的连接能力。下面我们从几个方面对SystemVerilog所作的增强进行简要的介绍,期望能够通过这个介绍使大家对SystemVerilog有一个概括性的了解。

二、简单的语法介绍

2.1接口实例

interface chip_bus;// 定义接口wireread_request, read_grant;wire [7:0]address, data;endinterface: chip_bus
module RAM(chip_bus io, // 使用接口inputclk);//可以使用io.read_request引用接口中的一个信号endmodule
module CPU(chip_busio, input clk);...endmodule
module top;reg clk = 0;chip_busa; // 实例接口//将接口连接到模块实例RAM mem(a,clk);CPU cpu(a,clk);endmodule

2.2全局声明和语句实例

reg error_flag; // 全局变量function compare(...); // 全局函数
always@(error_flag) // 全局语句
...
module test;
chip1 u1(...)
endmodule
module chip1(...);
FSM u2(...);
always@(data)
error_flag= compare(data, expected);
endmodule
module FSM(...);
...
always @(state)
error_flag= compare(state, expected);
endmodule

2.3时间单位和精度

在Verilog中,表示时间的值使用一个数来表示,而不带有任何时间单位。例如:

`forever #5clock= ~clock;`

SystemVerilog为了控制时间单位加入了两个重要的增强。首先,时间值可以显式地指定一个单位。时间单位可以是s、ms、ns、ps或fs。时间单位作为时间值的后缀出现。例如:

forever #5nsclock= ~clock;

其次,SystemVerilog允许使用新的关键字(timeunits和timeprecision)来指定时间单位和精度。这些声明可以在任何模块中指定,同时也可以在$root空间中全局指定。时间单位和精度必须是10的幂,范围可以从s到fs。例如:

timeunits 1ns;timeprecision 10ps;

2.4用户定义的类型

Verilog不允许用户定义新的数据类型。SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似。用户定义的类型可以与其它数据类型一样地使用在声明当中。例如:

typedefunsigned int uint;uint a, b;

一个用户定义的数据类型可以在它的定义之前使用,只要它首先在空的typedef中说明,例如:

typedef int48; // 空的typedef,在其他地方进行完整定义int48 c;

2.5 枚举类型

在Verilog语言中不存在枚举类型。标识符必须被显式地声明成一个线网、变量或参数并被赋值。SystemVerilog允许使用类似于C的语法产生枚举类型。一个枚举类型具有一组被命名的值。缺省情况下,值从初始值0开始递增,但是我们可以显式地指定初始值。枚举类型的例子如下:

enum {red,yellow, green} RGB;enum {WAIT=2’b01, LOAD, DONE} states;

我们还可以使用typedef为枚举类型指定一个名字,从而允许这个枚举类型可以在许多地方使用。例如:

typedefenum {FALSE=1’b0, TRUE} boolean;boolean ready;booleantest_complete;

三、流水灯

ed_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

效果
在这里插入图片描述

参考

System Verilog简介

这篇关于基于System-Verilog点亮LED灯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064774

相关文章

Partical System

创建"粒子系统物体"(点击菜单GameObject -> Create Other -> Particle System) 添加"粒子系统组件"(点击Component -> Effects  ->Particle System) 粒子系统检视面板  点击粒子系统检视面板的右上角的"+"来增加新的模块。(Show All Modules:显示全部) 初始化模块: •

小技巧绕过Sina Visitor System(新浪访客系统)

0x00 前言 一直以来,爬虫与反爬虫技术都时刻进行着博弈,而新浪微博作为一个数据大户更是在反爬虫上不遗余力。常规手段如验证码、封IP等等相信很多人都见识过…… 当然确实有需要的话可以通过新浪开放平台提供的API进行数据采集,但是普通开发者的权限比较低,限制也比较多。所以如果只是做一些简单的功能还是爬虫比较方便~ 应该是今年的早些时候,新浪引入了一个Sina Visitor Syst

System.getProperties().

Java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目录 java.vm.specification.version Java 虚拟机规范版本 java.vm.specification.vendor

物联网之流水LED灯、正常流水灯、反复流水灯、移动流水灯

MENU 硬件电路设计软件程序设计正常流水LED灯反复流水LED灯移动流水LED灯 硬件电路设计 材料名称数量直插式LED1kΩ电阻杜邦线(跳线)若干面包板1 每一个LED的正极与开发板一个GPIO引脚相连,并串联一个电阻,负极接GND。 当然也可以选择只使用一个电阻。 软件程序设计 正常流水LED灯 因为要用到多个GPIO引脚,所以最好把所有的GPI

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

什么是LED智能会议一体机?COB超微小间距LED会议一体机大势所趋

LED智能会议一体机,作为现代会议室革新的核心装备,正逐步颠覆传统会议模式的界限。它不仅仅是一台集成了高清显示、触控互动、音视频处理及远程协作等功能于一体的智能设备,更是推动会议效率与体验双重飞跃的关键力量。随着技术的不断进步,特别是COB(Chip On Board)超微小间距LED技术的引入,LED智能会议一体机正迎来前所未有的发展机遇,成为大势所趋。 COB技术通过将LED芯片直接封装在基

android6/7 system打包脚本

1.android5打包system就是网站上常见的制作ROM必备的解包打包system脚本 指令如下:mkuserimg.sh -s out/target/product/$TARGET_PRODUCT/system out/target/product/$TARGET_PRODUCT/obj/PACKAGING/systemimage_intermediates/system.img

android打包解包boot.img,system.img

原帖地址:http://www.52pojie.cn/thread-488025-1-1.html 转载Mark一下,日后研究 最近工作需要对boot.img,system.img进行破解。顺便将心得分享一下。 我的工作环境是在linux下的。所以工具都是针对linux的。 boot.img破解相关工具: 1、split_boot    perl脚本 2、boot_i

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

MTK Android P/Q system/vendor/super快速打包

一、Android 新版本默认开启了动态分区,把system vendor  product等分区打包成一个super分区。这对于我们使用替换分区的方法来排查问题不是很方便,直接替换一个super也不知道到底是哪个部分导致的。所以我们需要自己制作super.img来缩小范围。下面讲讲如何快速生成system、vendor、super,以及vbmeta(校验image,不匹配可能会导致不开机) 二