文章目录
Xilinx 7的FPGA可编程逻辑资源为CLB(Configurable Logic Block)
下图白色高亮为CLB资源:
在Xilinx的FPGA中,这样的CLB资源有很多个,组成可编程逻辑阵列;

我们看到在CLB资源中,还有两个区域如下图:
这些资源统称为SLICE,一个CLB中有两个SLICE,当然这两个SLICE片在名字与功能上也是有区别的;
绿色(SLICEM),黄色(SLICEL)
SLICEM的功能更偏向与组成DRAM(Distributed RAM,分布式RAM),SLICEL更偏向实现组合逻辑;

每一个SLICE中,有以下的资源,4个LUT(Look Up Table,查找表)、3个MUX(多路选择器)、1个CARRY(进位单元)和8个DFF(触发器);
其中一个SLICE中的MUX共3个,有2个是F7MUX(7输入多路选择器)1个是F8MUX(8输入多路选择器);


通过SLICE片中各个单元的组合、SLICE与SLICE之间的组合和CLB之间的组合,我们就能实现各种功能;
LUT(Look Up Table)资源是FPGA中比较重要的一个资源,LUT资源也是构建组合逻辑的基本单元,可以说LUT资源越多,我们能够实现的功能就越复杂;
在FPGA中的LUT分为两种,分别是SLICEM中的LUT和SLICEL中的LUT;
SLICEM中的LUT资源如下:

SLICEL中的LUT资源如下:

这两种LUT资源之间最直观的区别是前者比后者多出了更多信号线;
这是因为SLICEM中的LUT资源多了移位逻辑,它既可以当作普通的LUT使用,也可以通过多块LUT组合成分布式RAM或ROM(Distributed RAM/ROM);
通过LUT资源我们可以实现不同组合逻辑,这是因为LUT本质上就是一个小RAM,我们以查找表资源来讲,这里的表其实就是实现的组合逻辑的真值表,而这个真值表则存储于LUT中;
例:通过LUT2实现A&B逻辑
真值表:

我们将上面真值表中的A与B看做地址线,O看做RAM中的初值;
则LUT2资源如下:

LUT2的初始化值为4’b1000(十六进制:0x08)
当A = 1’b1 B = 1’b1 时,则此时寻址的是RAM的最高位,也就是1;
在3.1节中,我们提到LUT本身就是一个RAM,以3.1节中LUT2的例子,其内部结构的简化图如下:

最左侧为提前写入LUT资源的数据配置;
通过上述例子,我们还能拓展出LUT4、LUT6的结构图;
在FPGA中,若仅通过配置LUT资源的配置,是很难实现更多复杂应用的,因为LUT资源的功能有限,此时就需要一些其他资源来与LUT配合,拓展LUT资源的功能;

上图是Xilinx家FPGA的SLICE内部结构,我们主要观察上图中,LUT6的输出,其分别接到了MUX、CARRY上,当然也可以将LUT资源直接输出;
这些信号最终在CLICE输出的MUX上汇总;

通过这一操作,我们可以拓展LUT6的功能,如通过两个LUT6与一个MUX实现LUT7,或者LUT6与CARRY组合,实现计算等等;
以下给出在工具进行综合后,MUX8与LUT6组合的实现(绿色)
在大多数情况下,我们只需用Verilog描述好电路逻辑,然后将其丢给编译器,进行分析综合,编译器就能自动将电路转换好,我们无需关注LUT资源的分配;但在某些情况下,我们需要直接例化LUT资源时,需要用到硬件原语;
以Xilinx的FPGA中LUT6资源为例,其原语如下:
LUT6 #(
.INIT(64'h0000000000000000) // Logic function
)
LUT6_inst (
.O(O), // 1-bit output: LUT
.I0(I0), // 1-bit input: LUT
.I1(I1), // 1-bit input: LUT
.I2(I2), // 1-bit input: LUT
.I3(I3), // 1-bit input: LUT
.I4(I4), // 1-bit input: LUT
.I5(I5) // 1-bit input: LUT
);
INIT: 提前写入LUT6的值;
I0~I5: LUT6寻址线;
O: LUT6寻址输出;
真值表:




例:例化LUT6实现与非门(~(a&b))
根据与非门,我们得到以下真值表

假设我们把LUT6的I0作为信号b,I1作为信号a,I2~I5作为保留位(默认为1),则真值表可以拓展为;

则需要初始化的值为
第60位:1’b1
第61位:1’b1
第62位:1’b1
第63位:1’b0
最终INIT值为64’h7000000000000000
则Verilog如下:
module nand(
input wire a,
input wire b,
output wire o
);
LUT6 #(
.INIT(64'h7000000000000000) // Logic function
)
LUT6_inst0 (
.O(o), // 1-bit output: LUT
.I0(b), // 1-bit input: LUT
.I1(a), // 1-bit input: LUT
.I2(1'b1), // 1-bit input: LUT
.I3(1'b1), // 1-bit input: LUT
.I4(1'b1), // 1-bit input: LUT
.I5(1'b1) // 1-bit input: LUT
);
endmodule
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我
假设我们有两个资源:template'template1'doowner'root'group'root'endtemplate'template2'doowner'root'group'root'end我想在资源中重用代码。但是,如果我在配方中定义了一个过程,您会得到owner、group等的NoMethodError。为什么会这样?词法范围没有什么不同,是吗?因此,我必须使用self.instance_eval&common_cfg。common_cfg=Proc.new{owner'root'group'root'}template'template1'docommon_cfg.
当我尝试使用“套接字”库中的方法“read_nonblock”时出现以下错误IO::EAGAINWaitReadable:Resourcetemporarilyunavailable-readwouldblock但是当我通过终端上的IRB尝试时它工作正常如何让它读取缓冲区? 最佳答案 IgetthefollowingerrorwhenItrytousethemethod"read_nonblock"fromthe"socket"library当缓冲区中的数据未准备好时,这是预期的行为。由于异常IO::EAGAINWaitReadab
我很难给出正确的答案,所以我会在这里征求我的问题。我正在研究RESTFulAPI。自然地,我有多种资源,其中一些由父子关系组成,一些是独立资源。我有点困难的地方是弄清楚如何让那些将根据我的API构建客户端的人更容易。情况是这样的。假设我有一个“街道”资源。每条街道都有多个住宅。SoStreet:has_manytoHomes和Homes:belongs_toStreet。如果用户想要在特定的home资源上请求HTTPGET,以下应该可行:http://mymap/streets/5/homes/10这允许用户获取ID为10的房屋的信息。直截了当。我的问题是,我授予用户访问权限是否违反了
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。有没有学习Ajax(jQuery)和Rails3的好资源?
FPGA时钟和时钟域时钟树所谓时钟树为FPGA内部资源,分:全局时钟树,区域时钟树,IO时钟树原则上优先使用全局时钟树,在GT接口上使用IO时钟树,一般工具也会对GT时钟加以限制;时钟树使用方式正确的物理连接FPGA会由物理管脚专门用于全局时钟设置,通过查询数据手册可以在PCB设计阶段进行确认,当外部时钟接入此管脚时,工具会自动占有全局时钟树资源,当接入普通信号时不会分配时钟树资源;恰当的代码描述原语的使用,即BUFG的使用,可以将PLL的输出等内部时钟进行全局时钟资源的分配;IO时钟资源需要参考相应接口手册,以ultrascale的GTH为例,其JESD204的时钟方案针对不同的子类会由不同
我刚刚开始将InheritedResources用于我正在构建的应用程序,当我查看它的Github页面时,它说它已被弃用,我应该改用Responders。我是InheritedResources和Responders的新手,所以我很困惑,当我从文档中看到的只有FlashResponders和HTTPCacheResponders时,我如何从Responders获得我在InheritedResources(完整的REST操作基础"template"代码)中获得的内容?我也看过这个:http://blog.plataformatec.com.br/tag/inherited_resourc
我有一个用于项目管理的Rails应用程序,其中包含项目和任务模型。一个项目可以有很多任务,但一个任务也可以有很多任务,无穷无尽。使用嵌套资源,我们可以有/projects/1/tasks、/projects/1/tasks/new、/projects/1/tasks/3/edit等。但是,您如何以REST方式表示任务的递归性质?我不想再深入一点,所以也许可以执行以下操作:map.resources:tasksdo|t|t.resources:tasksend这会给我以下网址:/tasks/3/tasks/new/tasks/3/tasks/45/edit或者当涉及到单个任务时,我可以使