• 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端口的控制信号实际上是由一对信号交叉控制。

  • 相关阅读:
    20200304(10)
    20200303Tuesday(9)
    词根词缀explicit(8)
    词根词缀(7)
    20200303(6)
    什么是ring0-ring3
    20200301a
    mark字体大全
    评估评价 提高专项(5)
    图的广度优先遍历算法
  • 原文地址:https://www.cnblogs.com/protogenoi/p/8931138.html
Copyright © 2020-2023  润新知