01-Verilog基础
Verilog RTL编程实践
在进行数字IC设计过程中,RTL coding能力是非常重要的。结合逻辑仿真(VCS)和逻辑综合(Design Compiler)工具。看RTL。
1 ASIC Design Flow
- IDEA
- Design specification
- Design entry/Verilog Coding
- Simulation/function verification
- chip integration/verificattion
- Sysnthesis/Pre layout/Timing/formal verification
- scan chain insertion/Test;Generation/fault simulation
- physical design
- To sign off
- 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
- module name(数字、字母、下划线、$)
- module module_name(端口名)
- input/output[位宽]--[3:0]表示4位的位宽
- assigin--连续赋值语句,将左侧和右侧进行连接,主要对于组合逻辑电路进行建模
- {MSB(最高位),LSB(最低位)}--表示拼接符
- 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建模

对于上述的图片解释:
- 使用wire 变量 声明一根线Y a,b改变 y就发生变化
- assign--讲左右进行连接
- &--按位与
01-Verilog基础的更多相关文章
- Verilog基础入门——Vivado工程创建(三)
Verilog基础入门--Vivado工程创建(三) Vivado是Verilog语言的一个集成环境,目前使用的版本为英文版,简单介绍一下在Vivado中创建一个工程并写入源文件 [配置] win10 ...
- 01: tornado基础篇
目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...
- 后端 - Lession 01 PHP 基础
目录 Lession 01 php 基础 1. php 基础 2. php 变量 3. php 单引号 和 双引号区别 4. 数据类型 5. 数据类型转换 6. 常量 7. 运算符 8. 为 fals ...
- 【第一季】CH06_FPGA设计Verilog基础(三)
[第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...
- 【第一季】CH05_FPGA设计Verilog基础(二)Enter a post title
[第一季]CH05_FPGA设计Verilog基础(二) 5.1状态机设计 状态机是许多数字系统的核心部件,是一类重要的时序逻辑电路.通常包括三个部分:一是下一个状态的逻辑电路,二是存储状态机当前状态 ...
- 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
[第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...
- 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 ...
- 086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结 本文知识点:面向对象基础(类和对象)总结 说明 ...
- 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现
075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...
- 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现
074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...
随机推荐
- java集合框架复习----(3)Set
文章目录 四.set集合 1.hashSet[重点] 2.TreeSet 四.set集合 无序.无下标.元素不可重复 1.hashSet[重点] == 数组+链表+红黑树== 基于hashcode计算 ...
- costool - 腾讯云cos快捷工具。
目录 使用截图 使用方法 配置文件 安装方法 其他 一个腾讯云cos(对象存储)非官方快速上传和下载的工具,使用官方go-sdk二次开发.可以用于以下场景. 备份一些配置文件,比如.bashrc .v ...
- vue 使用vuex 刷新时保存数据
created () { this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getIte ...
- TKK: 更新 TKK 失败,请检查网络连接 idea翻译错误-IDEA翻译失败-Translation用不了
IDEA 提示:更新 TKK 失败,请检查网络连接 解决方法: 1.进入 C:\Windows\System32\drivers\etc 找到 hosts文件修改 注意:如果用记事本打开不能修改,则修 ...
- 什么是CLR?
CLR翻译为"公共语言运行库",全称是Common Language Runtime,它是一个可以由多种语言使用的"运行时",CLR的核心功能如内存管理,程序集 ...
- 不借助idea开发工具构建一个Javaweb项目
不借助idea开发工具构建一个Javaweb项目 目录结构 webappsroot |----------WEB-INF |----------classes(存放字节码) |----------li ...
- java基础篇—基础语法
一.关键字和保留字 1.什么是关键字? 通俗来说就是带有特殊含义的字符,有自己专门用途的单词 2.特点? 关键字全部由小写构成,以下是java官方列举出的关键字 注意: 保留关键字:指的是现有版 ...
- Centos 7.6 安装部署 openGauss 3.1.0 企业版一主两备集群
一.安装环境设置 1.1 硬件环境 名称 最低配置 建议配置 测试配置 服务器数量 3 略 略 硬盘 * 至少1GB用于安装openGauss的应用程序.* 每个主机需大约300MB用于元数据存储.* ...
- C++编程笔记(多线程学习)
目录 一.线程创建 二.线程的相关操作 2.1 join 2.2 detach 2.3 joinable 三.线程参数 3.1传参所引发的资源回收问题 3.2 将对象的成员函数作为入口函数 四.线程的 ...
- 【每日一题】【迭代器,泛型】2022年1月8日-NC93 设计LRU缓存结构
描述设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 k ,并有如下两个功能1. set(key, value):将记录(key, value)插入该结构2. get(key): ...