- 1、本文档共48页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog课件3重点
数据类型 数据类型用来表示数字电路硬件中的数据存储和传送的元素。 Verilog HDL共有19种数据类型,分2大类数据: 线网类型 表示器件之间的物理连接。 其数值由驱动元件决定,如果没有驱动元件连接到线网上,则其默认值为高阻Z。 寄存器类型 表示数据的储存单元。 其默认值为不定X。 两者最大的区别: 寄存器类型保持最后一次的赋值,而线网类型则需要持续的驱动。 线网类型 wire(网络连线): 由模块或门驱动的连线。 驱动端信号的改变会立刻 传递到输出的连线上。 例如:右图上,selb的改 变,会自动地立刻影响或 门的输出。 线网类型 线网型数据常用来表示以assign关键字指定的组合逻辑信号。 Verilog程序模块中输入输出信号类型缺省时自动定义为wire型。 wire型信号可以用作任何方程式的输入,也可以用作“assign”语句或实例元件的输出。 定义格式: wire [位宽] 数据名1, 数据名2,… 数据名n; wire a; //定义了一个一位的wire型数据 wire [7:0] b;//定义了一个八位的wire型数据 wire [4:1] c,d; //定义了二个四位的wire型数据 线网类型 Verilog语法规定可以对wire型变量有多个驱动,但只有用于仿真,在实际电路中,对任何信号有多个驱动源都会产生不确定的后果,因此综合是过不去的 wire a,b,c; assign c =a; assign c =b; 在Verilog定义中,wire、tri功能是完全一致的,提供这两种不同名称的目的是为了与模型中所使用的变量实际情况相一致。 线网类型 寄存器类型(reg) 定义寄存器数据类型的关键字是reg,可以通过赋值语句改变寄存器存储的值。 reg类型数据的缺省初始值为不定值x,这在电路仿真时需要十分注意,建议仿真前都要明确给每一个寄存器确定初始值。 在“always或initial”块内被赋值每一个信号都必须定义成reg类型。 定义方式: reg [位宽] 数据名1,数据名2,… 数据名i; reg rega; //定义了一个1位reg型数据 reg [3:0] regb; //定义一个4位的reg型数据 reg [4:0] regc, regd; //定义两个5位的reg型数据 寄存器(register)类型变量 寄存器类型(reg) 寄存器类型(reg) reg和wire类型变量的区别 reg类型的变量可以被直接赋予数值,向外输出信号 而wire类型的变量值是由驱动它的电路决定的 位选择和部分选择 位选择从向量中抽取特定的位。形式如下: wire或者reg向量名[bit_select_expr] reg [5:0] State; wire [3:0] Prt; State[1] State[4] //寄存器位选择。 Prt[0] | Bbq //线网位选择。 位选择和部分选择 在部分选择中,向量的连续序列被选择。形式如下: wire或者reg向量名[常数表达式1:常数表达式2] reg [5:0] State; wire [3:0] Prt; State[4:1] //寄存器部分选择。 Prt[3:2] //线网部分选择。 存储器 通过对reg型变量建立数组来对存储器进行建模。 reg [n-1:0] 存储器名[m-1:0]; reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个n位的寄存器。 存储器名后的[m-1:0] 则定义了该存储器中有多少个这样的寄存器(即地址),最后用分号结束定义语句。 reg [7:0] mema[255:0]; //256x8位的存储器。 存储器 一个由n个1位寄存器构成的存储器组不同于一个n位的寄存器。 reg [n-1:0] rega; //一个n位的寄存器 reg mema[n-1:0]; //一个由n个1位寄存器构成存储器组 一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行。 rega =0; //合法赋值语句 mema =0; //非法赋值语句 mema[3]=0;//正确.给memory中的第3个存储单元赋值0. 如何选择数据类型 输入口(input)可以由寄存器
文档评论(0)