网站大量收购独家精品文档,联系QQ:2885784924

Verilog HDL常用基本语法.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE2 / NUMPAGES2 Verilog HDL常用基本语法V1.0 目录 TOC \o 1-3 \h \z \u 1. 前言 1 2. Verilog HDL基本结构 1 2. 数据类型及变量、常量 3 1. 逻辑值 3 2. 数值表达方式 4 3. 线网(net)型变量 4 4. 寄存器(reg)型变量 5 5. 常量 5 6. 存储器 6 3. 运算符 6 1.算数运算符 6 2. 逻辑运算符 6 3. 按位运算符 7 4. 关系运算符 7 5. 等式运算符 7 6. 其他特殊运算符 7 7.运算符优先级 9 4. 赋值语句 9 1. 连续赋值语句assign 9 2. 过程赋值语句 9 3. always语句 9 4. 阻塞与非阻塞 10 5. 条件语句 11 1. if-else语句 11 2. case语句 12 6. 循环语句forever 13 循环语句repeat 13 循环语句while 14 循环语句for 15 1. 前言 Verilog HDL语法较多,但是常用的语法较少,本文总结使用较为频繁的Verilog HDL语法,帮助初学者入门。由于整理时间仓促以及作者能力有限,文中难免有纰漏之处或者不严谨的内容,请大家批评指正。 2. Verilog HDL基本结构 我们首先看下面的代码: module AND4(a,b,out); output[3:0] out;//4位输出 input[3:0] a,b;//4位输入a和b assign out = ab;//按位与运算 endmodule 这段代码中定义了一个模块AND4,由模块的声明开始,最开始的关键词是module,这个模块的名字叫AND4,这个模块的最后是endmodule 我们还可以使用另外一种写法,直接在参数列表里面将参数名列出: module AND4(input[3:0] a, input[3:0] b, output out); assign out = ab; endmodule 通过RTL分析,得到以下结果 下面我们看一个分频模块 module FenPin(input clk_in, output clk_out); reg c_out = 0; assign clk_out = c_out; always @(posedge clk_in) begin c_out = ~c_out; //取反 end endmodule 其中,posedge表示上升沿,clk_in表示时钟,绿色部分是always块,一般用来描述时序逻辑电路。RTL分析结果如下: 图中D触发器处于上升沿触发,c_out的初始值为0,每经过时钟clk_in的上升沿翻转一次,其仿真结果如下: 经过上面的分析,我们可以总结出Verilog HDL 的基本结构 1. Verilog HDL程序由模块构成,每个模块在module和endmodule声明语句中 2. 每个Verilog HDL源文件中只有一个顶层模块,其他为子模块。可以每一个模块写一个文件 3. 每个模块中要对端口定义,并说明输入输出端口,然后对模块的功能进行逻辑描述。 4. 模块中的时序逻辑部分在always块的内部,在always块中只能对寄存器变量赋值。 5. 模块中对端口或其他wire型变量的赋值,必须在always块的外部使用assign语句,通常是将寄存器的值送出。 6. 程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。 7. 除了endmodule语句、begin_end语句和fork_join语句外,每个语句和数据定义的最后必须有分号。 8. 可用/*…*/和//…对程序的任何部分作注释。加上必要的注释,可以增强程序的可读性和可维护性 2. 数据类型及变量、常量 1. 逻辑值 2. 数值表达方式 3. 线网(net)型变量 线网(net)型变量最常用的就是wire。可以将wire直接的理解为连线。例如一个D触发器reg1的输出是Q,这个Q连接到端口out1上,那么out1的值始终跟随着reg1的值的变化而变化。例如: wire clk_out; assign clk_out = c_out; 例: wire[7:0] a,b,c;//a,b,c都是位宽为8位的wire wire d;//d是1位的wire 4. 寄存器(reg)型变量 reg型也称为寄存器型。数字电路中的触发器只在时钟有效边沿到来的时候,保存的值才能够发生改变。 例: wire clk_out; reg c_out;

文档评论(0)

duantoufa005 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档