V3学院 FPGA专家 带你学习Verilog-三态门

标签:
fpgav3学院xilinx培训三态门 |
写在前面的话
在之前的章节中,我们所接触到的IO都是单纯的输入(input)或者输出(output)类型,而我们的一些总线协议如IIC等,要求信号为三态类型,也就是我们所说的输入输出(inout)类型。那么,本节大家一起来探讨三态门的用法。
项目需求
设计一个三态门电路,可以实现数据的输出和总线“挂起”。
系统架构
http://s12/mw690/003wCLthzy7agq0WkYPfb&690FPGA专家
三态门系统架构图
模块功能介绍
表模块功能描述表
模块名 |
功能描述 |
three_state |
控制三态总线sda是否处于挂起状态 |
顶层模块端口描述
表
端口名 |
端口说明 |
clk |
系统时钟 |
rst_n |
系统低电平复位 |
data_buf |
外部待传输数据输入 |
sda |
三态数据总线 |
代码解释
1.三态门模块代码
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 |
第18行代码就是三态门的赋值方式,三态门什么时候作为输出、什么时候作为输入是由开关信号flag控制的。当开关信号flag==1,sda的值等于待发送的数据data_buf(此时,sda相当于是output类型),当开关信号flag==0,sda的值变成高阻态(此时,sda相当于是input类型)。
20~33行代码为我们设计的一个定时器,用来控制开关信号的翻转。
43~44行代码表示当定时器到达预定值,开关电平开始翻转。
2.三态门模块测试代码
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 |
14~18行代码,模拟的是待传输数据的变化。
仿真结果分析
http://s5/mw690/003wCLthzy7agq4gslu24&690FPGA专家
由仿真波形可以看出,当开关关闭(flag==0),sda总线放开,处于高阻状态,此时外部数据可以输入,相当于我们模块的输入。
当开关打开(flag==1),sda等于data_buf的值,说明此时,sda相当于我们模块的输出。
更多内容请关注v3学院官方微信公众号:
http://s10/mw690/003wCLthzy7agq7yfOh89&690FPGA专家