Verilog语言入门
基础
- #号后面加延迟时间,单位为一个单位时间
- b 表示二进制、d 表示十进制、o 表示八进制、h 表示十六进制
- 十进制可以表示 0-9,其他三种除了原有的表示外新增了 X->逻辑不定态,Z->高阻态
- Verilog 数值集合由:0 代表逻辑 0 或假状态,1 代表逻辑 1 或真状态,X 代表逻辑不定态,Z 代表高阻态
- 表示格式:<位宽>’<基数><数值>
- 位宽:描述常量所含位数的十进制整数,可选项
- 基数:可选项,B 为二进制,O 为八进制,H 为十六进制,D 为十进制,默认此项缺省为十进制
- 数值:对于基数为 D 或者 d 的情况,数值符可以为任何十进制数,但不可以是 X 或 Z
- 约减运算符:同一个数的低位->高位依次参加位运算,得到的结果为 1 位的二进制数
- 移位运算符:<<左移运算符,>>右移运算符,补 0
Verilog 内置门级结构:
门声明语句格式:
<门的类型>[<驱动能力><延时>]<门实例 1>[,<门实例 2>,…<门实例 n>];
- and 与门
- nand 与非门
- nor 或非门
- or 或门
- xor 异或门
- xnor 异或非门
- buf 缓冲器
- not 非门
wire 与 reg 的区别
根据语义进行理解,wire 是连线,表示内部节点或者连线,assign语句中被赋值的信号必须是wire类型;reg 为 register 也就是寄存器,可以用来暂存内容,而且在always块中被赋值的信号必须定义为reg型。
always @()的使用
- always @ (posedge CLK or negedge RSTn):当 CLK 上升沿或者 RSTn 下降沿触发。(比较符合我们对基础的时序逻辑电路如触发器的一贯触发条件理解)
- always @ (A):当 A 变化的时候触发,在 A 的前面没有加上 posedge 或者 negedge 的时候,表示 A 变化会触发,无上升下降等条件限制。
- always @(*):跟正则表达式中 *的理解一致,代表所有,也即是在所有时候都触发了,这时也就可以看做是组合逻辑电路。
推荐的用法模板
always @ ( posedge CLK or negedge RSTn )if( !RSTn )begini <= 4'd0;....... endelsecase( i )0:....... endcase
因为在Verilog语言中,程序是并发执行的,如果我们去看一大段并发执行的代码,估计够呛,所以这里我也认真思考了作者提供的“基于仿顺序操作想法”的模板,我们可以清晰的分析出在每个不同的条件下会触发哪些语句的实现并且有条理的将这些语句联想出一个功能。
=赋值以及<=赋值
下面一段是作者原话:
基本上要搞懂这两个赋值操作符号的作用,就必须把“时序”的概念搞懂先。
一般上,参考书只是告诉我们一个是非阻塞,一个是非阻塞 .... 说实话,
当笔者把厚厚的参考书吃完以后,笔者完全还搞不懂究竟参考书都在说什么。
如果从笔者的角度去理解的话,只有在时序的活动中才可以很清楚的看清它们的区别。
宏观上,如同参考书中所说的一样;
微观上,在时序中“=”是引发“即时事件”,“<=”则是引发“时间点事件”。
可是貌似在看完这段话后,我发现还是没有理解透彻。。。因此自己去查阅了其他的资料。
概念理解
- 阻塞:如果有多条阻塞赋值语句,在前面的赋值语句没有完成之前,后面的语句就不能执行,就像被阻塞了一样,因此称为阻塞赋值方式。
- 非阻塞:多条非阻塞语句赋值在过程快中同时完成赋值操作,多条语句相当于同时执行。
示例
- 阻塞示例
module ifblock(clk,a,b,c);
input clk,a;
output b,c;
reg rb = 0,rc = 0;
assign c = rc;
assign b = rb;
always @(posedge clk)beginrb = a;//阻塞赋值rc = rb;end
endmodule
- 阻塞RTL视图
- 非阻塞示例
module ifblock(clk,a,b,c);
input clk,a;
output b,c;
reg rb = 0,rc = 0;
assign c = rc;
assign b = rb;
always @(posedge clk)beginrb <= a;//非阻塞赋值rc <= rb;end
endmodule
- 非阻塞RTL视图
Verilog语言入门相关推荐
- Verilog语言入门——边学边练
第一次写博客,记录北京交通大学李金城的Verilog语言入门 参考复制了一些代码,其他代码均为自敲 Verilog语言入门--边学边练 前言 一.基本逻辑门代码设计与仿真 1.1反相器 1.2与非门 ...
- FPGA学习之verilog语言入门指导
本人985硕士,在此分享下学习过程,verilog通关!本人博客页也分享了很多课程设计和毕业设计,欢迎收藏观看订阅!谢谢支持! 在学习之前,要思考下为什么学习FPGA,老师要求?项目要求?课题组要求? ...
- [SugerTangYL] Verilog 语言入门(零基础视角)
目录 前言 一.示例 1.一位全加器功能及电路图 2.一位全加器Verilog代码 (1)模块定义声明 (2)变量声明定义 (3)子模块调用 二.模块声明定义模板 总结 前言 hi guys,这是我第 ...
- Verilog语言入门学习(3)
verilog运算符 verilog HDL中运算符和优先级 一.算数运算符 verilog HDL中常用的运算符主要有五种,分别是加法(+).减法(-).乘法(*).除法(/).取模(%).这五种运 ...
- 初学Verilog语言基础笔记整理(实例点灯代码分析)持续更新~
实例:点灯学习 一.Verilog语法学习 1. 参考文章 刚接触Verilog,作为一个硬件小白,只能尝试着去理解,文章未完-持续更新. 参考博客文章: Verilog语言入门学习(1) Veril ...
- Verilog语言快速入门
Verilog语言快速入门 基本框架 module<模块名> (端口列表) 端口说明 input output inout参数定义 数据类型定义连续赋值语句 assign过程块 initi ...
- 怎么运行verilog语言_(六) Verilog入门之有限状态机
现在让我们回到主线,继续FPGA编程的学习.之前我们我们在测试FPGA是否工作时所用到的代码里面有组合逻辑,如加法器:也有时序逻辑,如将时钟信号分频而得到的闪烁灯. 但如何组合这两种逻辑实现我们所需的 ...
- Verilog语言快速入门(一)
组合逻辑的一般模板 时序电路的一般模板 模块总体结构 模块说明 功能描述 1.assign语句 1)算数型 2)逻辑型 3)关系运算符 4) 等价运算符 5)按位运算符 6)缩减运算符 7) 移位 ...
- Verilog HDL语言入门(二)
强烈建议用同步设计 2.在设计时总是记住时序问题 3.在一个设计开始就要考虑到地电平或高电平复位.同步或异步复位.上升沿或下降沿触发等问题,在所有模块中都要遵守它 4.在不同的情况下用if和case, ...
最新文章
- SpringBoot学习:读取yml和properties文件的内容
- 手动创建Github pull request
- 最强动画制作人书包_声优访谈丨恋与制作人动画中配声优访谈——夏磊
- JasperReport+iReport进行java报表开发
- iRobot 的 30 年成长史
- IDEA最全使用教程
- VC知识库1-54期合订本索引文件
- 彻底搞懂遗传算法原理+代码讲解+具体例子
- Maven 教程:IDEA开发环境中maven 项目配置JDK9,JDK10,JDK11,JDK12..等EA版本的配置方法 系列教程二
- P4565 [CTSC2018]暴力写挂 题解
- 科层制的精髓是不可言说,敏捷的精髓是透明
- Java 算法:带权图Weighted Graph
- 测试学习--云测试平台
- 高频量化交易软件主要的功能?
- 我是怎样把工资从400-4000
- 终结HashMap面试?我是谁?我在哪
- 滑动窗口算法思想,找出字符串中的所有字母异位词
- h5锁屏提醒-锁横屏和锁竖屏
- Google Earth Engine (GEE) ——Earth Engine Explorer (EE Explorer)使用最全解析(8000字长文)
- python的输出语法_Python入门语法综述