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. sql面试50题------(1-10)

    文章目录 1.查询课程编号'01'比课程编号'02'成绩高的所有学生学号 2.查询平均成绩大于60分得学生的学号和平均成绩 3.查询所有学生的学号,姓名,选课数,总成绩 4.查询姓"猴&qu ...

  2. 创建base公共组件

    公共模块 基础模块参照了vant的思路,使用bem命名规范.先创建一个命名空间,这个命名空间返回创建组件函数与生成命名方法.在创建组件函数中创建name与install属性用于注册vue组件 创建组件 ...

  3. Springboot数据库的配置问题

    mysql时区问题 先前的代码如下 spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: ...

  4. day09-Tomcat01

    Tomcat01 1.WEB开发介绍 WEB,在英文中WEB表示网/网络资源,它用于表示WEB服务器(主机)供浏览器访问的资源 WEB服务器(主机)上供外界访问的Web资源为: 静态web资源(如ht ...

  5. EasyPoi大数据导入导出百万级实例

    EasyPoi介绍: 利用注解的方式简化了Excel.Word.PDF等格式的导入导出,而且是百万级数据的导入导出.EasyPoi官方网址:EasyPoi教程_V1.0 (mydoc.io).下面我写 ...

  6. centos7 redis6.2.6安装

    1. 源码包下载并解压 wget http://download.redis.io/releases/redis-6.2.6.tar.gz tar -zxvf redis-6.2.6.tar.gz 2 ...

  7. 第2-3-8章 分片上传和分片合并的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 5.10 接口开发-分片上传 5.10.1 分片上传介绍 5.10.2 前端分片上传插件webuploader 5.10.3 后端代码实现 5.10.3.1 接口文档 5.10.3.2 代码开发 ...

  8. MVC开发单元测试小工具 —— 搜寻还没写单元测试的方法

    方法比较笨,有更好的建议可以提. 写这个工具呢,因为要写单元测试,保证代码质量,方便修改维护.一切为了自己方便.当然这个算是个人开发的项目 1.MVC中控制器建立个基类(这个光明正大的抄袭的),控制往 ...

  9. bugku web2

    打开全是滑稽.... 直接查看源码(用firefox的F12来查看,其他的会注释掉)可以得到flag(抓包不知道怎么回事抓不到,不然应该也可以看到注释的flag)

  10. github访问慢怎么办

    前言 访问github网速老不好?老掉线?下载贼慢?或许这篇笔记可以帮助你! Github访问慢的根本原因其实是CDN内容分发受到DNS污染,无法连接使用igithub的加速分发服务器,所以国内访问时 ...