草庐IT

FPGA配置之SelectMAP总线

Cary_mwj 2025-06-14 原文

1 FPGA启动流程

图 1 7 Serials FPGA配置流程

1.1 Device Power-Up

1.2 Clear Configuration Memory

在上电后的任何时间内,可以对Slave-FPGA配置存储器(Block RAM)进行复位处理。复位方式是将PROGRAM_B信号拉低(下降沿有效)。

1.3 Sample Mode Pins

当复位完成后,INIT_B恢复高电平,Slave-FPGA对M[2:0]模式引脚进行采样,然后开始在CCLK上升沿接收配置数据。

1.4 Synchronization

在接收配置数据前,Slave-FPGA首先进行总线位宽检测。主机发送的配置文件中,“Bus Width Auto Detection”序列最先发送。

表 1 Bus Width Detection Pattern

D[24:31]

D[16:23]

D[8:15]

D[0:7]

Comments

0xFF

0xFF

0xFF

0xFF

0x00

0x00

0x00

0xBB

Bus Width Pattern

0x11

0x22

0x00

0x44

Bus Width Pattern

0xFF

0xFF

0xFF

0xFF

0xFF

0xFF

0xFF

0xFF

0xAA

0x99

0x55

0x66

Sync word

0xFF

0xFF

0xFF

0xFF

如上表,当位宽为8时,将在D[0:7]检测到0xBB、0x11;当位宽为16时,将在D[0:7]检测到0xBB、0x22;当位宽为32时,将在D[0:7]检测到0xBB、0x44。

图 2 BIN文件内容

注意:表1中的数据为Bit-Swrap之后的数据(FPGA内部要求),而图2中的配置文件为非Bit-Swrap的数据,因此在实际的配置过程中,应将数据进行Bit-Swrap处理。

位宽检测完成后,需要进行同步检测。如表1与图2,同步序列为0xAA995566,经过Bit-Swrap处理后为0x5599AA66。

1.5 Device ID Check

同步之后需要进行ID检查以防止错误型号FPGA的比特流数据写入。如图2,0x03691093为ID号。

1.6 Load Configuration Data

ID检查成功后,Slave-FPGA开始接收配置数据。

1.7 CRC Check

当接收配置数据,Slave-FPGA进行CRC校验计算,当检验失败时将INT_B拉低。

1.8 Startup Sequence

当配置数据接收完毕后,比特流指示Slave-FPGA进入启动流程,并在启动完成后拉高DONE信号。

2 配置文件选择

表 2 Xilinx Configuration File Formats

File Extension

Bit Swapping

Xilinx Tool

Description

BIT

Not

Bit Swapped

ISE BitGen or

Vivado write_bitstream

(generated by default)

Binary configuration data file containing header information that does not need to be downloaded to the FPGA. Used to program devices from the iMPACT tool or Vivado device programmer with a programming cable.

RBT

Not

Bit Swapped

ISE BitGen

generated if -b option is set)

or

Vivado write_bitstream

(generated with -raw_bitfile

argument)

ASCII equivalent of the BIT file containing a text header

and ASCII 1s and 0s. (Eight bits per configuration bit.)

BIN

Not

Bit Swapped

ISE BitGen (generated if -g

binary:yes option is set)

or PROMGen,

or

Vivado write_bitstream

(generated with -bin_file argument)

Binary configuration data file with no header information. Can be used for custom configuration solutions (for example, microprocessors), or in some cases to program third-party PROMs.

MCS

Not

Bit Swapped

ISE PROMGen or iMPACT,

or

Vivado write_cfgmem

-format MCS

ASCII PROM file format containing address and checksum information in addition to configuration data. Used mainly for device programmers and the Impact tool.

HEX

Not

Bit Swapped

ISE PROMGen or iMPACT,

or

Vivado write_cfgmem

-format HEX

ASCII PROM file format containing only configuration data. Used mainly in custom configuration solutions.

根据表2说明,选择BIN文件作为配置文件。

3 Master SelectMAP模块设计

图 3 SelectMAP时序

图 4 selectmap端口定义

端口

位宽

方向

说明

I_clk

1

Input

系统时钟

I_rst

1

Input

系统复位

I_init

1

Input

开始配置触发信号

O_init_done

1

Output

Slave-FPGA复位完成信号

SelectMAP

Bus

O_mode

3

Output

Slave-FPGA配置模式选择

3’b000:Master Serial

3’b001:Master SPI

3’b010:Master BPI

3’b100:Master SelectMAP

3’b101:JTAG

3’b110:Slave SelectMAP

3’b111:Slave Serial

O_fpga_program_b

1

Output

Slave-FPGA配置逻辑复位(下降沿有效)

I_fpga_int_b

1

Input

指示Slave-FPGA配置逻辑复位完成(低有效),拉高后mode设置生效

O_fpga_cs_b

1

Output

片选

1’b1:Enable SelectMAP bus

1’b0:Disable SelectMAP bus

O_fpga_cclk

1

Output

配置时钟

O_fpga_rdwr_b

1

Output

读写控制

1’b1:Reading from Slave-FPGA

1’b0:Writing to Slave-FPGA

O_fpga_data

16

Output

配置数据

I_fpga_done

1

Input

Slave-FPGA加载完成

I_fifo_empty

1

Input

fifo空信号

O_fifo_rd_en

1

Output

fifo读使能

I_fifo_rd_data

16

Input

fifo读数据

 

图 5 selectmap模块状态机

配置流程如下:

①在IDLE状态下,若检测到I_init为高,进入MODE_SET状态;

②在MODE_SET状态下,配置Slave-FPGA的模式为Slave SelectMAP模式(mode=3’b110),进入SLAVE_FPGA_RESET状态;

③在SLAVE_FPGA_RESET状态下,将fpga_program_b拉低以复位从设备配置逻辑;检测到fpga_int_b为低(复位完成)后,将fpga_program_b拉高,并拉低写使能fpga_rdwr_b,进入RDWR_B_ENABLE状态;

④在RDWR_B_ENABLE状态下,若检测到fpga_int_b由低变高(Slave-FPGA复位完成,等待数据写入),进入WAIT状态;

⑤在WAIT状态下,等待fifo加载数据;当fifo非空时,重新进入SEND_DATA状态发送数据;

⑥ 在SEND_DATA状态下,将来自fifo的配置数据加载到数据端口;

当检测到fpga_done为高时,配置完成,进入IDLE状态;

当检测到fpga_done为低且fifo为空时,进入WAIT状态。

有关FPGA配置之SelectMAP总线的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  5. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  6. Ruby 默认将 IRB 配置为 Pretty_Inspect - 2

    我是ruby​​的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽

  7. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  8. ruby - 如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作? - 2

    我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe

  9. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  10. ruby-on-rails - 在 Rails 中存储(结构化)配置数据的位置 - 2

    对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化

随机推荐