【芯片设计- RTL 数字逻辑设计入门 4 -- verilog 组合逻辑和时序逻辑】

文章目录

    • 组合逻辑
    • 时序逻辑
    • 可综合设计
    • 模块结构
    • 缩写命令

组合逻辑

这种条件信号变化结果立即变化的 always 语句被称为“组合逻辑” 。

always @(posedge clk)beginif(sel==0)c <= a + b;elsec <= a + d;
end

时序逻辑

这种信号边沿触发, 即信号上升沿或者下降沿才变化的 always, 被称为“时序逻辑” , 此时信号 clk 是时钟。

always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginc <= 0;endelse if(sel==0)c <= a + b;elsec <= a + d;
end

需要说明的是, 多条 assign 连续赋值语句之间互相独立、 并行执行。

可综合设计

综合就是把编写的 rtl 代码转换成对应的实际电路。 比如编写代码 assign a=b&c; EDA 综合工
具就会去元件库里调用一个二输入与门, 将输入端分别接上 b 和 c, 输出端接上 a。

不可综合, 是指找不到对应的 “” 器件来实现相应的代码。 比如“#100” 之类的延时功能,
简单的门器件是无法实现延时 100 个单元的, 还有打印语句等, 也是门器件无法实现的。 在设计的时候要确保所写的代码是可以综合的。

下面表格中列出了不可综合或者不推荐使用的代码。

代码要求
initial严禁在设计中使用, 只能在测试文件中使用。
task/function不推荐在设计中使用, 在测试文件中可用。
for在设计中、 测试文件中均可以使用。 但在设计中多数会将其用错,所以建议在初期设计时不使用, 熟练后按规范使用
while/repeat/forever严禁在设计中使用, 只能在测试文件中使用
integer不推荐在设计中使用
三态门内部模块不能有三态接口, 三态门只有顶层文件才使用。 三态门目的是为了节省管脚, FPGA 内部完全没有必要使用。
casex/casez设计代码内部不能有 X 态和 Z 态, 因此 casez、 casex 设计时不使用。
force/wait/fork严禁在设计中使用, 只能在测试文件中使用
#n严禁在设计中使用, 只能在测试文件中使用

推荐使用的代码及其说明

代码备注
reg/wire设计中所有的信号类型定义, 只有 reg 和 wire 两种
parameter设计代码中所有的位宽、 长度、 状态机命名等, 建议都用参数表示, 阅读方便并且修改容易。
assign/always程序块主要部分, 至简设计法对 always 使用有严格规范。
if else 和 casealways 里面的语句, 使用 if else 和 case 两种方法用来作选择判断, 可以完成全部设计。
算术运算符除法和求余运算的电路面积一般比较大, 不建议直接使用除法和求余。
赋值运算符(=, <=)时序逻辑用“<=” , 组合逻辑用“=” ; 其他情况不存在。

模块结构

Verilog 的基本设计单元是“模块”。模块有五个主要部分: 端口定义、 参数定义(可选) 、 I/O 说明、 内部信号声明、 功能定义。

  • 端口定义:
module module_name(clk , 		 //端口 1, 时钟rst_n ,		 //端口 2, 复位dout 		 //其他信号,如 dout
);
  • 参数定义
parameter DATA_W = 8;
  • I/O 说明
input clk ; 								//输入信号定义
input rst_n ;	 							//输入信号定义
output[DATA_W-1:0] dout; 					//输出信号定义
  • 信号说明
reg [DATA_W-1:0] dout; 						//信号类型
(reg、 wire)定义 reg signal1;				//信号类型

缩写命令

~/.vimrc 中可以配置map 映射来完成代码快速生成,如下:

  • Shixu
always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginendelse beginend
end
  • Shixu2
always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)beginendelse if() beginendelse if() beginend
end
  • Zuhe
always @(*)begin
end
  • Zuhe2
always @(*)beginif()beginendelse beginend
end

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

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

相关文章

go写mysql取得自增字段值

场景&#xff1a;有多张表&#xff0c;依据其中一张表的自增字段取得 id 值作为对象ID&#xff0c;然后使用这个Id插入到其他它表中。 如下一张 MySQL 的 innodb 表 X&#xff0c;用 go 编写程序&#xff0c;不指定 a 的值&#xff0c;指定 b 和 c 的值&#xff0c;往表 X 插入…

阿里后台开发面经分析:如何才能更好地回答问题?

这一篇文章是来自群友分享阿里面试过程&#xff0c;我想通过这种情景模拟地方式来告诉大家在面试地时候&#xff0c;应该如何有条理地回答问题。 面试官: 能否解释一下简单工厂模式存在的问题&#xff0c;为何会违背开放-封闭原则&#xff1f; 求职者: 嗯&#xff0c;简单工厂…

第4章 HSA运行时

HSA运行时是一种精简的用户模式应用程序编程接口API&#xff0c;它提供了主机将计算内核启动到可用HSA代理程序所必须的接口。它可以分为两类&#xff1a;核心和扩展。HSA核心运行时API旨在支持HSA系统平台体系结构规范所需的操作&#xff0c;并且必须得到任何符合HSA的系统的支…

transformers命名体识别

命名体识别(Named Entity Recognition,简称NER)是自然语言处理(Natural Language Processing, NLP)领域中的一项关键技术,其主要任务是从非结构化的文本数据中自动识别并抽取具有特定意义的实体信息。这些实体通常是指人名、地名、组织机构名、日期时间、货币金额、百分比…

Java多线程导入Excel示例

在导入Excel的时候&#xff0c;如果文件比较大&#xff0c;行数很多&#xff0c;一行行读往往速度比较慢&#xff0c;为了加快导入速度&#xff0c;我们可以采用多线程的方式 话不多说直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import com.s…

智慧城市中的数字孪生:数字孪生技术助力智慧城市提高公共服务水平

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、智慧交通管理 2、智慧能源管理 3、智慧环保管理 4、智慧公共安全 四、数字孪生技术助力智慧城市提高公共服务水平的价值 五、挑战与前景 六、结论 一、引言 随着信息技术的飞速发展&…

【LeetCode】升级打怪之路 Day 13:优先级队列的应用

今日题目&#xff1a; 23. 合并 K 个升序链表 | LeetCode378. 有序矩阵中第 K 小的元素 | LeetCode373. 查找和最小的 K 对数字 | LeetCode703. 数据流中的第 K 大元素 | LeetCode347. 前 K 个高频元素 | LeetCode 目录 Problem 1&#xff1a;合并多个有序链表 【classic】LC 2…

【蓝牙协议栈】【BR/EDR】【AVDTP】音视频分布传输协议

1. AVDTP概念 AVDTP即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL(音视频分配传输协议),主要负责 A/V stream的协商、建立及传输程序,还指定了设备之前传输A/V stream的消息格式. AVDTP的传输机制和消息格式是以 RTP为基础的。RTP由 RTP Data Transfer Protocol (RTP)和…

【国产MCU】-CH32V307-实时时钟(RTC)

实时时钟(RTC) 文章目录 实时时钟(RTC)1、实时时钟(RTC)介绍2、RTC驱动API介绍3、RTC使用实例RTC 实时时钟是一组32 位可编程计数器,时基支持20 位预分频,用于较长时间段的测量。时钟基准来源高速的外部时钟128分频(HSE/128)、外部晶体低频振荡器(LSE)或内部低功耗RC…

【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图

一、知识点 1、基本定义 甘特图(Gantt chart )又称为横道图、条状图(Bar chart)&#xff0c;通过条状图来显示项目各活动的进 度情况。以提出者亨利劳伦斯甘特( Henry Laurence Gantt)先生的名字命名。 目前许多文档工具都可以画甘特图。 &#xff08;1&#xff09;我的举例 …

NodeJS 21 的新功能

从使 fetch 和 WebStreams 稳定化到引入实验性的 WebSocket 客户端&#xff0c;Node.js 21 正在为服务器端 JavaScript 执行设定新的标准。 V8 11.8 的更新不仅提升了性能&#xff0c;还添加了开发者一直期待的新语言功能。 让我们来看看所有 Node.js 21 的功能&#xff01; …

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡&#xff1f; 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡&#xff1f; Nginx负载均衡可以大…

【Oracle不停库迁移, 迁移完成无法启动】

MD[Oracle不停库迁移, 迁移完成无法启动] Oracle不停库迁移, 迁移完成无法启动 说明: 1. 在企业上云的大背景下, 自建数据库迁移到云服务器内, 场景较为常见。本文意在解决Oracle迁移到云服务器内&#xff0c;无法启动的问题。 2. 用云厂商的迁移服务(如, 华为云SMS)&#xf…

计算机网络-典型网络组网架构

前面基本网络知识已经能够满足中小企业的需要了&#xff0c;今天来看下一些基本网络组网架构。 首先网络是分层架构&#xff0c;从接入层到汇聚层再到核心层&#xff0c;然后接入运营商出口。内部包括有线网络、无线网络&#xff0c;出口一般可以使用路由器或者防火墙进行安全防…

StarRocks实战——vivo基于 StarRocks 构建实时大数据平台

目录 前言 一、数据挑战 1.1 时效性挑战&#xff0c;业务分析决策需加速 1.2 访问量挑战&#xff0c;性能与稳定性亟待提高&#xff0c;支撑业务稳定运行 1.3 计算场景挑战&#xff0c;难以满足业务复杂查询需求 1.4. 运维挑战&#xff0c;用户查询体验需优化 二、OLA…

WebDAV之π-Disk派盘+人生Life

人生Life是一款日程软件,在这款待办的日程软件当中各种功能极为的完善,完全的足够用户在日常当中的使用,你的待办方面的各种内容都能够在软件上面进行规划和填充,通过待办事项来帮助用户提高在日常当中的效率,对于用户来说这款待办事项的软件是绝佳的选择。 π-Disk派盘 …

java面试(jvm)

JVM内存模型 细分Eden&#xff1a; java类加载过程&#xff1f;双亲委派机制&#xff1f;一个对象从加载到JVM&#xff0c;再到被GC清除过程&#xff1f; JAVA类加载器&#xff1a;AppClassLoader - ExtClassLoader - BootStrapClassLoader。每种类加载器都有他自己的加载目录…

浅谈网络爬虫与Web安全

网络爬虫(Web Crawler)&#xff0c;又称网络蜘蛛(Web Spider)或网络机器人(Web Robot)&#xff0c;是一种按照一定的规则自动抓取万维网资源的程序或者脚本&#xff0c;已被广泛应用于互联网领域。搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源&#xff0c…

2024年聚合工艺证模拟考试题库及聚合工艺理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年聚合工艺证模拟考试题库及聚合工艺理论考试试题是由安全生产模拟考试一点通提供&#xff0c;聚合工艺证模拟考试题库是根据聚合工艺最新版教材&#xff0c;聚合工艺大纲整理而成&#xff08;含2024年聚合工艺证…

ANSYS穿孔板随机微孔隙构建及力学模拟

多孔结构板在减轻结构重量、满足吸声功能等环境下应用广泛&#xff0c;本案例采用ANSYS Workbench对曲线边界孔洞的随机多孔板进行轴心受拉力学分析。 随机微穿孔板可采用CAD Voronoi插件构建&#xff0c;三维模型构建如下。 CAD Voronoi插件采用参数化建模方式&#xff0c;根…