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

本文主要是介绍【芯片设计- 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

这篇关于【芯片设计- RTL 数字逻辑设计入门 4 -- verilog 组合逻辑和时序逻辑】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一