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.rhkb.cn/news/360542.html

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

相关文章

目标检测数据集 - 手机屏幕表面表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;手机屏幕表面缺陷检测数据集&#xff0c;真实采集高质量手机屏幕表面含缺陷图片数据&#xff0c;数据集含多款不同型号和品牌的手机屏幕表面图片数据&#xff0c;包括苹果手机屏、三星手机屏、华为手机屏等数据。数据标注标签包括 Bubble 气泡/水滴、Scr…

现在的Java面试都这么扯淡了吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;开发兼过半年面试官 刚开始…

upload-labs第14关

upload-labs第14关 第十四关一、源代码分析代码审计 二、绕过分析a. 制作图片码首先需要一个照片&#xff0c;然后其次需要一个eval.php。 b.上传图片码上传成功 c.结合文件包含漏洞进行访问访问&#xff1a;http://192.168.1.110/upload-labs-master/include.php?filehttp://…

VUE div的右上角的角标/标签

一、效果图 二、代码 <div class"comp-overview"><div class"overview-item" v-for"(item,index) in overviewInfoList" :key"index"><div class"angle_mark"><span>{{item.label}}</span>&…

重学java 73.设计模式

本想送你一本沉思录&#xff0c;可该迷途知返的人是我 —— 24.6.18 设计模式 设计模式(Design pattern)&#xff0c;是一套被反复使用、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。 1995 年&#x…

Python | Leetcode Python题解之第165题比较版本号

题目&#xff1a; 题解&#xff1a; class Solution:def compareVersion(self, version1: str, version2: str) -> int:n, m len(version1), len(version2)i, j 0, 0while i < n or j < m:x 0while i < n and version1[i] ! .:x x * 10 ord(version1[i]) - o…

HarmonyOS应用开发——Hello World

下载 HUAWEI DevEco Studio: https://developer.harmonyos.com/cn/develop/deveco-studio/#download 同意&#xff0c;进入配置页面&#xff1a; 配置下载源以及本地存放路径&#xff0c;包括nodejs和ohpm: 配置鸿蒙SDK路径&#xff1a; 接受协议&#xff1a; 确认无误后&#…

配置OSPF认证(华为)

#交换设备 配置OSPF认证-基于华为路由器 OSPF&#xff08;开放最短路径优先&#xff09;是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在单一自治系统&#xff08;AS&#xff09;内决策路由。OSPF认证功能是路由器中的一项安全措施&#xff0c;它的主要用途…

【Docker】rancher 管理平台搭建

目录 1. 所有节点安装docker 2. 所有节点配置/etc/sysconfig/docker 文件修改如下配置 3. 配置证书 4. 镜像仓库导入镜像 5. 创建镜像仓库 5.1 查询上传的 image id 5.2 镜像打标签 5.3 镜像上推 6. server 节点 7. client 节点 8. 在 server 节点启动 9. 查看运行…

前端:HTML、CSS、JavaScript 代码注释 / 注释与代码规范

一、HTML 行内注释 HTML注释是在HTML代码中添加说明和解释的一种方法&#xff0c;这些注释不会被浏览器渲染或显示在页面上&#xff0c;而是被浏览器忽略。HTML注释对于代码的可读性、可维护性和团队协作非常重要。 1.1、HTML注释的语法 HTML注释的语法是以<!--开始&…

优化系统小工具

一款利用VB6编写的系统优化小工具&#xff0c;系统优化、桌面优化、清理垃圾、查找文件等功能。 下载:https://download.csdn.net/download/ty5858/89432367

Emacs之显示blame插件:blamer、git-messenger(一百四十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

云渲染农场使用指南:如何以最低成本享受最快渲染速度?

​云渲染农场怎么低成本享受快速渲染&#xff1f; 云渲染农场利用其分布式计算能力&#xff0c;为视觉艺术家提供了一种经济高效的渲染选择。它特别适用于高质量的影视动画和视觉效果制作。下面一起来看看如何以最低的成本实现快速渲染的策略。 在追求成本效益的同时&#xff…

引领AI新时代:深度学习与大模型的关键技术

文章目录 &#x1f4d1;前言一、内容概述二、作者简介三、书籍特色四、学习平台与资源 &#x1f4d1;前言 在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;和深度学习技术已经渗透到我们生活的方方面面。从智能手机中的智能语音助手&#xff0c;到…

【C++提高编程-10】----C++ STL常用拷贝和替换算法

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

电路分析期末总结笔记下

对称三相电路的线电流和相电流&#xff0c;线电压和相电压关系 相电压与线电压的关系 线电压定义&#xff1a;任意两相之间的电压称为线电压&#xff0c;常用符号V_L表示。 相电压定义&#xff1a;一相绕组两端的电压称为相电压&#xff0c;常用符号V_P表示。 关系&#xff1…

linux挂载硬盘(解决linux不显示硬盘问题)

目录 1.查看系统有几块硬盘2.查看挂载情况3.格式化硬盘4.创建挂载目录用于挂载硬盘5.将硬盘挂载到指定的挂载目录6.随系统自启动挂载查看配置文件&#xff0c;看是否已经把这条命令加入配置 帮同门解决挂载失败问题记录 参考视频&#xff1a;只要6步&#xff01;Linux系统下挂载…

网络爬虫Xpath开发工具的使用

开发人员在编写网络爬虫程序时若遇到解析网页数据的问题&#xff0c;则需要花费大量的时间编 写与测试路径表达式&#xff0c;以确认是否可以解析出所需要的数据。为帮助开发人员在网页上直接 测试路径表达式是否正确&#xff0c;我们在这里推荐一款比较好用的 XPath 开发工…

【Text2SQL 论文】MAGIC:为 Text2SQL 任务自动生成 self-correction guideline

论文&#xff1a;MAGIC: Generating Self-Correction Guideline for In-Context Text-to-SQL ⭐⭐⭐ 莱顿大学 & Microsoft, arXiv:2406.12692 一、论文速读 DIN-SQL 模型中使用了一个 self-correction 模块&#xff0c;他把 LLM 直接生成的 SQL 带上一些 guidelines 的 p…

【跟我学RISC-V】(三)openEuler特别篇

写在前面 这篇文章是跟我学RISC-V指令集的第三期&#xff0c;距离我上一次发文已经过去一个多月了&#xff0c;在这个月里我加入了oerv的实习项目组&#xff0c;并且还要准备期末考试&#xff0c;比较忙&#xff0c;所以更新频率不高&#xff0c;不过对于Linux kernel和RISC-V…