第4讲verilog讲义

发布 2023-04-19 14:35:28 阅读 6382

verilog hdl部分 1

一、verilog基本语法 1

1.模块 1

2.assign语句 1

3.always 语句 1

4.case 语句 2

5.数据类型 3

线网类型 3

寄存器类型 3

5.数字值和常量 4

6.运算符和表达式 5

二、组合逻辑电路 5

1.4 位全加器 6

2.用case 语句描述的 4 选 1 数据选择器 6

3.bcd 码—七段数码管显示译码器 7

4.三-八译码器 8

三、时序逻辑电路 9

1.4 位计数器 9

2.同步置数、同步清零的计数器 9

3.模为60 的bcd 码加法计数器 10

4.锁存器 11

1、 模块内容是嵌在module 和endmodule两个语句之间。每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最后通过由顶层模块调用子模块来实现整体功能,2、模块包括接口描述部分和逻辑功能描述部分。这可以把模块与器件相类比。

模块的端口定义部分:

如上例:module my_and2(a,b,c);其中module 是模块的保留字,my_and2是模块名,相当于器件名。()内是该模块的端口声明,定义了该模块的管脚名,是该模块与其他模块通讯的外部接口,相当于器件的pin 。

模块的内容,包括i/o说明,内部信号、调用模块等的声明语句和功能定义语句。

i/o说明语句如: input [2:0] a; input [2:

0] b; input cin; output count; 其中的input 、output、inout 是保留字,定义了管脚信号的流向,分别为输入、输出和双向,[n:0]表示该信号的位宽(总线或单根信号线)。

注意,在module my_and2(a,b,c);中“)”的后面要加一个分号,模块的最后要加上endmodule作为结尾,endmodule后面不加分号。

在模块中只能写assign语句或者always语句。

assign为连续赋值语句,把“=”右边的值不断赋给左边,在硬件上就是用一根线连起来了,注意,assign中只能用“=”号。

在上例assign c=a&&b;中,代表的就是把a与b相与,把结果赋给c。

1、连续赋值语句的执行是:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号。

2、连续赋值语句之间是并行语句,因此与位置顺序无关。

在一个模块中的多个assign与always之间都是并行语句,与位置顺序无关。

而在always中可以有多条语句,语句之间相互也是并行,与位置顺序无关。

一个典型的always如下。

always @ a or b)

beginc<=a&&b;

endalways 后面加上@,跟上一个括号,括号里面的是这个always里面的敏感变量列表,当列表里面的变量值改变的时候,执行always里面的所有语句。不同的敏感变量之间用 or 隔开。

begin和end相当与c语言里面的左括号“”,用来代表一个语句块。

在always里面赋值语句用“<=以后学深了再**阻塞赋值和非阻塞赋值)

always @ posedge clk or posedge rst )

begin

if (rst)

q <=1’b0;

else q <=d;

上面括号内的内容也是敏感变量,而posedge代表“上升沿“,就是信号由低到高,相应的,negedge代表“下降沿”,就是信号由高到低。即整个always 语句当敏感变量clk或rst有上升沿时执行。因此,当rst 由0变为1 时,q被复位,在时钟上升沿时,d被采样到q。

case 语句是一个多路条件分支形式(相当于c语言的switch语句)用法如下:

case(case_expr)

case_item_expr :procedural_statement

[default:procedural_statement]

endcase

case 语句首先对条件表达式case_expr 求值,然后依次对各分支项求值并进行比较,第一个与条件表达式值相匹配的分支中的语句被执行。可以在1 个分支中定义多个分支项;这些值不需要互斥。缺省分支覆盖所有没有被分支表达式覆盖的其他分支。

例: case (hex)

4'b0001 : led = 7'b11110011

4'b0010 : led = 7'b0100100; /2

4'b0011 : led = 7'b0110000; /3

4'b0100 : led = 7'b0011001; /4

4'b0101 : led = 7'b0010010; /5

4'b0110 : led = 7'b0000010; /6

4'b0111 : led = 7'b1111000; /7

4'b1000 : led = 7'b0000000; /8

4'b1001 : led = 7'b0010000; /9

4'b1010 : led = 7'b0001000; /a

4'b1011 : led = 7'b0000011; /b

4'b1100 : led = 7'b1000110; /c

4'b1101 : led = 7'b0100001; /d

4'b1110 : led = 7'b0000110; /e

4'b1111 : led = 7'b0001110; /f

default :led = 7'b1000000; /0

endcase

书写建议:

case 的缺省项必须写,防止产生锁存器。

verilog hdl 主要包括两种数据类型

线网类型(net type) 和寄存器类型(reg type )。

1. wire 和 tri 定义

线网类型主要有wire 和tri 两种。线网类型用于对结构化器件之间的物理连线的建模。如器件的管脚,内部器件如与门的输出等。以上面的与门为例,输入信号a,b是由外部器件所驱动。

由于线网类型代表的是物理连接线,因此它不存贮逻辑值。必须由器件所驱动。通常由assign 进行赋值。如 assign a = b ^ c;

当一个wire 类型的信号没有被驱动时,缺省值为z高阻)。

信号没有定义数据类型时,缺省为 wire 类型。

如上面一位全加器的端口信号 a,b,sum等,没有定义类型,故缺省为wire 线网类型。

2. 两者区别

tri 主要用于定义三态的线网。

1. 定义

reg 是最常用的寄存器类型,寄存器类型通常用于对存储单元的描述,如d型触发器、rom 等。存储器类型的信号当在某种触发机制下分配了一个值,在分配下一个值之时保留原值。但必须注意的是,reg 类型的变量,不一定是存储单元,如在always 语句中进行描述的必须用reg 类型的变量。

讲义 第4讲 电源规划

第4讲电源规划。4.1概述。参考 教材p73 4.1概述补充内容 参与经济计算和比较的各个电源规划方案必须具有可比性 1.满足需要上的可比。对于参加比较的各电源规划方案来说,应同等程度地满足国民经济各部门对电力和电量的需求 包括满足数量 质量 可靠性和运行方式上的要求等 而对于那些在满足需要上达不到...

2023年辅导讲义第4讲

辅导讲义第4讲。第二章出入境检验检疫报检基础知识。第六节检验检疫证单。一 检验检疫证单种类及用途。一 申请单类。1 编号1 1 入境货物报检单 适用于入境货物 包装铺垫材料 装载法定检验检疫货物的集装箱,以及外商投资财产鉴定的申报。2 编号1 2的 出境货物报检单 适用于对出境货物 包括废旧物品 包...

精讲班第4讲讲义

银行考试直通车整理出品。存款业务概述3.1.1存款业务概述1 存款业务的定义。存款是存款人基于对银行的信任而将资金存入银行,并可以随时或按约定时间支取款项的一种信用行为。存款是银行对存款人的负债,是银行最主要的资金 存款业务是银行的传统业务。2 存款业务的分类。按客户类型,可分为个人存款和对公存款。...