verilog____模块的结构、数据类型、变量和基本运算符.ppt_第1页
verilog____模块的结构、数据类型、变量和基本运算符.ppt_第2页
verilog____模块的结构、数据类型、变量和基本运算符.ppt_第3页
verilog____模块的结构、数据类型、变量和基本运算符.ppt_第4页
verilog____模块的结构、数据类型、变量和基本运算符.ppt_第5页
免费预览已结束,剩余38页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章 模块的结构、数据类型、变量和基本运算符,3.1 模块的结构,module 模块名(端口信息); 输入/输出说明 内部信号声明 逻辑功能描述 endmodule,verilog 模块由两部分组成:端口信息和内部功能。,module block1(a, b, c, d, e); input a, b, c; output d, e; assign d = a | ( b endmodule,3.1 模块的结构,verilog 模块的结构由在module和endmodule 关键词之间的四个主要部分组成: - 端口信息: module block1(a, b, c, d ); - 输入/输出说明 : input a, b, c ; output d ; - 内部信号: wire x; - 功能定义: assign d = a | x ; assign x = ( b endmodule,verilog hdl模块的结构,请在下面的空格中填入适当的符号 使其成为右图的verilog 模块 : module block1(a, b, , , ); input , , ; d, ; assign d = a | ( b _,编写verilog hdl模块的练习,请在下面的空格中填入适当的符号 使其成为右图的verilog 模块 : module block1(a, b, c , d, e ); input a, b, c; output d, e ; assign d = a | ( b endmodule,编写verilog hdl模块的练习,module block (a,b,c); output c; input a,b; ; endmodule,module block3(a,b,c); output 2:0 c; input 2:0 a,b; ; block b0(.b(b0),.a(a0),.c(c0); block b1(a1,b1,c1); endmodule,模块的端口定义与调用,端口实现模块互连,要保证连接正确。,本模块信号,另一模块信号,在verilog 模块中有三种方法可以生成逻辑电路: - 用 assign 语句(连续赋值语句): assign cs = ( a0 end,verilog hdl模块中的逻辑表示,如在模块中逻辑功能由下面三个语句块组成 : assign cs = ( a0 end 三条语句是并行的,它们产生独立的逻辑电路; 而在 always 块中: begin 与 end 之间是顺序执行的。,并行和顺序逻辑关系的表示,verilog模块中的信号,只有两种主要的信号类型: - 寄存器类型: reg 在always 块中被赋值的信号,往往代表 触发器,但不一定是触发器。 - 连线类型: wire 用 assign 关键词指定的组合逻辑的信号 或连线,verilog模块中的信号要点,需要注意的是: - 寄存器 ( reg )类型不一定是触发器。 - 它只是在 always 块中赋值的信号。,verilog中reg与wire的不同点,用寄存器 (reg)类型变量生成组合逻辑举例: module rw1( a, b, out1, out2 ) ; input a, b; output out1, out2; reg out1; wire out2; assign out2 = a ; always (b) out1 = b; endmodule,verilog中reg与wire的不同点,用寄存器 ( reg )类型变量生成触发器的例子: module rw2( clk, d, out1, out2 ) ; input clk, d; output out1, out2; reg out1; wire out2; assign out2 = d end endmodule,verilog中两种不同的赋值语句,不阻塞(non-blocking) 赋值语句: always (posedge clk) begin b = a ; c = b; end,verilog中两种不同的赋值语句,阻塞(blocking) 赋值语句: always (posedge clk) begin b = a ; c = b; end,两种不同的赋值语句区别要点,非阻塞(non-blocking) 赋值语句 ( b= a): - 块内的赋值语句同时赋值; - b 的值被赋成新值 a 的操作, 是与块内其他赋值 语句同时完成的; - 建议在时序电路的模块中使用不阻塞赋值;组合逻辑的模块中使用阻塞赋值。 阻塞(blocking) 赋值语句 ( b = a): - 完成该赋值语句后才能做下一句的操作; - b 的值立刻被赋成新值 a; - 时序电路中硬件没有对应的电路,因而综合结果未知。,3.2 数据类型及常量和变量,数据类型用来表示硬件电路的数据存储和传送元素的 总共有19种数据类型 常用4种: reg 型 wire 型 integer 型 parameter 型,3.2.1 常量,数字 整数常量: 1) 二进制整数(b或b) 2) 十进制整数(d或d) 3) 十六进制整数(h或h) 4) 八进制整数(o或o) 数字表达方式: 如:8b10000011、4hf、5d12、d12、12 x和z值: 不定值和高阻值 如:4b10x0、4b101z、12dz、12d?、8h4x,3.2.1 常量,数字 负数: 位宽前加-号,内部是补码 如:-1=-321=32hffffffff 1) 默认是32位、十进制 下划线: 仅增加可读性 如:16b10x0_0000_0000_1111 “ab”=16b01000001_01000010,3.2.1 常量,参数(parameter)型 参数是一个常量,经常用于定义时延和变量的宽度 如: parameter bitwidth = 8; parameter e=32, a=8,b=16; 模块引用另一模块的实例时,传递参数值,module top; wire 3:0a4; wire 3:0f4; decode #(3,4) d1(a4,f4) endmodule,module decode(a,f); parameter width=1; parameter p=2; . endmodule,参数(parameter)型 在一个模块改变另一模块的参数时,使用defparam命令,include “top.v” include “block.v” include “note.v” module test; wire w; top t(); endmodule,module top; wire w; block b1(); block b2(); endmodule,module block; parameter p=0; endmodule,module note; defparam test.t.b1.p=2, test.t.b2.p=3; endmodule,3.2.2 变量,网络数据类型:表示结构实体之间的物理连接 wire型:用来表示单个门驱动或连续赋值语句驱动的网络型数据,默认值为z,常用assign语句或实例元件的输出赋值。 tri型:用来表示多驱动器驱动的网络型数据 reg型:寄存器类型是数据储存单元的抽象。 通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当,默认值为x。在always 块内被赋值的每一个变量必须是reg型。 wire tri reg型的定义格式相同,变量即在程序运行过程中其值可以改变的量,3.2.2 变量,memory型:通过对reg 型变量建立数组来对存储器建模,可以描述ram 型存储器,rom 存储器和reg文件。数组中的每一个单元通过一个数组索引进行寻址。如:reg 3:0 mm 7:0;,变量即在程序运行过程中其值可以改变的量,mm7,mm6,mm5,mm4,mm3,mm2,mm1,mm0,mm3=4b0110;,0110,mm7,mm6,mm5,mm4,mm3,mm2,mm1,mm0,3.3 运算符及表达式,算术运算符(+,,/,) 赋值运算符(=,=,) 拼接运算符( ),运算符按其功能可分为以下几类:,按其所带操作数的个数运算符可分为三种:,单目运算符:可以带一个操作数,操作数放在运算符的右边。 二目运算符:可以带二个操作数,操作数放在运算符的两边。 三目运算符:可以带三个操作,这三个操作数用三目运算符分隔开。,思考题,1. 模块由哪几部分组成?,verilog 模块的结构由在module和endmodule 关键词之间的四个主要部分组成: - 端口信息: module block1(a, b, c, d ); - 输入/输出说明 : input a, b, c ; output d ; - 内部信号: wire x; - 功能定义: assign d = a | x ; assign x = ( b endmodule,思考题,2. 端口分为几种?,端口分为输入输出和双向端口。,3. 为什么端口要声明信号的位宽?,端口代表了电路的输入输出连接线,因此要明确连线的数量。,4. 能否说模块相当于电路图中的功能模块,端口相当于功能模块的引脚?,能,思考题,5. 模块中的功能描述可以由哪几类语句或语句块组成?它们出现的顺序会不会影响功能的描述?,功能描述由:assign语句、实例化门电路和always块组成。不会。,6. 这几类描述中哪一种直接与电路结构有关?,实例化门电路。,思考题,7. 最基本的verilog变量有哪几种?,最基本的verilog变量:wire和reg,8. wire和reg型变量的差别是什么?,无记忆和有记忆 assign语句赋值和always块内赋值,9. 由连续赋值语句assign复制的变量能否是reg型变量?,不能,思考题,10. 在always块中被赋值的变量能否是wire类型的?如果不能,那么必须是什么类型的?他们一定是实际的寄存器吗?,不能;必须是reg类型;不一定是实际的寄存器。,11. 参数类型的变量有什么用处?,用标识符表示一个常量,提高可读性和可维护性 在模块或实例引用时,通过参数传递改变值。 多层次模块构成的电路中,重新定义参数defparam,思考题,12. verilog语法的参数传递和重新定义有什么直接的应用价值?,使得已编写的从模块具有更大的灵活性。,13. 逻辑比较符小于等于”=”和非阻塞赋值符的表示完全一样,为什么veril

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论