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. 后端框架的学习----mybatis框架(8、lombok)

    8.lombok #测试环境搭建 1.导入lombok 2.新建实体类Teacher,Student 3.建立mapper接口 4.建立mapper.xml文件 5.在核心配置文件中绑定注册mappe ...

  2. Vue学习之--------组件嵌套以及VueComponent的讲解(代码实现)(2022/7/23)

    欢迎加入刚建立的社区:http://t.csdn.cn/Q52km 加入社区的好处: 1.专栏更加明确.便于学习 2.覆盖的知识点更多.便于发散学习 3.大家共同学习进步 3.不定时的发现金红包(不多 ...

  3. 知识图谱-生物信息学-医学论文(Chip-2022)-BCKG-基于临床指南的中国乳腺癌知识图谱的构建与应用

    16.(2022)Chip-BCKG-基于临床指南的中国乳腺癌知识图谱的构建与应用 论文标题: Construction and Application of Chinese Breast Cance ...

  4. python字典推导&&列表推导&&输出随机数

    字典推导: x = ['A', 'B', 'C', 'D'] y = ['Alice', 'Bob', 'Cecil', 'David'] print({i:j for i,j in zip(x,y) ...

  5. python查找相似图片或重复图片

    1.查找重复图片 利用文件的MD5值可查找完全一样的重复图片 import os,time,hashlib def getmd5(file): if not os.path.isfile(file): ...

  6. F118校准(一)-- 安装CA310驱动程序及SDK

    1. 准备工作 下载Ca310_drv.zip文件并解压,备用. http://www.xk-image.com/download/blog/0001_F118校准/Ca310_drv.zip 准备好 ...

  7. Vue中常用的几种传值方式

    Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...

  8. Java Stream流的使用

    流相关的方法可以分为三种类型,分别是:获取Stream流.中间方法.终结方法.中间方法会返回当前流,可以方便的进行链式调用. 流不可重复使用,否则会报错: java.lang.IllegalState ...

  9. maven的下载、安装、配置,idea中配置Maven

    下载 下载链接: 点击下载地址 : 找到:对应版本的包下载 安装 下载后的压缩包解压出来,然后将解压后的包放到日常安装软件的位置即安装成功,当然取决于个人意愿,也可以不移动. 打开安装包后的目录结构简 ...

  10. 4.mysql-进阶

    1.事务 将多个操作步骤变成一个事务,任何一个步骤失败,则回滚到事务的所有步骤之前状态,大白话:要成功都成功:要失败都失败. 如转账操作,A扣钱.B收钱,必须两个步骤都成功,才认为转账成功 innod ...