当前位置: 首页 > news >正文

FPGA中的双向信号inout与三态门

       一句话阐述inout与三态门的关系:双向端口inout既可以作为输入端口接收数据,也可以作为输出端口发出数据,双向端口对信号的操作是双向的。双向端口在综合时是以三态门的形式存在的。

三态门的Verilog 功能模型

// Tristate Description Using Concurrent Assignment
// Combinatorial Always Block Can be Used too.module v_three_st_2 (T, I, O);input T, I;output O;assign O = (~T) ? I: 1’bZ;
endmodule

当控制信号T=1时,管子被置为高阻态,输出O为高阻态;当控制信号T=0时,管子开通,输出O=输入I。

三态门中有一个状态是高阻。高阻,即可以认为是没有输出,作为输出端口而言,对下级电路没有任何影响。悬空是针对输入端口来说的,也就是说没有接输入。这也就意味着,实际上高阻和悬空是一个状态,在HDL语言里都表示为Z

也就是说,一个输出端口在高阻态的时候,其状态是由于其相连的其他电路决定的,可以将其看作是输入。

  双向端口用作输出时,使用方式不变,但双向端口作输入引脚时需要将此引脚置为高阻态,这样其电平就可以由外部输入信号决定了(这是高阻态的特性)。

当上面的管子开通时,此时数据可以从上面的管子中通过,此时双向端口为输出端口,Device IO的赋值 from FPGA (输入)

  当上面的管子被置为高阻态时,数据只能从下面的管子通过,此时双向端口为输入端口,Device IO的赋值 to FPGA(输出)。

双向端口的Verilog实现

Verilog中实现双向端口,首先要明确inout端口的变量类型。inout端口只能被定义为net型变量wire,只能采用assign赋值语句,不能在always块内使用。

module inout_def(clk,data_inout)
input clk;
inout data_inout;
reg data_out;
reg data_out_control;
//define data_out//define data_out_control//assign data_inout
assign data_inout=data_out_control?data_out:1'bz;//assign data_in
wire data_in;
assign data_in=(!data_out_control)&data_inout;endmodule

        控制信号data_out_control决定了双向端口data_inout的特性。data_out_control=1时,data_inout作输出,此时将data_out的值赋给data_inout;当data_out_control=0时,data_inout作输入,将data_inout赋给data_in。实际上,当inout端口面向输出处于高阻态时,即data_out_control=0时,inout端口就相当于输入,所以可以直接当作input端口使用。

Verilog代码处理双向信号的两种方式

        1、写代码assign IO_data = (Control == 1’b0)? I_data_in : 1'bz ;assign O_data_out = IO_data ;2、例化IOBUF原语IOBUF #(.DRIVE(12), // Specify the output drive strength.IBUF_LOW_PWR("TRUE"),  // Low Power - "TRUE", High Performance = "FALSE".IOSTANDARD("DEFAULT"), // Specify the I/O standard.SLEW("SLOW") // Specify the output slew rate) IOBUF_inst (.O(O_data_out),     // Buffer output.IO(IO_data),   // Buffer inout port (connect directly to top-level port).I(I_data_in),     // Buffer input.T(Control)      // 3-state enable input, high=input, low=output);


http://www.mrgr.cn/news/50589.html

相关文章:

  • git--git reset
  • 【linux】记录 n 次 疑似显卡缺电导致的服务器故障
  • androidStudio编译导致的同名.so文件冲突问题解决
  • Linux进程控制小练习|手撕一个简易版shell(Version 1.0)
  • 致同举办企业重组案例及南沙“双15”税收优惠政策分享会
  • 全面解析CUPS零日远程代码执行漏洞曝光事件
  • Mac book不会应用双开?一篇文章教会你最全的应用双开方法
  • 高端官网制作公司怎么分辨是否靠谱?2024专业网站制作公司哪家好TOP5
  • 如何选择适合自己的电子元器件?
  • 性格色彩报告的解读
  • 光控资本:中航电测西部大开发概念股接力大涨,它们业绩如何?
  • SSD | (四)NAND闪存(中)
  • HiT-SR:基于层级Transformer的超分辨率,计算高效且能提取长距离关系 | ECCV‘24
  • Accessibility into Development for Web Developers
  • 标题:民峰金融:全球投资者的智能化财富管理平台
  • 自学网络安全Web安全,一般人我还是劝你算了吧
  • 一文深度学习java内存马
  • vue3 计算字符串的高度与宽度,通过Canvas API的TextMetrics 接口来实现
  • 初识Java: 常见注意事项总结
  • 从零创建苹果App应用,不知道怎么申请证书的可以先去看我的上一篇文章