FPGA IO口状态


前言

FPGA的IO口是芯片的重要组成部分之一,用于芯片与外围器件进行通信或控制外部电路。FPGA是可编程逻辑器件,只有程序加载后即进入“用户模式”后,FPGA的IO口才会按照程序设定进行操作,那么,在进入用户模式前,IO的状态也是需要了解的。

一、IO口的默认状态

FPGA的IO口默认状态是指刚上电或复位时,注意不要与芯片引脚配置时的上拉,下拉概念混淆,因为引脚配置也是程序的一部分,只有在用户模式才起作用。
FPGA的IO口默认状态是输入状态,即认为是input,为高阻态,此时IO口不会对外部设备产生任何影响。

二、实际芯片的IO状态

可以看一下芯片手册中如何说明上电过程到程序加载完成之前的IO口状态。
lattice芯片上电过程中IO口的状态
上图意思是芯片内部有控制上电复位的电路,当电压>1.06V时,上电复位电路开始工作,上电复位电路可以保证外部IO是高阻态。
我们知道,FPGA和CPLD的IO包括专用IO和普通IO,那么不同类型的IO上电时的状态也略有区别。
专用IO和普通IO的默认状态区别
上面文档意思是:
普通IO的上电默认状态是三态+弱下拉;
PROGRAMN和JTAG这些特殊引脚是三态+弱上拉的。
因为PROGRAMN和JTAG是对上电配置有影响的引脚,如果上电配置程序的过程中有低电平输入会影响程序加载过程,有可能会导致程序加载失败。因此特殊引脚除了上电默认状态与普通IO不一样之外,在外部也应该按照官方推荐的外围电路进行设置

总结

芯片上电IO为高阻态,不对外部电路产生影响,电压Vcc和Vccio达到Vproup后PRO电路失效,外部IO不再受PRO电路控制,进入用户模式后,IO受控于程序。
需要注意的是本文是参照lattice的芯片手册,不同芯片厂家对上电过程中IO口状态设置是不同的,目前已知Altera, lattice,紫光的芯片是三态加弱下拉,而高云是三态+弱上拉。具体需要查询芯片手册。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基于Verilog的FPGA控制12个IO高低电平的代码示例: ```verilog module io_control ( input clk, input [11:0] io_out, // 控制输出的IO,每个bit对应一个IO output reg [11:0] io_in // 读取输入的IO,每个bit对应一个IO ); reg [11:0] io_state; // 记录当前IO状态,每个bit对应一个IO always @(posedge clk) begin io_state <= io_out; // 将控制输出的IO值赋给状态寄存器 io_in <= {12{1'bz}}; // 初始化读取输入的IO值为高阻态 // 遍历每个IO,读取其输入值并将其写入io_in寄存器对应的bit位置 for (int i = 0; i < 12; i = i + 1) begin if (io_out[i] == 1'b1) begin // 如果该IO被设置为输出高电平 io_state[i] <= 1'b1; // 将状态寄存器的该bit位置为高电平 end else if (io_out[i] == 1'b0) begin // 如果该IO被设置为输出低电平 io_state[i] <= 1'b0; // 将状态寄存器的该bit位置为低电平 end io_in[i] <= $readmemh("input_values.hex", i, 1); // 从存储器中读取该IO的输入值 end end endmodule ``` 在这个示例中,我们通过一个名为`io_out`的12位输入端来控制12个IO的输出电平,每个bit对应一个IO。同时,我们通过一个名为`io_in`的12位输出端来读取12个IO的输入电平,每个bit对应一个IO。 在`always`块中,我们使用一个名为`io_state`的寄存器来记录当前IO状态。每次时钟上升沿到来时,我们将`io_out`的值赋给`io_state`,同时遍历每个IO,读取其输入值并将其写入`io_in`对应的bit位置中。我们还可以从存储器中读取每个IO的输入值,这里使用了`$readmemh`系统任务。 需要注意的是,这个示例仅适用于控制GPIO类型的IO,对于其他类型的IO需要根据具体情况进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值