Verilog的逻辑系统及数据类型(一):四值逻辑系统

目录

  • 1. Verilog采用的四值逻辑系统
  • 2.主要数据类型
    • 2.1 net(线网)
    • 2.2 寄存器类 (register)
    • 2.3 Verilog中net和register声明语法
      • 2.3.1 net声明
      • 2.3.2 寄存器声明
    • 2.4 选择正确的数据类型
    • 2.5 选择数据类型时常犯的错误
      • 2.5.1 信号类型确定方法总结
      • 2.5.2 常出的错误及相应的错误信息(error message)
      • 2.5.3 选择数据类型时常犯的错误举例

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

1. Verilog采用的四值逻辑系统

Verilog采用的四值逻辑系统

2.主要数据类型

Verilog主要有三类(class)数据类型:

  • net (线网) : 表示器件之间的物理连接
  • register (寄存器) :表示抽象存储元件
  • parameters(参数) : 运行时的常数(run-time constants)

2.1 net(线网)

  • net需要被持续的驱动,驱动它的可以是门和模块。
  • 当net驱动器的值发生变化时, Verilog自动的将新值传送到net上。在例子中,线网out由or门驱动。
  • 当or门的输入信号置位时将传输到线网net上。

net(线网)

有多种net类型用于设计(design-specific)建模和工艺(technology-specific)建模

多种net类型

**特别注意:**没有声明的net的缺省类型为 1 位(标量)wire类型。

  • wire类型常用于组合电路描述。
  • wire类型是最常用的类型,只有连接功能。
  • wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。tri型的信号综合后具有三态的功能。
  • wand、wor有线逻辑功能。
  • trireg类型很象wire类型,但trireg类型在没有驱动时保持以前的值。这个值的强度随时间减弱。
  • 修改net缺省类型的编译指导:
`default_nettype  <nettype>

其中nettype不能是supply1和supply0。

2.2 寄存器类 (register)

  • 寄存器类型在赋新值以前保持原值
  • 寄存器类型大量应用于行为模型描述及激励描述。在下面的例子中,reg_a、reg_b、reg_sel用于施加激励给2:1多路器。
  • 用行为描述结构给寄存器类型赋值。给reg类型赋值是在过程块中。

寄存器类 (register)

下表给出了寄存器类有四种数据类型:

寄存器类型功能
reg可定义的无符号整数变量,可以是标量(1位)或矢量,是最常用的寄存器类型
integer32位有符号整数变量,算术操作产生二进制补码形式的结果。通常用作不会由硬件实现的的数据处理。
real双精度的带符号浮点变量,用法与integer相同。
time64位无符号整数变量,用于仿真时间的保存与处理
realtime与real内容一致,但可以用作实数仿真时间的保存与处理

2.3 Verilog中net和register声明语法

2.3.1 net声明

 <net_type> [range] [delay] <net_name>[, net_name];
变量含义
net_typenet类型
range矢量范围,以[MSB:LSB]格式
delay定义与net相关的延时
net_namenet名称,一次可定义多个net, 用逗号分开。

2.3.2 寄存器声明

<reg_type> [range] <reg_name>[, reg_name];
变量含义
reg_type寄存器类型
range矢量范围,以[MSB:LSB]格式。只对reg类型有效
reg_name寄存器名称,一次可定义多个寄存器,用逗号分开

举例:

	reg a;     //一个标量寄存器wand w; // 一个标量wand类型netreg [3: 0] v; // 从MSB到LSB的4位寄存器向量reg [7: 0] m, n; // 两个8位寄存器tri [15: 0] busa; // 16位三态总线wire [0: 31] w1, w2; // 两个32位wire,MSB为bit0

2.4 选择正确的数据类型

选择正确的数据类型

2.5 选择数据类型时常犯的错误

2.5.1 信号类型确定方法总结

  1. 信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。
  2. 对于端口信号,输入端口只能是net类型。输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值(包括实例化语句),则为net类型。
  3. 内部信号类型与输出端口相同,可以是net或register类型。判断方法也与输出端口相同。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。

2.5.2 常出的错误及相应的错误信息(error message)

  1. 用过程语句给一个net类型的或忘记声明类型的信号赋值。
    报错信息:illegal …… assignment.
  2. 将实例的输出连接到声明为register类型的信号上。
    报错信息:<name> has illegal output port specification.
  3. 将模块的输入信号声明为register类型。
    报错信息:incompatible declaration, <signal name> ……

2.5.3 选择数据类型时常犯的错误举例

修改前:

module example(o1, o2, a, b, c, d);input a, b, c, d;output o1, o2;reg c, d;reg o2and u1(o2, c, d);always @(a or b)if (a) o1 = b; else o1 = 0;
endmodule

修改前编译信息:

Compiling source file "example.v"
Error!    Incompatible declaration, (c) defined as input                       at line 2                                         [Verilog-IDDIL]    "example.v", 5: 
Error!    Incompatible declaration, (d) defined as input                       at line 2                                         [Verilog-IDDIL]    "example.v", 5: 
Error!    Gate (u1) has illegal output specification        [Verilog-GHIOS]    "example.v", 8: 
3 errors

修改后:

module example(o1, o2, a, b, c, d);input a, b, c, d;output o1, o2;
//     reg c, d;
//     reg o2reg o1;and u1(o2, c, d);always @(a or b)if (a) o1 = b; else o1 = 0;
endmodule

修改后编译信息:

Compiling source file "example.v"
Error!    Illegal left-hand-side assignment                 [Verilog-ILHSA]    "example.v", 11: o1 = b;
Error!    Illegal left-hand-side assignment                 [Verilog-ILHSA]    "example.v", 12: o1 = 0;
2 errors

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

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

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

相关文章

【嵌入式DIY实例】-Nokia 5110显示BME280传感器数据

Nokia 5110显示BME280传感器数据 文章目录 Nokia 5110显示BME280传感器数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板(ESP12-E 模块)和 BME280 气压、温度和湿度传感器构建一个简单的本地气象站。 NodeMCU 从 BME280 传感器读取温度、湿度和压力值…

2024广东省职业技能大赛云计算赛项实战——集群部署GitLab Runner

集群部署GitLab Runner 前言 题目如下: 部署GitLab Runner 将GitLab Runner部署到gitlab-ci命名空间下&#xff0c;Release名称为gitlab-runner&#xff0c;为GitLab Runner创建持久化构建缓存目录/home/gitlab-runner/ci-build-cache以加速构建速度&#xff0c;并将其注册到…

【算法与数据结构】【字符串篇】【String的常见函数】

系列文章 本人系列文章-CSDN博客https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5502 1.string基本概念 string是C风格的字符串&#xff0c;而string本质上是一个类。 string和char * 区别&#xff1a; char * 是一个指针 string是一…

[Redis]缓存常见问题解决(缓存穿透、击穿、雪崩一文解决!通俗易懂、代码实战!手把手教你解决缓存问题三兄弟!)

Redis常见问题解决 要求 只用一种缓存技术&#xff0c;从实验点中挑一些试验进行试验原理。 1.缓存原理 目标&#xff1a;理解缓存的基本原理和工作机制。 实验步骤&#xff1a; 阅读各缓存技术机制的文档和官方资料。实现一个简单的应用程序&#xff0c;模拟数据的读写和…

音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

试析C#编程语言的特点及功能

行步骤&#xff0c;而不必创建新方法。其声明方法是在实例化委托基础上&#xff0c;加一对花括号以代表执行范围&#xff0c;再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…

最热门的智能猫砂盆好不好用?这期统统告诉你!

身为上班族的我们&#xff0c;常常被工作和出差填满日程。忘记给猫咪铲屎也不是一次两次了。但我们必须意识到&#xff0c;不及时清理猫砂盆不仅会让猫咪感到不适&#xff0c;还可能引发泌尿系统感染、皮肤疾病等健康问题。为了解决这个问题&#xff0c;越来越多的铲屎官开始将…

快速上手golang(持续更新)

由于项目需要&#xff0c;我不得不快速掌握go语言来帮助我进行项目的开发。时间紧迫到我来不及去了解语言的特性就直接项目上手了。我决定就先熟悉一个主流的go框架和go语言的一些日常用法&#xff0c;之后就得滑着这只破船摇摇晃晃上路了。 1 基础命令 就说几个用的多的&…

【Linux】使用信号进行进程间通信

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ ​ 实现原理&a…

江苏隆昌化工上线隆道平台 采购管理迎来全面升级

当前&#xff0c;传统产业与数字产业深度加速融合&#xff0c;大数据、云计算、人工智能等新技术推动产业深刻变革&#xff0c;能源化工行业迎来战略转型加速期。数字化转型已成为能源化工企业提升运营效率、控制运营成本、提高产品质量、打造竞争优势的强大引擎。为实现传统采…

数据库管理-第213期 HaloDB-Oracle兼容性测试03(20240625)

数据库管理213期 2024-06-25 数据库管理-第213期 HaloDB-Oracle兼容性测试03&#xff08;20240625&#xff09;1 索引1.1 B-Tree索引1.2 Hash索引1.3 复合索引1.4 唯一索引1.5 表达式索引1.6 部分索引 2 视图3 表连接3.1 内连接3.2 左/右外连接3.3 全连接清理环境&#xff1a; …

Linux内核测试技术

Linux 内核是Linux操作系统的核心部分&#xff0c;负责管理硬件资源和提供系统调用接口。随着 Linux 内核的不断发展和更新&#xff0c;其复杂性和代码规模也在不断增加。因此&#xff0c;确保内核的稳定性和可靠性变得尤为重要。内核测试技术是实现这一目标的关键手段。本文将…

iptables配置NAT实现端口转发

加载防火墙的内核模块 modprobe ip_tables modprobe ip_nat_ftp modprobe ip_conntrack 1.开启路由转发功能 echo net.ipv4.ip_forward 1 >> /etc/sysctl.conf sysctl -p2、将本地的端口转发到本机端口 将本机的 7777 端口转发到 6666 端口。 iptables -t nat -A PR…

C# Winform 开源UI库

WinForms&#xff0c;作为微软.NET框架下的一个桌面应用程序开发工具&#xff0c;自1999年首次亮相以来&#xff0c;已经走过了二十多年的发展历程。它以其简单直观的拖拽式界面设计和丰富的控件库&#xff0c;成为了大众喜爱的入门学习编程工具。由于它是比较基础的开发工具&a…

Windows下如何实现微信多开/分身

新建文本文档 把下面的脚本复制到文本文档中 echo offstart "" "C:\Program Files\Tencent\WeChat\WeChat.exe" start "" "C:\Program Files\Tencent\WeChat\WeChat.exe"exit把wechat.exe的路径替换成你自已的路径 想多开几个就复制…

如何写好AI绘画提示词?保姆级教程来了!

前言 提示词编辑是一个结构化的过程&#xff0c;用能被人类解释和理解的词语来描述图像&#xff0c;也就是告诉人工智能模型应该怎么绘制图片。 生成优质图像的秘诀 1.提示词要想编辑好&#xff0c;包括修饰词和好的句子结构&#xff0c;首先你要了解所有的修饰词类型。 2.St…

SAP的RFID

射频识别 &#xff08;RFID&#xff09; 避免了条码扫描的局限性&#xff0c;条码扫描需要对每个条码进行视线访问&#xff0c;并且一次只能用于扫描一个项目。 一次扫描一个标签可能会令人厌烦和压力大&#xff0c;这会增加人为错误的机会。相反&#xff0c;RFID 标签不需要直…

紧贴国家大战略需求,聚焦当前行业热点-海云安D10入选第四届香蜜湖金融科技创新奖拟奖项目

近日&#xff0c;第四届香蜜湖金融科技创新奖终审总结会在深圳市福田区湾区国际金融科技城成功举办&#xff0c;活动现场&#xff0c;专家评审委员会最终揭晓25个拟奖项目。海云安“开发者安全助手系统”项目&#xff0c;实力入选第四届香蜜湖金融科技创新奖-优秀项目奖。 1、香…

关于导入springcloud项目一些jar加载不进去的问题处理

IntelliJ IDEA的Maven项目有时候通过右边Maven Projects面板的package或者install命令打包的时候&#xff0c;会报错导致打包失败&#xff0c;这是由于这两个命令打包前默认会运行tests测试&#xff0c;若测试失败则打包失败。但是有时候我们打包的时候一些项目配置是针对生产环…