Verilog笔记.4.inout端口
Posted Protogenoi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog笔记.4.inout端口相关的知识,希望对你有一定的参考价值。
inout是一个双向端口,实现为使用三态门,第三态为高阻态‘z’。
在实际电路中高阻态意味着响应的管脚悬空、断开。
当三态门的控制信号为真时,三态门选通,作输出端口使用;控制信号为假时,三态门是高阻态,作输入端口用。
使用时,可用一下写法
1 inout data_inout; 2 input data_in; 3 4 reg data_reg;//data_inout的映象寄存器 5 reg link_data; 6 7 assign data_inout=link_data?data_reg:1’bz;//link_data控制三态门
8 //对于data_reg,可以通过组合逻辑或者时序逻辑根据data_in对其赋值.
9 //通过控制link_data的高低电平,从而设置data_inout是输出数据还是处于高阻态,
10 //如果处于高阻态,则此时当作输入端口使用.link_data可以通过相关电路来控制.
模块代码
1 module three_state( 2 //系统输入 3 clk,//系统时钟输入 4 rst_n,//低电平复位信号 5 data_buf, 6 //系统输出 7 sda//三态总线 8 ); 9 10 //-------------------系统输入------------------- 11 input clk;//系统时钟输入 12 input rst_n;//低电平复位信号 13 input data_buf;//待传输数据 14 //-------------------系统输出------------------- 15 inout sda;//三态总线 16 //------------------寄存器定义------------------ 17 reg flag;//三态门开关定义 18 reg [10:0]counter;//计数器定义 19 //------------------三态门赋值------------------ 20 assign sda=(flag==1)?data_buf:1‘bz; 21 //----------------开关控制计数器---------------- 22 always@(posedge clk or negedge rst_n) 23 begin 24 if(!rst_n) 25 begin 26 counter<=0;//计数器复位 27 end 28 else 29 begin 30 if(counter<</span>25)//计数器范围 31 counter<=counter+1;//计数器累加 32 else 33 counter<=0;//计数器清零 34 end 35 end 36 //----------------开关/数据控制----------------- 37 always@(posedge clk or negedge rst_n) 38 begin 39 if(!rst_n) 40 begin 41 flag<=0;//开关关闭 42 end 43 else 44 begin 45 if(counter==25) 46 flag<=~flag;//开关信号翻转 47 end 48 end 49 endmodule
相连的两个inout端口由一对信号交叉控制:
在内部模块中inout端口不能独立存在,当一个模块的inout端口作为输出时,那么另一个模块的inout端口必然作为输入;反之,当一个模块的inout端口作为输入时,那么另一个模块的inout端口必然作为输出。因此,这两个inout端口的控制信号实际上是由一对信号交叉控制。
以上是关于Verilog笔记.4.inout端口的主要内容,如果未能解决你的问题,请参考以下文章