verilog入门学习笔记

这篇具有很好参考价值的文章主要介绍了verilog入门学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

verilog学习笔记(一)

模块结构

第一部分(必填)
module 模块名 ([端口列表]);
[端口信号声明;]
[参数声明;]
1、模块名是指电路的名字,由用户指定,最好与文件名一致
2、端口列表是指电路的输入/输出信号名称列表,信号名由用户指定,各名称间用逗号隔开。
3、端口信号声明是要说明端口信号的输入输出属性、信号的数据类型,以及信号的位宽。
输入输出属性有input,output,inout(双向)三种
信号的数据类型常用的有wire和reg两种
信号的位宽用[n1:n2]表示
同一类信号之间用逗号隔开
参数声明要说明参数的名称和初值
例子:
verilog按位非,学习,fpga开发
例子解释:
1、位宽不作说明,则默认1位;
数据类型不作说明,则默认为wire型。
2、输出信号S位宽为4位,对应信号为S[3],S[2],S[1],S[0]
第二部分功能描述部分
内部信号声明
(常用语句只有3种:assign语句,always语句,底层模块调用语句)
底层模块或门原语调用(包括生成块)
initial 或always语句块
任务和函数定义
specify块(路径延迟)
第三部分结束语句(必填)
endmodule

常用语句

assign语句(连续赋值语句)

基本格式
assign 赋值目标 = 表达式
特点“
1、赋值目标必须是wire型,wire表示电路间的连线。
2、之连续赋值语句是指其总是处于激活状态,只要表达式中的操作数有变化,立即进行计算和赋值。
例子
verilog按位非,学习,fpga开发
assign M=B|C;
Verilog具有丰富的表达式运算公式,可用于assign语句

算术型

verilog按位非,学习,fpga开发
(记住%求余,**求幂)
注意:
1、除了求余的操作数只能是整数,其它的操作数可以是实数也可以是整数。
2、求余运算结果取第一个操作数的符号

逻辑型

verilog按位非,学习,fpga开发
注意:
1、逻辑型运算的结果由3中1(真),0(假)、x(不确定)。

关系运算符

verilog按位非,学习,fpga开发

运算就结果与逻辑运算相同

按位运算符

verilog按位非,学习,fpga开发
注意:
1、按位运算的操作数是1位或多位二进制数。
2、按位非的操作数只有一个,将该数的每一位求非运算。
3、其它按位运算的操作数有2个或多个,将两个操作数对应的位两两运算;如果操作数位宽不同,位宽小的会自动左添0补齐;
4、结果与操作数位宽相同;
5、注意与逻辑运算符区分:
&按位与,&&逻辑与;
|按位或,||逻辑或。

缩减运算符

verilog按位非,学习,fpga开发
说明:
1、与按位与运算&区分:
例子:
(按位与运算)
Y=4‘ b1001&4’b0111结果为0001
(缩减与)
Y=&4‘ b1001结果为0
可以看出&起作用的运算位置不同
2、计算过程:
以上面的例子为例:从左到右第一位与后一位作与运算,求得的结果又与后一位作运算,结果只有一位
3、缩减运算的操作数是1位或多位二进制数

移位运算符

verilog按位非,学习,fpga开发
格式
操作数 移位符 n;
注意:
1、只有对有符号数的算术右移自动补符号位;其他移位均自动补0。
2、移位符与算术移位符的区别
例:
Y=4’b1001>>1;结果0100
Y=4’b1001>>>1;结果1100

拼接复制运算符

格式:
1、{操作数1,操作数2,…}
将操作数1,2…拼接到一起。
2、{n{操作数1,操作数2,…}}
将操作数1,2…拼接到一起后复制n遍拼接起来。

条件运算符

?:用于条件赋值
格式:
表达式1?表达式2:表达式3

always语句块(也叫过程块)

基本格式:
always @(敏感信号条件表)
各类顺序语句;
注意:
1、always语句本身不是单一的有意义的一条语句,而是和下面的语句一起构成一个语句块,称之为过程块;过程块中的赋值语句称过程赋值语句;
2、该语句块不是总处于激活状态,当满足激活条件时才能被执行,否则被挂起,挂起时即使操作数有变化,也不执行赋值,赋值目标值保持不变;
3、赋值目标必须是reg型的。
4、always语句中还可以使用if、case、for循环等语句,其功能更加强大。
5、激活条件由敏感信号条件表决定,当敏感条件满足时,过程块被激活。
敏感条件有两种,一种是边沿敏感,一种是电平敏感。
边沿敏感:
(posedge 信号名) 信号上升沿到来
(negedge 信号名) 信号下降沿到来
电平敏感:(信号名列表)信号列表中的任一个信号有变化
例:
(a,b,c)当a,b,c中有一个发生变化
例:
always@(posedge CLK)
Q=D;
当CLK上升沿到来时,激活该语句块,将D的值赋给Q;
否则,该语句块挂起,即使D有变化,Q的值也保持不变,直到下一次赋值。
此语句相当于一个D触发器
verilog按位非,学习,fpga开发
例:
always@(D)
Q=D;
当D有变化时(不管是由1变0还是由0变1),激活该语句块,将D的值赋给Q;否则,该语句块挂起,Q的值保持不变,直到下一次赋值。
相当于二极管
verilog按位非,学习,fpga开发
在以上两个例子中Q必须是reg型的
与assign语句相比:
1、always语句块中除了可以使用表达式赋值以外,还可以使用if,case等行为描述语句,还能够描述边沿变化,因此其功能比assign语句更强大(assign语句不能使用if等语句,也不能描述边沿变化)。
2、always语句块中如果多条就值语句必须将其用begin end包括起来,assign语句中没有begin end。(verilog语言所有是并行执行的,但是begin end里面是顺行执行的)
3、同一程序的always和assign两条语句,他们之间是并行的。如果程序中有一个变量Q则要进行声明。
内部信号声明格式:
数据类型 位宽 信号名称 元素个数

阻塞赋值与非阻塞赋值

设A、B同时由0变1
激活前:M1=0,M2=0,Q=0
阻塞赋值例子:
verilog按位非,学习,fpga开发
条件:
激活后:M1=1,M2=0,Q=1(每一步计算之后马上赋值)
非阻塞赋值例子:
verilog按位非,学习,fpga开发
激活后:M1=1,M2=0,Q=0(计算全部完成之后再赋值)
注意:
1、阻塞赋值用的符号是=,非阻塞赋值用的符号是<=
2、设计组合电路时常用阻塞赋值,设计时序电路时常用非阻塞赋值(但不是绝对的)。
3、不能在一个always块中混合使用阻塞赋值和非阻塞赋值。

底层模块和门原语调用

底层模块

底层模块描述
verilog按位非,学习,fpga开发
顶层模块描述:
verilog按位非,学习,fpga开发
为了调用底层模块,需要加两个内部变量d1和q1;并给两次调用的模块进行命名;调用时例化名不能省略。
底层模块调用格式:
底层模块名 例化名 (端口映射)
端口映射有两种方法:
端口名关联法(命名法)
位置关联法(顺序法)
命名法格式:
(.底层端口名1(外接信号名1),.底层端口名2(外接信号名2),…)
以上例的底层模块调用为例:
DFF dff1(.CLK(clk),.D(d1),.Q(q1));
因为有名字对应,不必按底层模块的端口信号列表顺序
顺序法格式:
(外接信号名1,外界信号名2,…)
DFF dff2(q1,d,q);
必须严格按照底层模块的端口信号列表顺序书写

门原语调用

门原语调用格式:
门原语名 实例名 (端口连接)
其中实例名可省略(和模块调用不同),端口连接只能采用顺序法,输出在前,输入在后。
verilog按位非,学习,fpga开发
常见的门:
verilog按位非,学习,fpga开发

Verilog中的数据类型

Verilog中的数据类型分为两大类
线网类(net类)
verilog按位非,学习,fpga开发
最常用的是wire
变量类(variable类)
verilog按位非,学习,fpga开发
最常用的是reg
因连续赋值语句不需要保存,过程赋值语句后者需要保存。
因此规定:
数据类型net型用于连续赋值的赋值目标或门原语的输出,且仿真时不需要分配内存空间
数据类型variable用于过程赋值的赋值目标,且仿真时需要分配内存空间。
数据类型使用注意
1、使用何种赋值语句对该信号进行赋值,如果是连续赋值或门原语赋值或例化语句赋值,则定义成net型;如果是过程赋值则定义成variable型。
2、对于端口信号来说,input信号和inout信号必须定义成net型的;output信号可以是net型的也可以是variable型的,决定于如何对其赋值。
三种赋值方法比较:
verilog按位非,学习,fpga开发
(1)使用连续赋值
verilog按位非,学习,fpga开发
此时,d和e必须定义为net型
(2)使用门原语赋值
verilog按位非,学习,fpga开发
此时,d和e也必须定义为net型的。
(3)使用过程赋值语句
verilog按位非,学习,fpga开发
此时,d和e必须定义为variable型的。

Verilog数字的表示格式

无符号数的表示方法:
<位宽>’ <进制><数字>
例:
2‘ b00——(00)2
有符号数的表示方法:<位宽>’ < sb ><数字>
例:
8’ sb10111011——(-69)10
注意有符号数是按照补码表示的,即第一位是符号位。(1表示负数,0表示正数)
Verilog语言的逻辑值有四种
1:逻辑1,高电平,数字1
0:逻辑0,低电平,数字0
x:不确定
z:高阻态

if语句

判断执行结果:
结果为真(1或非0),则执行真语句,
条件为假(0或x),则执行假语句。
verilog按位非,学习,fpga开发
在用if语句设计“组合电路”时要注意,如果条件不完整,会综合出寄存器。
使条件完整的两种方法:
1、加else
verilog按位非,学习,fpga开发
2、设初值
verilog按位非,学习,fpga开发

case语句

注意
Case语句最后要有个endcase不能忘。
如果条件描述不完整,则会综合出寄存器;在设计组合电路时要注意使条件描述完整。
加default语句可以使条件完整。如果条件描述完整也可以不加default语句。

Verilog语言的描述风格

三种描述方式
1、结构化描述(也称门级描述)(全部用门原语和底层模块调用)(不适合具体书写,因为不是很直观)
2、数据流级描述(全部用assign语句)
3、行为级描述(全部用always语句配合if、case语句等)
4、RTL级描述(数据流级+行为级,可综合)
实际描述是三种混合的。

其它规定

(1)关键字
关键字即Verilog语言中预定义的有特殊含义的英文词语
(2)标识符
标识符即用户自定义的信号名、模块名等等;注意关键字不能作标识符;Verilog区别大小写(关键字都是小写)。
(3)文件取名和存盘
Verilog文件扩展名为.v; verilog不要求文件名和模块名一致,但Quartusll要求一致
(4)注释
//单行注释
/**/多行注释

数字电路遗忘知识点的补充

常见的电路门
verilog按位非,学习,fpga开发

参考b站BV1iv4y1F7Km文章来源地址https://www.toymoban.com/news/detail-722892.html

到了这里,关于verilog入门学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA学习笔记:Verilog利用计数器发生信号

    1.等占空比信号发生:计数器计时1ms,使LED灯每隔1ms状态翻转一次,实现LED灯闪烁,产生周期为2ms、占空比50%的方波信号; 2.非等占空比信号发生:计时器计时1.8ms,LED灯亮1ms,灭0.8ms,产生周期为1.8ms、非等占空比的方波信号; 3.序列型脉冲信号产生:生成1011010011的序列脉冲

    2024年02月22日
    浏览(30)
  • FPGA 学习笔记:Verilog 实现LED流水灯控制

    在初步了解 Xilinx Vivado 的使用后,开启了FPGA Hello World 程序:LED 流水灯控制 在嵌入式MCU中,流水灯需要延时来实现,FPGA的延时,使用外部晶振来实现 实现 3个 LED 流水灯控制,也就是循环依次点亮, LED 低电平亮, 高电平灭,FPGA 有一个40MHz的外部晶振,作为系统时钟输入开

    2023年04月08日
    浏览(30)
  • FPGA学习笔记:verilog基础代码与modelsim仿真(三)

    1. 分频器——偶分频 方法1: verilog代码实现: modelsim仿真波形图: 方法2(推荐): 比起方法一直接使用计数器定义一个新的时钟波形,方法二使用flag_out作为分频变量从而实现分频器的功能。虽然二者都使用了计数器,但方法二显然更符合“分频”的定义,且此方法在告诉

    2024年02月06日
    浏览(35)
  • 【FPGA/verilog -入门学习5】verilog中的genrate for 和for 以及数组的用法

    本文参考:verilog generate语法总结-CSDN博客 Verilog数组赋值_笔记大全_设计学院 在Verilog中, generate for 和 for 都是用于循环的结构,但是它们具有不同的应用场合和语义。 for 循环: for 循环主要用于行为描述(behavioral description),通常用于描述算法或数学运算。 for 循环在仿真

    2024年02月03日
    浏览(33)
  • 【FPGA/verilog -入门学习1】verlog中的BUFGCE,BUFGMUX原语

    参考:(详解)BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用 - 知乎 FPGA资源介绍——时钟资源(二)_fpga时钟资源-CSDN博客 是 带有时钟使能端的全局缓冲 。它有一个输入I、一个使能端CE和一个输出端O。只有当BUFGCE的使能端CE有效(高电平)时,BUFGCE才有输出。 对比发现:使用自己产生

    2024年02月21日
    浏览(28)
  • FPGA学习笔记(1):使用Verilog实现常见的加法器

    本文使用VerilogHDL实现一些简单的加法器,本人水平有限,希望大佬能够多指证 Quartus Prime(18.0) Modelsim 半加器可以用于计算两个单比特二进制数的和,C表征进位输出,S表述计算的结果。 半加器的真值表 化简以后的逻辑表达式可以表达为: s = a’b+ab’ c = ab Verilog 代码块 全加

    2024年02月09日
    浏览(33)
  • 【FPGA/verilog -入门学习11】verilogTestbench中的文本文件写入,读出,打印等操作

    本文参考:Verilog中的系统任务(显示/打印类)--$display, $write,$strobe,$monitor-CSDN博客 Verilog:parameter、localparam的区别和用法-CSDN博客 Verilog的系统任务----$fopen、$fclose和$fdisplay, $fwrite,$fstrobe,$fmonitor_verilog fopen-CSDN博客 Verilog的系统任务----$readmemh和$readmemb-CSDN博客 $display可以

    2024年02月03日
    浏览(33)
  • FPGA学习笔记:verilog基础代码与modelsim仿真(六)——vga显示模块

    VGA显示 目标:实现屏幕红、橙、黄、绿、青、蓝、紫、黑、白、灰条形显示 1. 模块框图与波形图 vga_colorbar是实现目标功能的总体模块框图,为了实现对应的输出,我们使用三个具体功能模块实现功能。 (1) clk_gen——使用pll锁相环实现时钟分频 (2)vga_ctrl——图像控制与输出模

    2024年02月04日
    浏览(33)
  • verilog入门学习笔记

    第一部分 (必填) module 模块名 ([端口列表]); [端口信号声明;] [参数声明;] 1、模块名是指电路的名字,由用户指定, 最好与文件名一致 2、端口列表是指电路的输入/输出信号名称列表,信号名由用户指定,各名称间用逗号隔开。 3、端口信号声明是要说明端口信号的

    2024年02月07日
    浏览(25)
  • FPGA/Verilog HDL/AC620零基础入门学习——第一个项目按键控制LED

    最近要考试了,所以我赶紧补习FPGA,我们用的是小梅哥的AC620开发板,软件是Quartus。推荐看这个视频教程:零基础轻松学习FPGA,小梅哥FPGA设计思想与验证方法视频教程 用按键控制LED灯的亮灭就是一个二选一多路器,两个IO,a、b,可以是高电平,也可以是低电平。 输入按键

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包