
要查看原理图对应的FPGA,需要知道FPGA的型号和引脚分配情况。通常情况下,原理图中的每个电路元件都会与FPGA芯片中的某个引脚相对应。因此,可以按照以下步骤来查找原理图对应的FPGA:
确定FPGA的型号,可以查看原理图中的器件清单或者从设计文件中获取。
打开FPGA芯片的数据手册,查阅引脚分配表,确定各个引脚的功能和位置。
根据原理图中电路元件的连接关系,查找对应的FPGA引脚,并记录下来。
使用FPGA设计软件打开对应的工程文件,查看FPGA芯片中的引脚分配情况,进行比对。
如果找到了对应的引脚,可以进一步查看FPGA的逻辑设计和约束文件,对FPGA进行编程和配置。
需要注意的是,FPGA的设计和编程需要一定的专业知识和技能,如果您是初学者或者没有相关经验,建议先学习相关的基础知识,并参考一些相关的教程和资料。
我给你写了一个代码,没有仿真,里面有简单注释,要是调试出了什么问题或者看不懂可以继续追问,如果没问题请采纳!
module LED
(
input clk_33,
input reset_n,
input switch,
output led_red,
output led_yellow,
output led_bule
);
// 假设PWM的频率为1k:T = 1/1k = 1ms;
// 这个频率可以根据你自己的需要设定然后修改num和t的值即可,不过要注意将相关寄存器的位数做对应修改
// 将1ms再分为256个份,每一份:t = T/256 = 39us;
// 以33MHz时钟产生39us的定时:N = 3910E(-6)/(1/33000000) = 1287,取129;
// ==============================
parameter t = 8'd128;
parameter num = 8'd255;
// ==============================
reg [1:0] i;//0:等待用户按键;1:等待完成信号,切换至状态0;
reg iscount;//开始计数信号
reg isdone;//完成信号
// --- --- ---
always @ ( posedge clk_33 or negedge reset_n )
if( !reset_n )
begin
i <= 1'b0;
iscount <= 1'b0;
end
else
case( i )
2'd0:
if( switch )
begin
i <= i + 1'b1;
iscount <= 1'b1;
end
else
begin
i <= i;
iscount <= iscount;
end
2'd1:
if( isdone )
begin
i <= 2'd0;
iscount <= 1'b0;
end
else
begin
i <= i;
iscount <= iscount;
end
endcase
// ==============================
reg [7:0] count1;//产生39us
// --- --- ---
always @ ( posedge clk_33 or negedge reset_n )
if( !reset_n )
count1 <= 8'd0;
else if( iscount )
count1 <= count1 + 1'b1;
else if( count1 == t )
count1 <= 8'd0;
else
count1 <= 8'd0;
// ==============================
reg [7:0] count2;//产生1ms
reg [8:0] length;//控制PWM中高电平的时间
reg [1:0] step;//0:等待开始信号;1:渐亮;2:渐暗;3:切换至状态0等待开始信号
// --- --- ---
always @ ( posedge clk_33 or negedge reset_n )
if( !reset_n )
begin
count2 <= 8'd0;
length <= 9'd1;
step <= 2'd0;
isdone <= 1'b0;
end
else
case( step )
2'd0:
if( iscount )
step <= step + 1'b1;
else
step <= step;
2'd1:
if( count2 == 8'd255 )
begin
if( length == 8'd255 )
begin
length <= length - 1'b1;
count2 <= 8'd0;
step <= step + 1'b1;
end
else
begin
length <= length + 1'b1;
count2 <= 8'd0;
end
end
else if( count1 == t )
count2 <= count2 + 1'b1;
else ;
2'd2:
if( count2 == 8'd255 )
begin
if( length == 8'd0)
begin
step <= step + 1'b1;
count2 <= 8'd0;
isdone <= 1'b1;
end
else
begin
length <= length - 1'b1;
count2 <= 8'd0;
end
end
else if( count1 == t )
count2 <= count2 + 1'b1;
else ;
2'd3:
begin
isdone <= 1'b0;
step <= 2'd0;
end
endcase
// ==============================
assign led_red = ( length > count2 ) 1'b1 : 1'b0;
assign led_yellow = ( length > count2 ) 1'b1 : 1'b0;
assign led_bule = ( length > count2 ) 1'b1 : 1'b0;
// ==============================
endmodule
你是想对他们有所了解吧,这样的,其实FPGA可以和他们分开的。单片机,ARM,DSP属于软件语言编程器件(C语言)。单片机一般都是8位的。ARM是32位的。现在很多手机的处理芯片都是ARM。速度非常快。然后是DSP,DSP擅长于数据处理,也就是计算,DSP和ARM的区别在于,ARM擅长于事件处理,比如做显示界面等,而DSP擅长计算,所以用在运动控制,或者需要大量计算的场合。ARM做乘法除法都非常慢,而DSP很快。这就是区别。。。然后是FPGA,FPGA和他们不同,FPGA不是执行程序,而是通过程序把FPGA内部搭出你想要的电路图。他的编程语言是HDL,也就是硬件描述语言。编程人员通过编程,用编程语言,描绘出想要的电路图,然后通过电脑软件编译,下载,把FPGA内部的结构改变,连接出想要的电路图。(其实FPGA内部有非常庞大的基本逻辑电路,与门,非门,触发器。具体怎么连接就看你写的程序)。。。再看单片机,ARM,DSP 他们三个就不一样,他们是一条条的执行程序。和电脑处理芯片是一样的。
几年前设计专用集成电路(ASIC) 还是少数集成电路设计工程师的事, 随着硅的集成度不断提高,百万门的ASIC 已不难实现, 系统制造公司的设计人员正越来越多地采用ASIC 技术集成系统级功能(System L evel In tegrete - SL I) , 或称片上系统(System on a ch ip ) , 但ASIC 设计能力跟不上制造能力的矛盾也日益突出。现在设计人员已不必全部用逻辑门去设计ASIC, 类似于用集成电路( IC) 芯片在印制板上的设计,ASIC 设计人员可以应用等效于印制板上IC 芯片的功能模块, 称为核(core)、或知识产权( IP) 宏单元进行系统设计, 这就是基于核的设计方法。CPU、存储器、总线控制器、接口电路、DSP 等都可成为核。但是ASIC 设计与印制板(PCB) 设计有很大区别,ASIC 必须用EDA 工具进行硬件设计, 主要问题都是通过计算机仿真解决, 而不能象印制板设计那样通过实验调试解决, 另外ASIC 的制造还需要数量可观(一般数万美元) 的不可重复工程费用(NRE)。80年代后期出现的现场可编程门阵列(FP
GA ) 和复杂可编程逻辑器件(CPLD) 是ASIC 的一种, 其优点是在制造厂家提供的FPGA 或CPLD 芯片上, 可由设计工程师对其进行现场编程完成ASIC 的最后设计, 而不需昂贵的NRE 费。现在FPGA 的规模已达到百万门, 如XILINX-phtm" target="_blank" title="XILINX货源和PDF资料">XILINX 公司的V irtex 系列, 完全可以实现片上系统,其设计方法将逐步转向核基设计。
1 核的分类和特点
核是一种预定义的并经过验证的复杂功能模块, 它可以集成到系统设计中。核基设计主要特点是可重复使用已有设计模块, 缩短设计时间, 减少设计风险, 通过高层的集成可望提高整个系统的性能。在FPGA 设计中的核分为三种, 如表1所示:
表1 核的分类和特点
硬核
(hard core)
预定义的已布局布线的模块 不能修改设计, 必须采指定实现技术 时序性能有保证
固核
(firm core) HDL 源码,与实现技术有关的网表 部分功能可以修改, 采用指定的实现技术 关键路径时序可控制
软件
(soft core)
行为级或RTL 级HDL源码 可修改设计,与具体实现技术无关 时序性能无保证, 由使用者确定
硬核是针对特定的实现技术优化的, 它具有不能修改的结构和布局布线, 可作为库元件使用, 且时序性能稳定, 但硬核不能按设计需要修改和调整时序。固核由HDL 源码和与实现技术有关的网表组成, 使用者可按规定增减部分功能。固核的关键路径时序是固定的, 但其实现技术不能更改, 即不同厂家FPGA 的固核不能互换使用。软核是可综合的硬件描述语言(HDL ) 源码, 它与实现技术无关, 可按使用者需要修改, 具有最大的使用灵活性, 但软核的关键路径时序性能无保证, 最终性能主要决定于使用者采用的综合、布局布线和实现技术。
在FPGA 设计中, 由于不同厂家的具体实现技术差别较大, 完全与硬件实现技术无关的软核性能受到很大限制, 而硬核缺少使用的灵活性, 因此作为软、硬核折中的固核使用较多。以上是具有代表性的核的分类, 在实际使用中, 某种功能的核往往以各种形式出现, 由使用者按需要选用, 软核也不仅只有HDL 源码, 还包括用于功能测试的行为模型和测试向量, 用于指导综合的约束文件。
2 核基FPGA 设计方法简介
在核基设计中, 一个完整的设计主要由两部分组成, 一部分是核, 如图1中的MCU、RAM , 另一部分是用户自己定义的逻辑电路。按系统设计的要求将这些功能模块连接在一起就完成了芯片的设计,各个核或功能块的连接目前还没有统一的标准, 因不同的设计而定, 一般应满足一定的时序要求。作为核基设计的第一步是选择合适的核, 这主要从核的功能、性能可靠性和实现技术几方面来选择。
图1 核基设计芯片示意图
一个核首先要有核的功能描述文件, 用于说明该核的功能、时序要求等, 如图2所示, 其次还要包括设计实现和设计验证两个方面的文件, 即不但要有实现核功能的寄存器传输级(RTL ) 源码或网表, 还要有用于核实现后验证逻辑功能正确性的仿真模型和测试向量。硬核的实现较简单, 类似于PCB 设计中IC 芯片的使用, 软核的使用情况较为复杂, 实现后的性能与使用者的具体实现方式有关, 为保证软核的性能, 软核提供者一般还提供综合描述文件, 用于指导软核的综合, 固核的使用介于上述二者之间。
图2 核由设计实现和设计验证组成 很多核提供者都提供核的评价环境和演示、开发板,便于用户了解核的功能和使用。
核基FPGA 设计流程如图3所示。设计输入部分包括:
1) 用户设计逻辑、软核、固核或硬核仿真模型的输入,
2) 功能仿真,
3) 逻辑综合。其中仿真模型是一个行为级模型, 只用作功能仿真, 不进行综合。
图3 核基FPGA 设计流程
设计的输入一般是采用HDL 语言, 如VHDL、V erilog 等, 输入完设计和仿真模型后就可进行功能仿真, 当功能仿真完成后, 就可进行逻辑电路的综合。
用户逻辑和软核的综合应加合理的时序约束, 以满足设计的要求, 约束条件可由综合文件(Synthesis Script ) 给出。完成设计输入后进入设计实现阶段,在此阶段固核的网表和设计约束文件, 用户综合出的网表和设计约束文件一起输入给FPGA 布局布线工具, 完成FPGA 的最后实现, 并产生时序文件用于时序仿真和功能验证。最后进入设计验证阶段,用静态时序分析判定设计是否达到性能要求, 对比功能仿真结果和时序仿真结果, 验证设计的时序和功能是否正确。若设计的性能不能达到要求, 需找出影响性能的关键路径, 并返回延时信息, 修改约束文件, 对设计进行重新综合和布局布线, 如此重复多次直到满足设计要求 为止。若重复多次还不能达到设计要求, 则需修改设计或采用其它实现技术。
3 软核的设计及使用
由于FPGA 的硬件技术迅速发展, 硬件资源越来越丰富, 速度越来越快, 使软核资源利用率不高、工作速度较低等不足得到很大的弥补, 软核在核基设计中作用越来越大。其主要优点是功能与实现技术无关, 使用灵活。这样我们可以很方便地在不同的实现技术下使用软核。如用X IL INX FPGA 实现的软核, 不需改动设计, 重新综合后就可以用ACTEL FPGA 实现, 设计实现的灵活性大为提高。但软核的性能受实现技术影响还是很大, 怎样保证软核达到预想的性能是目前需要解决的难题。国外近年提出了与实现技术无关的可综合软核的思想, 希望通过对编制软核的HDL 源码的某种限制, 并结合综合工具的时序约束功能, 达到部分控制软核性能的目的。如限制软核只能采用严格的同步逻辑设计, 没有反馈环路、多时钟路径、三态逻辑、锁存器和异步置位复位触发器, 只使用D 触发器和逻辑门。这样借助于综合工具, 可有效地控制软核关键路径的延时,并预测具体实现技术中软核的性能。当然这是以牺牲一定的FPGA 逻辑资源为代价的, 但随着硅技术的发展, 硬件资源十分丰富, 用一定的硬件资源浪费去换取设计灵活性提高是值得的, 正如在PC 机软件设计中, 现在已很少有人过多考虑程序占用的存储空间一样。
本文作者按照上述软核设计思想, 采用全同步逻辑设计, 只使用D 触发器和逻辑门, 实现了与PIC16C57兼容的8位微控制器的设计。顶层结构如图4, 采用哈佛结构, 取指和指令执行并行工作, 除少数几条程序跳转指令外, 全部为单时钟周期指令。程序存储器ROM 一般放在FPGA 外, 若ROM 中指令较少, 也可放在FPGA 内。数据总线采用多路选择器形式, 以适应不同的实现技术。指令寄存器和特殊功能寄存器, 包括IO 端口寄存器、状态寄存器、程序计数器等, 都由D 触发器构成, 通用寄存器采用了FPGA 的RAM 模块, 指令译码和算数逻辑单元由组合逻辑门构成。
process(state_clk,state_1_0,state_1_1)
此过程完全不会执行,代码是在ctrl_state为1时才执行(if ctrl_state='1' then),而敏感信号里却没有这信号,不是丢失,而是根本没有赋值动作
掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用FPGA可以让设计变得非常有灵活性。掌握了FPGA设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但FPGA入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。FPGA设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这个门槛很容易就过去。我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对FPGA学习步骤理解写出来,仅是作为一个参考,不对的地方,欢迎大家讨论和指正。FPGA学习步骤1、工欲善其事,必先利其器。计算机必不可少。目前FPGA应用较多的是Altera和xilinx这两个公司,可以选择安装quartusII或者ISE软件。这是必备的软件环境。FPGA学习步骤2、熟悉verilog语言或者vhdl语言 ,熟练使用quartusII或者ISE软件。起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。入门阶段可以在利用网络资源完成。FPGA学习步骤3、设计一个小代码,下载到目标板看看结果此时可以设计一个最简答的程序,譬如点灯。如果灯在闪烁了,表示基本入门了。如果此时能够下载到FPGA外挂的flash,FPGA程序能够从flash启动,表明FPGA的最简单设计你已经成功,可以到下一步。FPGA学习步骤4、设计稍微复杂的代码,下载到目标板看看结果。可以设计一个UART程序,网上有参考,你要懂RS232协议和FPGA内置的逻辑分析仪。网上下载一个串口调试助手,调试一番,如果通信成功了, 恭喜,水平有提高。进入下一步。FPGA学习步骤5、设计复杂的代码,下载到目标板看看结果。譬如sdram的程序,网上也有参考,这个设计难度有点大。可用串口来调试sdram,把串口的数据存储到sdram,然后读回,如果成功,那你就比较熟悉FPGA设计了FPGA学习步骤6、设计高速接口,譬如ddr2或者高速串行接口这要对FPGA的物理特性非常了解,而且要懂得是时序约束等设计方法,要看大量的原厂文档,这部分成功了,那就对FPGA的物理接口掌握很深,你就是设计高手了FPGA学习步骤7、设计一个复杂的协议譬如USB、PCIexpress、图像编解码等,锻炼对系统的整体把握和逻辑划分。完成这些,你就是一个一流的高手、
以上就是关于怎样看原理图对应的fpga全部的内容,包括:怎样看原理图对应的fpga、工学实验 用Verilog HDL写一个LED发光程序 通过FPGA验证、ARM、FPGA、DSP帮忙解释下如何选择等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)