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. MyBatisPlus分页插件在SpringBoot中的使用

    文章目录 1.目录结构 2.新增配置 3.编写测试类 4.测试结果 5.数据库中的表 文件的创建: https://blog.csdn.net/weixin_43304253/article/deta ...

  2. 基于 Redis 实现分布式锁

    1.主流分布式锁实现方案 基于数据库实现分布式锁 基于缓存(redis 等) 基于 Zookeeper 2.根据实现方式分类 类 CAS 自旋式分布式锁:询问的方式,类似 java 并发编程中的线程获 ...

  3. 乾象投资:基于JuiceFS 构建云上量化投研平台

    背景 乾象投资 Metabit Trading 成立于2018年,是一家以人工智能为核心的科技型量化投资公司.核心成员毕业于 Stanford.CMU.清北等高校.目前,管理规模已突破 30 亿元人民 ...

  4. Python--网络编程学习笔记系列02 附:tcp服务端,tcp客户端

    Python--网络编程学习笔记系列02 TCP和UDP的概述: udp通信模型类似于写信,不需要建立相关链接,只需要发送数据即可(现在几乎不用:不稳定,不安全) tcp通信模型类似于打电话,一定要建 ...

  5. Jmeter添加性能监控插件监控被测系统资源

    使用jmeter来监控服务器资源(CPU.I/O.内存.网络等),需要安装jmeter性能监控插件以及在被测服务器中启动监控服务. 一.下载并安装插件 下载 Plugins Manager插件管理器, ...

  6. MAUI新生-XAML语法基础:语法入门Element&Property&Event&Command

    一.XAML(MAUI的XAML)和HTML 两者相似,都是标签语言(也叫标记)组成的树形文档.每个标签元素,可视为一个对象,通过"键=值"形式的标签属性(Attribute),为 ...

  7. PLC攻击(一):应用层攻击

    ​ 转载请注明出处:信安科研人please subscribe my official wechat :信安科研人获取更多安全资讯 参考文献: A Stealth Program Injection  ...

  8. minio API demo

    package mainimport ( "context" "fmt" "github.com/minio/minio-go/v7" &q ...

  9. GO语言内存操作指导—unsafe的使用

    在unsafe包里面,官方的说明是:A uintptr is an integer, not a reference.Converting a Pointer to a uintptr creates ...

  10. orcl rollup 分组小计、合计

    表数据: select * from group_test; 分组小计.合计: select group_id, decode(concat(job, group_id), null, '合计', g ...