《EDA技术实用教程(第六版)》学习笔记——第三章
第三章目录
《EDA技术实用教程(第六版)》学习笔记——第三章1、半加器的Verilog的描述1、1模块语句及其表达方式1、2端口语句、端口信号名和端口模式1、3逻辑操作符1、4连续赋值语句1、5关键字1、6标识符1、7书写规范1、8Verilog模块文件取名和存盘1、9注释符号
2、4选1多路选择器及其case语句表述方式2、1reg型变量定义2、2过程语句2、3块语句begin _end2、4case条件语句2、5Verilog的四种逻辑状态2、6并位操作运算符2、7Verilog的数字表达形式
3、4选1多路选择器及其case语句表述方式3、1按位逻辑操作符3、2等式操作符3、3wire定义网线型变量
4、4选1多路选择器及其case语句表述方式5、4选1多路选择器及其条件语句表述方式5、1if条件语句5、2过程赋值语句
6、全加器设计及例化语句应用6、1全加器原理图结构6、2顶层设计文件6、3Verilog例化语句及其用法
7、8位加法器设计及算术操作符应用7、1算术运算操作符
8、BCD码加法器设计9、组合逻辑乘法器设计9、1参数定义关键词parameter和localparam9、2整数型寄存器类型定义9、3for语句用法
9、4移位操作符及其用法9、5两则乘法器设计示例9、6repeat语句用法9、7repeat语句用法9、8parameter参数传递功能10、RTLRTL描述RTL级或RTL电路
1、半加器的Verilog的描述
半加器的逻辑表述、半加器的电路结构、真值表、时序波形: 半加器的Verilog描述:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7a721e0e22644700a102116a64b9e328.png)
h_adder是模块名,是设计者为其设计的模块所取的名字。h_adder旁的括号及其内容称为“端口表”,括号中的内容就是此模块的所有端口信号名。assign引导的赋值负责描述模块内部的逻辑功能和电路结构。assign引导的赋值语句属于并行赋值语句,无论有多少行语句,都是同时执行的,与语句的前后次序无关。
1、1模块语句及其表达方式
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a424c78ecbc8443aa101c9f3459b54a5.png)
任一可综合的最基本的模块都必须以关键词module开头。模块名最好根据相应电路的功能来确定。如4位二进制计数器用counter4b。模块端口列表中须列出此模块的所有输入、输出或双向端口名,端口名间用逗号分开,括号外加 分号。endmodule是模块结束语句关键词,旁边不加任何标点符号。对模块端口及其功能的描述语句都 必须放在模块语句module_endmodule之间。
1、2端口语句、端口信号名和端口模式
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/720f55136fc04e1c8e32573ab3188a4c.png)
输入端口:input输出端口:output双向端口:inout 使用比较复杂,后续有专门章节讲述,在未理解前,不要轻易使用最后一种端口描述方法是端口信号的逻辑矢量位表达方式,其中的msb和lsb分别是信号量的最高和最低位数。output [3:0] C,D; // C、D均为4位输出端口。
1、3逻辑操作符
Verilog的逻辑操作符大部分与C语言一致,比如:
逻辑按位与: &逻辑按位或: |逻辑按位异或:^逻辑按位取非:~
但Verilog也有自己的扩展,比如
逻辑按位 与非 ~&逻辑按位 或非 ~|逻辑按位 同或 ~^
1、4连续赋值语句
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/46d9d88307dd443296b60063a07f1a75.png)
当等式右端的驱动表达式(赋值源)中任一信号发生变化时,此表达式即被重新计算一遍。assign语句是Verilog的并行语句,模块中所有的assign语句同时执行,语句的前后顺序无关;-加入[延时],表示经过指定延时后再赋值,但这个延时值在综合器中是被忽略的,不参与综合。只对仿真器有效 此句表示,仿真的基本时间单元是 10ns,仿真时间的精度是 100ps。在这个时间划分单元下,语句assign #6 R1=A&B”在执行后,一旦计算出A&B的值还要再等待6个时间单元也就是60ns后才将此值赋给 R1。
1、5关键字
指verilog语言中预定义的有特殊含义的英文词语。input、output、module、assign、endmodule 关键词必须小写。
1、6标识符
设计者在verilog程序中自定义的,用于标识不同名称的词语。例如模块名、信号名、端口名等。Verilog中标识符区分大小写。
1、7书写规范
Verilog标识符,以英文字符(大小写均可)、数字、下划线“_”组合而成但只能用英文字符或者下划线开头(下划线开头需要慎用,一般为软件自带库来使用),标识符用数字开头是不允许的。最顶层的module_endmodule模块描述语句放在最左侧,比它低一层次的描述语句则向右靠一个Tab键距离。同一语句的关键词要对齐。
1、8Verilog模块文件取名和存盘
文件后缀名必须是“.v”。文件取名的大小写也是敏感的。文件名与存储路径不能带有中文字符。对于Quartus,程序名必须和该程序的模块名一致。
1、9注释符号
//后的注释文字只能放在同一行/…/ 可以换行文件取名的大小写也是敏感的。文件名与存储路径不能带有中文字符。
2、4选1多路选择器及其case语句表述方式
4选1多路选择器的电路结构、时序波形: 4选1多路选择器的Verilog描述: 本例还包含以下五方面新的语句结构和表述方式:以reg关键词定义的模块内相关信号的特性和数据类型。以always关键词引导的对模块逻辑功能描述的顺序语句。以case_endcase引导的多条件分支赋值语句。以begin_end引导的顺序块语句。Verilog数据并位及数据表达方式。
2、1reg型变量定义
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6aa67c5b32c24b44816abc9f97ccc3c0.png)
reg: 寄存器型变量;在过程语句always@引导的顺序语句中, 被赋值信号规定必须是reg型变量;输入或双向口信号不能定义为reg型。
2、2过程语句
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/76b0148215284c20933f2193543c581e.png)
Verilog中有两类能引导顺序语句的过程语句,always在可综合语句 中最为常用,另一类过程语句是initial语句。
2、3块语句begin _end
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b2b239b7682d42ad89315289b558beec.png)
块语句begin end仅限于在always引导的过程语句结构中使用,只相当于一个括号。以上方括号中的“:块名”可以省略。
2、4case条件语句
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/525011ce8a0245c8bf76d44e3e9c8614.png)
2、5Verilog的四种逻辑状态
Verilog有四种基本数值:
0:含义有四个,即二进制数0、低电平、逻辑0,事件为伪的判断结果。1:含义也有四个,即二进制数1、高电平、逻辑1、事件为真的判断结果。z或Z。高阻态,或高阻值。x或X。不确定,或未知的逻辑状态。x与z大小写都不分。
2、6并位操作运算符
![](https://img-blog.csdnimg.cn/direct/dd5e546669fb4604a64f5683002e06d6.png)
2、7Verilog的数字表达形式
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/eaf6b4850ee54782b9d910df2a6d0128.png)
(1)B:二进制, O:八进制,H:十六进制,D:十进制(2)不分大小写,如:2’b10, 4’hA等(3)sb定义有符号二进制数:8’sb10111011,最高位1是符号。
3、4选1多路选择器及其case语句表述方式
4选1多路选择器的Verilog描述:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/55097f0a5cbe4966ba5a99dbd75a1d60.png)
3、1按位逻辑操作符
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f1e533ee4c8845e3821c77859af39bb5.png)
如果两个操作数位矢具有不同长度,综合器将自动根据最长位的操作数的位数,把较短的数据按左端补0对齐的规则进行运算操作。
3、2等式操作符
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a7475234128f478d807083fe1067118c.png)
Verilog中任何变量有4个状态:0;1;z (高阻态);x (不确定或未知状态)
3、3wire定义网线型变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/07aa2d1ce3b4418a8b623a779aa0ba8c.png)
如果assign语句中需要有端口以外的信号或连接线性质的变量(由于端口都已默认为网线型变量),则必须用网线型变量定义语句事先给出显式定义。用wire定义的网线型变量可在任何类型的表达式或赋值语句(包括连续赋值和过程赋值语句)中用作输入信号,也可以在连续赋值语句或实体元件例化中用作输出信号。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/fb70daeab4924b678f7d9d29d63e908b.png)
4、4选1多路选择器及其case语句表述方式
4选1多路选择器的Verilog描述和RTL:
5、4选1多路选择器及其条件语句表述方式
4选1多路选择器的Verilog描述和RTL:
5、1if条件语句
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2a271dce48204371bca509743c831668.png)
5、2过程赋值语句
阻塞式赋值:如y=b; 一旦执行完当前的赋值语句,赋值目标变量y即刻获得来自等号右侧表达式的计算值。如果在一个块语句中含有多条阻塞赋值语句,**而当执行到其中某条赋值语句时,其他语句被禁止执行,**这时其他语句如同被阻塞了一样。非阻塞式赋值:如y |