Verilog RTL编程实践

在进行数字IC设计过程中,RTL coding能力是非常重要的。结合逻辑仿真(VCS)和逻辑综合(Design Compiler)工具。看RTL。

1 ASIC Design Flow

  1. IDEA
  2. Design specification
  3. Design entry/Verilog Coding
  4. Simulation/function verification
  5. chip integration/verificattion
  6. Sysnthesis/Pre layout/Timing/formal verification
  7. scan chain insertion/Test;Generation/fault simulation
  8. physical design
  9. To sign off
  10. production ready masks

    数字IC设计流程需要了解,这里简单介绍一下。

ALU描述Spec-->RTL-->进行逻辑仿真-->将RTL转化为Gate Netlist(使用逻辑综合工具)-->layout-->production

2 什么是Verilog?

Verilog VHDL--寄存器级硬件描述语言,基于C语言进行设计的。

2005年,在verilog基础上,出现了system verilog,三大属性Design、Verificaiton、Assertion。

verilog从84年开始出现,到现在已经经过了三四十年的发展,但是仍然适用很多公司的开发。

verilog在芯片设计和芯片验证领域使用非常广泛。

2.1 推荐阅读

  • IEEE1364 standard;SystemVerilog IEEE 1800
  • Digital VLSI design with Verilog

3 verilog语义语法

3.1 verilog缺点

只用于描述数字电路,不用于模拟电路的设计。

3.2 Verilog语言层次

  • Behavioral--行为级,加法,乘法等。
  • RTL--寄存器传输级(Register Transition Level),触发器(DFF),verilog中没有对于DFF进行建模,使用always进行建模。
  • Gate--门级电路,与非门等,Verilog中对于门级电路是有建模的。
  • Layout(VLSI)--画管子,源极、栅极、漏极。

3.2 module

module adder_4_RTL(a,b,c_in,sum,c_out);
output[3:0] sum;
output c_out;
input[3:0] a,b;
input c_in; assign{c_out,sum}=a+b+c_in; 行为级描述,可以进行综合
endmodule
  1. module name(数字、字母、下划线、$)
  2. module module_name(端口名)
  3. input/output[位宽]--[3:0]表示4位的位宽
  4. assigin--连续赋值语句,将左侧和右侧进行连接,主要对于组合逻辑电路进行建模
  5. {MSB(最高位),LSB(最低位)}--表示拼接符
  6. endmodule--结束模块

3.3 structure model(门级建模)

使用门级进行描述

module mux(f,a,b,sel);
output f; 输出
input a,b,sel; 输入 and #5 g1(f1,a,nsel); #5表示输入到输出有一个延时,#5表示多少取决于timescale(仿真的精度和单位)
and #5 g2(f2,b,sel);
or g4(nsel,sel);
endmodule /*
and--表示实例化一个与门
g1--实例化门的名称
(f1,a,nsel)--f1表示与门的输出,a表示出入,nsel-表示sel取反;
nsel--sel取反(经过一个反相器)之后得到nsel
or--表示或门
门级模块的建模往往第一个是输出,后面的是输入
*/

3.4 concepts--概念

1 concurrency--并发性

C语言是从上向下执行的,硬件是不同的,同时有很多电路进行工作。

2 structure

verilog有门级建模

3 Procedural Statements

过程化执行,从上到下执行。

4 Time

Verilog中有时序的概念

3.5 identifiers--标识符

  • 标识符以数字、字母、下划线、$组成
  • 不能以数字和$进行开头
  • verilog是大小写敏感的语言
  • 书写变量的时候尽量有意义

3.6 comments--注释

  • //单行注释
  • /xxxxxx/ 多行注释

3.7 Value Set

verilog对于硬件进行建模。

  • 0--低电平或者假
  • 1--高电平或者是真
  • x--未知的逻辑状态,亚稳态就是会产生未知状态
  • z--高阻抗状态,在电路中挂一个高电阻

3.8 number

'

  • size--位宽
  • radix--进制,b/B表示二进制,o/O表示八进制,d/D表示十进制,h/H表示十六进制
  • value--数值,0-f,x,z

    位宽相当于走线
-8'h ax =1010xxxx
-12'o 3zx7=011zzzxxx111

注意

  • 十六进制,一位可以使用四位二进制数进行表示
  • 八进制,一位可以使用三位二进制数进行表示
  • 十六进制a--1010
  • 十六进制5--0101
  • 有些电路中可以使用55和aa可以进行简单的验证

数字中可以插入下划线

//数字中插入下划线是用与分割长的数字
-12‘b 000_111_010_100
-12'b 000111010100
-12'o 07_24

位扩展

最高位是0,x,z是可以进行扩展的,最高位位1的时候是不能进行扩展的

4'b x1=4'b xx_x1
//最高位是x,所以进行了扩展 4'b 1x=4'b 00_1x
//1是不能向高位进行扩展的,如果能扩展结果变为
// 4'b 111x 结果错误
// SV中进行了语法的改进

默认

  • size--不写,根据值进行推断
  • radix--不写,默认是十进制

3.9 nets-线网

可以认为是被逻辑驱动的硬件连线

  • z--表示不连接,没有连线的状态
  • wire--线
  • wand--线与
  • wor--线或
  • tri--三态

nets建模

对于上述的图片解释:

  1. 使用wire 变量 声明一根线Y a,b改变 y就发生变化
  2. assign--讲左右进行连接
  3. &--按位与

01-Verilog基础的更多相关文章

  1. Verilog基础入门——Vivado工程创建(三)

    Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...

  2. 01: tornado基础篇

    目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...

  3. 后端 - Lession 01 PHP 基础

    目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...

  4. 【第一季】CH06_FPGA设计Verilog基础(三)

    [第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...

  5. 【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title

    [第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...

  6. 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title

    [第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...

  7. Jam's balance HDU - 5616 (01背包基础题)

    Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...

  8. 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结

    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...

  9. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  10. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

随机推荐

  1. 齐博x1标签实例:调用多个圈子同时调用相关会员

    看这一篇之前,请先看上一篇,因为他们有关联性比如要实现这样的效果 可以通过下面的代码可以实现 {qb:tag name="xxx" type="qun" row ...

  2. 【MySQL】04_约束

    约束 概述 为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制.从以下四个方面考虑: 实体完整性(Entity Integrity) :例如,同一个表中,不能存在两条完全相同无法区 ...

  3. 关于Object.keys()和Object.values()的使用

    关于Object.keys()和Object.values()的使用 1. 关于Object.keys() 1) 处理对象,返回可枚举的所有可枚举属性的字符串数组 let person ={ name ...

  4. Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification

    背景 消息传递模型(Message Passing Model)基于拉普拉斯平滑假设(领居是相似的),试图聚合图中的邻居的信息来获取足够的依据,以实现更鲁棒的半监督节点分类. 图神经网络(Graph ...

  5. Python 多重继承时metaclass conflict问题解决与原理探究

    背景 最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想 ...

  6. Debian安装WPS的方法

    1.防止安装失败,请尽量重启电脑,关闭系统的软件商店,因为商店的权限可能会锁住pkg的配置文件,导致无法安装wps. 2.将原机残废的WPS卸载干净,卸载方法:手动或命令行操作. sudo apt r ...

  7. 开发用户K8S授权

    #开发用户没有K8S权限 [ans@master ~]$ kubectl get po Unable to connect to the server: x509: certificate signe ...

  8. xmind下载安装破解版激活教程思维导图软件获取

    1.xmind下载解压压缩包就可以看到里面的文件,然后双击安装文件就可以开始安装了 2.安装Xmind程序双击之后会出现下面的流程,照着截图操作,不要乱点哈 切记切记!!这一步直接点击next,不要修 ...

  9. elasticsearch 聚合之 date_histogram 聚合

    目录 1.背景 2.bucket_key如何计算 3.前置知识 4.日历和固定时间间隔 4.1 Calendar intervals 日历间隔 4.2 Fixed intervals 固定间隔 5.数 ...

  10. latex 中添加Springer LNCS 模板的\bibitem{}格式参考文献方法

    1.将需要引用的参考文献新建为.bib格式,例如referencesTest.bib文件,具体如下: 新建txt文件,后缀名改为.bib: 然后打开谷歌学术,搜索参考文献, 点击导入BibTeX,具体 ...