从KEEPER到PULLTYPE:FPGA引脚上下拉配置的演进与设计哲学

FPGA开发入门:从零开始用Vivado实现LED流水灯项目 FPGA(现场可编程门阵列)是一种可通过编程配置实现特定硬件功能的半导体器件,其核心原理是基于查找表(LUT)和可编程互连结构,允许开发者通过硬件描述语言(如Verilog)定义数字逻辑电路。这项技术的价值在于提供了硬件加速的灵活性和并行处理能力,广泛应用于通信、图像处理、嵌入式系统等领域。对于初学者而言,掌握完整的FPGA开发流程是从理论走向实践的关键。本文以**Vivado工具链**和**引脚约束**为核心切入点,通过一个具体的LED流水灯项目实例,详细演示了从环境配置、RTL编码、仿真验证、综合实现到 阅读详情

从KEEPER到PULLTYPE:FPGA引脚上下拉配置的演进与设计哲学

在FPGA设计领域,引脚配置策略的演进往往反映了硬件设计语言从分散到统一、从冗余到精简的进化路径。过去,工程师在设计输入输出缓冲器时,需要根据具体场景选择KEEPER、PULLUP或PULLDOWN等不同的属性来配置引脚状态。这种设计方式虽然直观,但随着器件家族增多和设计复杂度提升,其维护成本和跨平台兼容性问题逐渐凸显。如今,主流FPGA工具链已逐步转向统一的PULLTYPE属性,这一变化不仅仅是语法层面的简化,更体现了硬件描述语言向更高抽象层次发展的必然趋势。

对于资深硬件工程师而言,理解这种演进背后的设计哲学,比单纯记忆语法规则更为重要。PULLTYPE的出现,既是对传统配置方式的整合,也是对未来异构硬件平台的一种前瞻性适应。本文将深入探讨这一转变的技术动因、实际应用中的注意事项,以及在不同FPGA架构中的差异化实现。

1. 传统配置方式的局限与演进动因

在早期的FPGA设计流程中,引脚上下拉配置需要通过三种独立的属性来实现:

  • PULLUP:为信号线提供弱上拉电阻,防止未驱动时信号漂浮至高电平
  • PULLDOWN:为信号线提供弱下拉电阻,防止未驱动时信号漂浮至低电平
  • KEEPER:使用保持器电路维持信号线上的最后已知状态

这种分类方式在简单设计中表现良好,但随着设计规模扩大,逐渐暴露出几个关键问题:

首先是在代码维护方面的挑战。工程师需要在设计的不同部分使用不同的属性语法,增加了记忆负担和出错概率。例如,在Verilog中,这三种属性需要分别声明和应用:

(* PULLUP = "TRUE" *) input signal1;
(* PULLDOWN = "TRUE" *) input signal2; 
(* KEEPER = "TRUE" *) input signal3;

其次是仿真与实现之间的不一致性。传统的上下拉配置在RTL仿真阶段往往无法准确反映实际硬件行为,导致仿真结果与最终实现存在差异。工程师必须依赖后综合门级网表仿真才能验证这些功能,显著延长了验证周期。

最重要的是跨平台兼容性问题。不同FPGA家族对这些属性的支持程度和实现方式存在差异,使得代码移植变得复杂。例如,在某些旧型号器件中,KEEPER电路的行为可能与新型号有细微但关键的区别。

实践经验表明:在大型项目中,这些看似微小的不一致性往往会导致难以调试的硬件问题,特别是在信号完整性要求较高的应用中。

2. PULLTYPE属性的设计优势与实现机制

PULLTYPE属性的引入,从根本上解决了传统方式面临的碎片化问题。它将三种不同的功能统一到单一属性中,通过参数化取值决定具体行为:

(* PULLTYPE = "PULLUP" *) input signal1;
(* PULLTYPE = "PULLDOWN" *) input signal2;
(* PULLTYPE = "KEEPER" *) input signal3;

这种统一化设计带来了几个显著优势:

  1. 语法一致性:无论需要何种引脚配置,都使用相同的属性名称,降低了记忆负担和编码错误
  2. 工具链支持:现代综合工具能够更好地优化和处理统一格式的属性声明
  3. 代码可读性:设计意图更加明确,其他工程师更容易理解代码的配置目的

在实际应用中,PULLTYPE可以应用于多种缓冲器类型:

缓冲器类型功能描述典型应用场景
IBUF输入缓冲器防止未连接输入引脚漂浮
OBUFT三态输出缓冲器总线驱动时的默认状态控制
IOBUF双向缓冲器双向数据总线终止

关键实现细节:需要注意的是,即使使用了PULLTYPE属性,在RTL仿真阶段仍然不会显示上下拉或保持器功能。这是因此这些功能本质上是模拟电路特性,无法在数字仿真中准确建模。工程师必须采用以下两种方法之一进行验证:

  • 使用后综合门级网表进行仿真,包含实际物理元件的模型
  • 在RTL设计中实例化适当的UNISIM对象,并添加PULLTYPE属性来模拟此行为

3. 差分信号终止策略的架构差异

在高速串行接口设计中,差分信号的终止策略对信号完整性至关重要。PULLTYPE在差分对配置中提供了灵活的终止选项,但在不同FPGA架构中的实现存在重要差异:

set_property DIFF_TERM TRUE [get_ports diff_pair_p]
set_property PULLTYPE PULLUP [get_ports diff_pair_p]

对于差分对,可以使用以下参数定义首选终止策略:

set_param iconstr.diffPairPulltype {AUTO|SAME|OPPOSITE}

各选项的具体行为因器件家族而异:

  • AUTO:默认设置,但其具体行为取决于目标架构
    • 7系列器件:AUTO与SAME效果相同
    • UltraScale/UltraScale+架构:AUTO与OPPOSITE效果相同
  • SAME:正侧和负侧使用相同的PULLTYPE配置(均为PULLUP或均为PULLDOWN)
  • OPPOSITE:正侧和负侧使用相反的配置(P侧PULLUP则N侧PULLDOWN)

设计建议:对于需要跨平台兼容的设计,明确指定SAME或OPPOSITE而非依赖AUTO,可以确保行为的一致性。

这种架构差异体现了FPGA技术演进过程中的设计理念变化。7系列器件更注重与传统设计的兼容性,而UltraScale架构则采用了更优化的差分终止策略,通过相反的上下拉配置提供更好的共模噪声抑制。

4. 多平台设计中的实践指南

在涉及多代FPGA器件的项目中,正确处理PULLTYPE配置至关重要。以下是在不同设计环境中应用PULLTYPE的具体方法:

Verilog语法:将属性直接放在模块或实例化之前

(* PULLTYPE = "PULLUP" *) module my_module (...);
// 或
(* PULLTYPE = "KEEPER" *) wire my_signal;

VHDL语法:需要先声明属性,然后应用于特定信号

attribute PULLTYPE: string;
attribute PULLTYPE of data_bus : signal is "KEEPER";

XDC约束语法:使用set_property命令

set_property PULLTYPE PULLDOWN [get_ports {data_bus[0]}]
set_property PULLTYPE PULLDOWN [get_ports {data_bus[1]}]
# 清除属性设置
set_property PULLTYPE {} [get_ports reset_n]

在实际项目中,建议采用以下最佳实践:

  1. 统一配置风格:在整个项目中保持一致的使用方式,要么全部使用代码内属性,要么全部使用约束文件
  2. 文档化设计决策:对每个重要信号的PULLTYPE选择原因进行注释,特别是当选择KEEPER时
  3. 验证策略:制定明确的验证计划,确保通过后仿真确认上下拉行为符合预期
  4. 跨平台检查:如果设计需要 targeting 多种器件架构,创建检查脚本验证PULLTYPE配置的兼容性

对于大型项目,可以考虑创建自定义约束宏来简化管理:

proc apply_pulltype {port_list type} {
    foreach port $port_list {
        set_property PULLTYPE $type [get_ports $port]
    }
}
apply_pulltype {sig1 sig2 sig3} PULLUP

5. 信号完整性考虑与高级应用

PULLTYPE配置不仅影响逻辑功能,更对信号完整性有重要影响。在高速设计中,上下拉电阻的值和特性需要仔细考虑:

  • 电阻值选择:大多数FPGA提供约50kΩ的弱上拉/下拉电阻,但具体值随工艺和电压而变化
  • 温度稳定性:了解电阻值随温度的变化特性,特别是在工业级应用中
  • 开关噪声:频繁变化的信号使用KEEPER时可能引入额外的开关噪声

在高速总线应用中,PULLTYPE配置需要与其它终端策略协调工作。例如,在DDR接口中:

# DDR3数据总线终端策略
set_property PULLTYPE KEEPER [get_ports {ddr_dq[*}]
set_property OUTPUT_IMPEDANCE 40 [get_ports {ddr_dq[*}]
set_property SLEW SLOW [get_ports {ddr_dq[*}]

这种综合配置确保了信号在保持适当驱动强度的同时,避免了漂浮状态。

对于关键控制信号,如复位和中断线,建议采用以下配置:

# 全局复位信号 - 使用上拉确保稳定初始状态
set_property PULLTYPE PULLUP [get_ports sys_reset_n]
set_property DEBOUNCE true [get_ports sys_reset_n]

# 中断信号 - 使用下拉避免误触发
set_property PULLTYPE PULLDOWN [get_ports irq_line]

6. 迁移策略与未来展望

对于已有项目,从传统属性迁移到PULLTYPE需要系统化的方法:

  1. 库存分析:使用脚本扫描现有设计中的所有PULLUP、PULLDOWN和KEEPER属性
  2. 影响评估:确定每个属性更改对功能和时序的潜在影响
  3. 逐步迁移:优先迁移非关键信号,验证后再处理关键信号
  4. 回归测试:确保迁移后的行为与原始设计一致

示例迁移脚本框架:

# 查找所有传统属性应用
set old_attrs [get_property PULLUP [get_ports *]]
append old_attrs [get_property PULLDOWN [get_ports *]] 
append old_attrs [get_property KEEPER [get_ports *]]

foreach port $old_attrs {
    # 获取原有属性类型并转换为PULLTYPE
    set prop_type [get_property [lindex $port 1] [get_ports [lindex $port 0]]]
    set_property PULLTYPE $prop_type [get_ports [lindex $port 0]]
    # 清除旧属性
    set_property [lindex $port 1] {} [get_ports [lindex $port 0]]
}

未来,随着FPGA工艺继续向更小节点发展,引脚配置策略可能会进一步演进。预计的发展方向包括:

  • 自适应终止:根据实际信号条件动态调整终止策略
  • 更精细的控制: per-pin 配置电阻值和强度
  • 集成验证:在RTL阶段更好地仿真模拟特性

PULLTYPE属性的引入代表了FPGA设计语言向更高抽象层次发展的重要一步。它不仅统一了语法,更为未来更智能的引脚配置功能奠定了基础。作为硬件设计师,理解并掌握这一变化背后的设计哲学,将有助于创建更健壮、更可移植的设计。

(7)ISE14.7无用引脚设置上下拉或高阻态(FPGA不积跬步101) 名言:在一个领域不断增加深度,你会成为该领域专家。 1 FPGA设计中没有使用的IO管脚如何处理? 根据设计要求一般会设置为上拉、下拉或者高阻态。ISE14.7未使用管脚默认设置为下拉。实际设计中一般会设置为上拉或者高阻态,那么到底根据什么来进行选择呢? 第一优先设置为高阻态、如果高阻态不能满足要求的话,可以考虑设置为上拉。设置上拉的前提是:FPGA硬件板卡没有毁钥功能,若有毁钥功能且高有效,可能会烧坏板卡。 2 ISE14.7未使用管脚设置方法 a)使用ISE14.7生成bit文件。 b)右键G 阅读详情

相关推荐

ISE14.7 FPGA无用引脚的上下拉和高阻设置方法

本文将介绍如何在ISE14.7下设置无用引脚的上下拉或高阻态,以避免出现不可预期的问题。对于无用引脚的上下拉设置,我们可以使用VHDL代码来实现。在这个界面中,选择“Unused Pins”选项,并在右侧面板勾选需要设置的无用引脚。同样地,对于无用引脚的高阻设置,我们也可以使用类似的代码实现。在创建工程的对话框中,选择您的FPGA型号、顶层模块等信息,并单击“下一步”。通过以上步骤,我们可以很容易地实现ISE14.7下FPGA无用引脚的上下拉或高阻设置,避免出现不可预期的问题。

pytorchCode的博客 2158

FPGA设计中管脚电平配置及上下拉的问题

在FPGA设计中一般需要对管脚进行电平属性配置,包括LVTTL、LVCOMS等等,具体电压范围可以参考ISE管脚约束设置参数详解. 此外,对于在设计中未使用的管脚一般要进行上拉设置,在Quartus ii 的环境中,在assignment->device->device and pin options中选择unused pins,可以将其设置为As input tri-state with weak pull-up,意将未使用管脚设置为若上拉。 而在ISE环境中,方法稍有不同,右键Genera

qq_37960317的博客 1万+

(79)时序约束:[管脚上拉/下拉约束]

1.1 本节目录1.2 基本时序约束概念1.3 时序约束:[管脚上拉/下拉约束]1.4 结束语。

m0_46498597的博客 963

Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)

这两种配置方式的作用是一样,我更倾向于XDC文件约束的方式,方便在不同工程直接进行导入,设置完成之后,需要重新生成Bit流文件才能生效。可以看到,除了未使用管脚,一些系统管脚,比如JTAG,Program、Done管脚等等都可以配置上下拉模式。和ISE的生成选项配置类似,Vivado同样也可以配置JTAG管脚、Done、Prog等系统管脚的状态。对于Vivado开发环境,共有两种方式可以设置未使用管脚的上下拉状态。,下拉找到系统管脚配置,选择自己所需要的上下拉状态。配置完成之后,重新生成Bit流文件即可。

whik1194的博客 8788

Xilinx 7系列 FPGA硬件知识系列(九)——FPGA的配置

在该模式下,FPGA向外部的非易失性串行数据存储器或者控制器发出CCLK时钟信号,配置数据会以串行方式载入FPGA,在前几代的FPGA中,存储器通常选择Xilinx官方的XCF串行系列存储器,并给出了相应的设计原理图,但在7系列FPGA中,这种方式被放弃了,其官方的配置文档里并无主串配置模式的相关详细描述。FPGA在驱动配置逻辑的内部振荡器中生成配置时钟信号,并在CCLK输出引脚上可见。如下图所示,在该模式下,外部处理器提供配置时钟和并行的配置数据,该模式相对于串行方式来说,配置的速度快,但设计稍微复杂。

whm128的博客 4638

基于 Qt 6 / C++17 的多算法加解密工具(学习研究用途) 涵盖编码、古典密码、对称/非对称加密、哈希摘要共 24 种算法,全部纯 C++ 自实现,不依赖 OpenSSL/GmSSL

基于 Qt 6 / C++17 的多算法加解密工具(学习研究用途)。涵盖编码、古典密码、对称/非对称加密、哈希摘要共 24 种算法,全部纯 C++ 自实现,不依赖 OpenSSL/GmSSL。含图形界面、批量文件加解密、密钥管理、性能测试与操作日志。提供标准测试向量自测。

vivado xdc约束管脚上拉/下拉

vivado17.4 内部管脚上拉/下拉约束 vivado约束文件中添加约束:set_property PULLDOWN true [get_ports pi1] 在vivado ->synthesis ->schematic ->内部含有管脚约束的图形化界面,不会写约束的我,经常在这里操作。 很久之前就知道FPGA可内部实现上拉/下拉管脚,但是真正通过问题确认到此答案还是自己工...

weixin_44468510的博客 1万+

三相SVPWM逆变器双闭环PI解耦控制:从dq坐标系到参数整定实战

本文深入解析了三相SVPWM逆变器的双闭环PI解耦控制技术。通过引入dq坐标系,将交流量转换为直流量,并结合前馈补偿实现电流环的解耦控制。文章详细阐述了从数学模型推导、控制器设计到参数整定与SVPWM实现的完整流程,为工程师提供了从理论到实战的系统性指导。

weixin_28292761的博客 405

AGM FPGA如何配置上拉或者下拉电阻

AGM FPGA如何配置上拉或者下拉电阻,在asf文件中,通过一行简单的代码实现。

HIZYUAN的博客 1111

NeurIPS‘25新研究!PINN+GNN强强联手,模型精度飙升50%!

物理图神经网络研究取得重大进展!UCLA团队提出的PhysGNN架构在NeurIPS'2025上引发关注,该模型成功融合PINN的物理约束优势与GNN的图结构处理能力,解决了工程仿真中的关键瓶颈。研究显示,PhysGNN在城市热网预测中误差降低42%,电网负荷模拟的物理规则违反率下降68%。同步解析的SyncTREE模型则创新性地将RC树物理特性融入GNN,实现毫秒级IC时序分析;HSPGNN模型通过嵌入偏微分方程,显著提升多变量时间序列填补精度。

m0_73122726的博客 1023

MATLAB并行开不了的解决办法

在服务器上新安装了MATLAB 2013b,在开并行计算的时候出现了下列问题 经过在网上搜多这个问题,我感觉这个问题应该是安装的时候的验证问题或者激活不成功之类的。注意其中有一句validate the profile ‘local’ in the Cluster Profile Manager.在matlab官网上找到了设置Cluster Manager的教程,如下 parallel>

sinat_36713319的博客 5988

altera公司的fpga管脚,只有弱上拉。没有弱下拉

. FPGA和DSP或者单片机通讯,如果FPGA的管脚用作输入,DSP的管脚用作输出,来控制相关逻辑,需要考虑DSP复位的时候,其管脚为输入,是高阻状态,可能或导致潜在问题,需要根据功能加上拉或者下拉. 2.altera公司的fpga管脚,只有弱上拉。没有弱下拉.

gtkknd的专栏 4075

【数据库】银行/信贷业务测试工作中涉及的数据库表格

银行/信贷业务测试工作中涉及的数据库表格,金融信贷测试人必看!

孤之鹜的博客 1173

set_property PULLDOWN true [get_ports <ports>]

本文介绍了Xilinx Vivado中设置下拉电阻的Tcl约束命令set_property PULLDOWN true [get_ports <port_name>]。该命令用于在XDC约束文件或Tcl控制台中为指定端口配置物理下拉电阻,防止输入信号悬空。文章详细解析了命令结构,提供了Verilog设计示例和对应的XDC约束文件,并列举了按钮输入、配置引脚等典型应用场景。同时对比了Intel Quartus和Lattice Diamond等其他FPGA工具的类似功能,强调这些约束是在综合/实现阶

Js_cold的博客 950

ubuntu安装hodoop详细步骤

进入到Ubuntu系统中打开桌面,点击鼠标右键打开终端,在终端中输入如下命令这样就可以创建一名为hadoop的新用户。给用户输设置密码输入,输入如下命令,设置密码,按提示输入两次然后为hadoop用户增加管理员全新,这样就可以方便部署完成之后输入重启命令,重启一下Ubuntu系统,然后登录到我们创建的hadoop用户上面reboot。

2301_77603488的博客 9199

AUTOSAR TcpIp模块 以太网配置开发2

someip协议之tcpIp协议

汽车电子电气 1085

Xilinx FPGA I/O设置

PullType共有四种选择: PULLUP、PULLDOWN、 NONE、KEEPER。数字电路有三种状态:高电平、低电平和高阻。当 输入为无效 信号的时候 ,可以通过上拉( PULLUP)电阻 和下拉 (PULLDOWN)电阻的方式使其处于稳定状态。当选择 (KEEPER)时, 使电平保持为上一个有效值。当 IO端口设为LVDS的 时候, PullType只能设为 None。off-chip terminatio设置。这个是设置片外端接电阻和片内端接电阻。

weixin_42995966的博客 4019

Open3D——直通滤波(python详细过程版)【2025最新版】

python就一个字:强。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 7519

FPGA学习总结5 - 配置引脚

FPGA学习总结5 - 配置引脚基于Xilinx Artix7平台 7系列中,CFGBVS引脚用于确定bank0的供电电压范围以及bank14和bank15多功能引脚在配置时的电压。当CFGBVS引脚连接到高电平(VCCO_0),bank0的操作电压应为2.5V或者3.3V,当CFGBVS引脚连接到低电平(GND),bank0的操作电压应为1.8V或者1.5V。在配置期间,bank14和bank15电压与bank0一致。 FPGA内部易失性存储器的电池备用电源,该存储器存储AES解密器密钥,如果需要易失性存

大哈的博客 5664

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

我好像病了的博客 2450

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Xilinx FPGA常见配置模式总结

Xilinx FPGA常见配置模式总结     Spartan6系列FPGA常见的配置模式有5种,由模式输入管脚M1、M0决定。该5种模式详见下图。     该5种模式可分为3大类,1. JTAG模式(可归为从模式);2. 主模式;3. 从模式。主模式又划分为master serial模式、master parallel模式,从模式分为slave  serial模式、slave

CAOXUN_FPGA的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

谁说配置难?这篇文章让你轻松掌握xilinx 7系列FPGA配置技巧

通过上述讲解,可知xilinx7系列FPGA配置方式有7种,其中JTAG优先级最高,在其他模式下也可以直接进行JTAG配置。然后六种其实可以根据外设区分,如果是flash对FPGA进行配置,那么FPGA只能作为主机,根据数据线的宽度可分为SPI模式和BPI模式,其中SPIx1和BPI模式支持菊花链方式。

jk_101的博客 6008

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【FPGA约束】如何对fpga进行io约束

【FPGA约束】如何对fpga进行io约束

sqqwm的专栏 2288

FPGA上电后IO的默认状态

技术交流是便宜的博客地址:http://blog.youkuaiyun.com/techexchangeischeap 概述 在进行FPGA硬件设计时,引脚分配是非常重要的一个环节,特别是在硬件电路上需要与其他芯片通行的引脚。Xilinx FPGA从上电之后到正常工作整个过程中各个阶段引脚的状态,会对硬件设计、引脚分配产生非常重要的影响。这篇专题就针对FPGA从上电开始 ,配置程序,到正常工作整个过程中所

技术交流是便宜的的博客 3万+

[转]EP3C16Q240C8N 引脚说明

供电和参考引脚 VCCINT:类型:Power功能:内核电压 1.2V/5%。负责给内部逻辑阵列电源引脚供电。引脚:共 12 个引脚,包括:10、40、53、61、74、115、129、140、163、190、204、228。 VCCIO[1..8]:类型:Power功能:I/O 供电电压,共 8 个块,每个块供电电压可不一样,支持所有 I/O 输入输出标准。驱动 JTAG 口...

ddk43521的博客 4080
上一篇: 从零搭建LoRaWAN网关:ESP32与SX1302的硬件协同设计全解析
下一篇: 平头哥玄铁E902:如何用RISC-V架构重塑嵌入式CPU的能效标杆
devops8pract
博客等级 码龄4年 533粉丝 849原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值