页次: 1
关于RV2K能否只用CPLD的讨论
最早我问代理,给于的回复是完全可以拿它当一个纯CPLD来用。不过我总觉得似乎必须要带上片上总线AHB,即使不连接MCU不做任何事情。
在自己的项目模块中加入一坨:
`ifdef AGM_RV2K
input sys_clock,
input bus_clock,
input resetn,
input stop,
input [1:0] mem_ahb_htrans,
input mem_ahb_hready,
input mem_ahb_hwrite,
input [31:0] mem_ahb_haddr,
input [2:0] mem_ahb_hsize,
input [2:0] mem_ahb_hburst,
input [31:0] mem_ahb_hwdata,
output mem_ahb_hreadyout,
output mem_ahb_hresp,
output [31:0] mem_ahb_hrdata,
output slave_ahb_hsel,
output tri1 slave_ahb_hready,
input slave_ahb_hreadyout,
output [1:0] slave_ahb_htrans,
output [2:0] slave_ahb_hsize,
output [2:0] slave_ahb_hburst,
output slave_ahb_hwrite,
output [31:0] slave_ahb_haddr,
output [31:0] slave_ahb_hwdata,
input slave_ahb_hresp,
input [31:0] slave_ahb_hrdata,
output [3:0] ext_dma_DMACBREQ,
output [3:0] ext_dma_DMACLBREQ,
output [3:0] ext_dma_DMACSREQ,
output [3:0] ext_dma_DMACLSREQ,
input [3:0] ext_dma_DMACCLR,
input [3:0] ext_dma_DMACTC,
output [3:0] local_int,
`ifdef INT_OSC_SUPPORT
input int_clk,
`endif
`endif
然后还必须定义AHB总线待机
`ifdef AGM_RV2K
assign mem_ahb_hreadyout = 1'b1;
assign slave_ahb_hready = 1'b1;
`endif
AHB这两个信号在内部片上总线结点必须设置为高,如果不定义,悬空或者为0都将FIT不过。why? 为什么不设计的时候内部直接weak pull-up??
不知道有谁完全不带AHB就正常当cpld使用并调通的?
AGM RV2K? 紫光PGC2K?高云Tang Nano 4K? 同台竞技
这三个都是6K LUT以下基于片上flash配置的瞬时启动CPLD的同一性能档次。
从易用性,开发友好度来说,PGC2K ~= Tang Nano 4K > RV2K
从市场采购渠道来说 RV2K >> PGC2K ~= Tang Nano
从toolchain的定制性,做差异化挖掘技术深度来说 AGM的工具简直就是Hacker最喜欢的,它等于50%皮角了quartus,而且是以命令行方式,可以集成进不同项目脚本
另外两家用的是Lattice类似的IDE,从管脚分配模块界面上可以很容易感受到Lattice的风格,完善度做的比较好,前期开发比AGM友好。
紫光预测市场化应该要比高云做的出色,高云很难真正把基于lattice的方案替换掉
fitter效率90%的问题再次跟踪
修改两个地方
1, gen_batch脚本中找到以下这行:
logic_compress = (logic_size < (0xa000-LOGIC_ALGO_SIZE))
修改为
logic_compress = (logic_size < (0xb000-LOGIC_ALGO_SIZE))
2, af_run.tcl文件中找到以下这行:
--logic-address 0x80007000\
修改为
--logic-address 0x80006000\
以上给CPLD bin空间多分配4K以充分使用CPLD
原因是脚本限制了cpld bin size,而且脚本默认是产生加密bin,加密bin需要更多的size。如果不改,当cpld使用到超过90%就会bin超标,窗口会显示error,但是仍然生成bin。而这个超标的bin写到片子里面肯定是无法工作的
RV2K的sdk实际上对于端口配置做的一点比较复杂的自动化代码。
先是用python脚本,把项目的verilog代码做了一次再封装,产生一个更高级别的顶层接口,然后把管脚定义在这个顶层接口了(我非常反对这种做法,理由下面会分析)。
接口封装了CPLD和MCU衔接的AHB总线以及DMA和他们之间的握手信号。到此为止是很好的,但是把PIN脚映射再次封装成一个更高级别顶层。这虽然解决了PIN脚配置问题,但是造成了另一个问题:
比如我换了项目的PIN脚定义,我不能简单地修改.ve,因为fitter不看.ve。你必须要重新跑一遍gen_vlog脚本产生顶层接口,然后再次重新编译项目,包括综合和布局布线全部都重来一遍!
我在想把PIN脚映射从gen_vlog剥离,直接自动化代码产生在.asf文件中,这样更改pin脚定义就不需要重编了,只让fitter看.asf就好了
很多用户在需要改pin脚的时候,都会误以为只需要改.ve文件就好了,最多重新跑一下全编。但是不行!你必须重新做初始化产生自动化代码,必须要跑gen_vlog。而gen_vlog这个环境配置,需要你重新建立一个工程,quartus工程.qpf重新产生后某些配置你必须重新再次设置(类似项目代码需要重新添加,设定verilog版本标准,再次配置仿真工具等)。尤其在类似PIO这种集成环境里面,会搞的更繁琐。我的做法是直接把gen_vlog调用写成批处理一键运行重新NEW一把。
当然,最彻底的改进是不要把pin脚映射做成顶层接口,而是让脚本自动产生.asf文件
注意,仅仅是写了.ve文件中的管脚映射,也是不会导入到fitter控制中去的。
在"af_prepare.tc"中:
### Run Compile ###
set PIN_MAP "__device_pinmap__"
set VE_FILE "__ve_file__"
if { [file exists $VE_FILE] && [file exist $PIN_MAP] } {
以上必须满足同时有.ve文件和.pinmap文件才能产生正确的.pre.asf
遗憾的是,SDK里面并没有给你包含AGRV2KLxxx.pinmap文件,这个脚本非常罗嗦,绕了一大圈最终有.asf控制,什么pre.asf都是中间临时脚本,最后统一被.asf覆盖。
而且完全可以删除xxxx.pinmap这些文件,也就是说,不管quartus ii里面的逻辑管脚映射如何,都没有意义,最后物理分配看.asf文件。甚至删除了pinmap文件还更有好处,我不需要先在quartus里面对着一个模型bga封装去虚拟分配管脚了,哪怕它是空的,也完全没有关系,彻底把管教配置和quartus剥离干净
我看了几个例程,就是学生作品,把实际的物理管脚直接写到了verilog模块里面的输入输出IO上了。
这种写法,不具有模块化,耦合很强,移植需要改写很多文件。
当把IO替换成自定义信号后,fitter就丢失了管脚分配。但是fitter不会强制出错,会给你默认按管脚顺序分配,只给出warning,会顺利产生bin,当你用这个bin烧写到片子里面,管脚定义是不对的,上去很容易烧片子。(废话,假设输入被定义到输出,不就io大电流了) 这很危险。
我彻底改写了框架,要么自己写一个AGRV2KLxxx.pinmap映射表让脚本产生正确的管脚分配,要么直接粗暴地在.asf文件中定义管脚。因为.pinmap文件也只是管脚映射,没有其他上下拉,驱动力等的设置,最终也是要看.asf文件。
至于.ve,实际没有多大用处,可能对于MCU的代码有意义,类似一个define,但是管脚分配在AGM内部,尽然涉及到了3个地方(.ve,.pinmap,.asf),拉扯到最后甚至绝大多数用户都不知道怎么定义管脚!
其实调用 quartus综合也可以一键批处理化
新建一个文本文档改后缀为bat文件,里面是
path = path;C:\altera\13.1\quartus\bin64
quartus_sh -t af_quartus.tcl
pause
这样就可以了。前提是先安装quartus II 13.0或者13.1
然后观察.\simulation\modelsim目录下是否产生了最新修改时间的.vo文件,有则是综合通过。
但是综合用批处理比较不直观,不能看到到底占用了大致多少的芯片资源(LUT),不适合在开发中使用,用来出版本合适。如果是前期代码编译开发,还是开quartus IDE界面比较好。
但是在fitting的过程中,会有资源占用比例显示出来,其实显示资源占用比放在综合脚本里面显示比较人性化
写脚本的方便之处是缩短了编译时间,也不用手动去选.tcl脚本,防止点错脚本。这样一键傻瓜操作,加速了对工具使用的适应磨合时间(大多数开发者,开发一个新项目开始,几乎要占用3-7天搭建环境,适应环境,并琢磨出一套开发流程,直接命令行的调用环境效率提升很明显)
如果用开源的综合器产生网表,那么要做的事情很多,需要手动写 *asf
先借用quartus ii跑一遍,跑之前先assignment editor配置好虚拟的管脚约束,然后点af_quartus.tcl运行产生网表,以及altera的*.qsf文件。然后跑一次fitter,会自动将altera的*.qsf迁徙到AGM的 .\alta_db\alta.aqf, .\alta_db\alta.asf
但是,这两个约束并不是最终的,最后,将ur_project.asf里面的设置再次覆盖,所有的参数都是altera quartus ii里面的,因为他这个fitter是衔接quartus ii的。
假设用第三方开源的综合器产生网表,但是这些文件并不会导出,也不会是quartus ii的参数,因此会出现丢失pin脚约束和其他全局约束的情况。fitter还是会调用 .\alta_db\alta.aqf, .\alta_db\alta.asf 去约束,而这几个都是quartus ii环境下的,它与quartus ii强耦合
最乐观的情况是你上次成功编译后管脚约束是正确的,你又会手动编辑ur_project.asf。而且你的项目对于pin脚约束(上拉,OD,驱动力,滞回,延迟微调整等)不敏感
@jameschen
有什么理由必须要用Quartus II 18吗?ALTERA卖身好久了,市面上常见的新的器件差不多就是Cyclone4?13.0 sp1完全可以支持,老器件也是13.0sp1支持比较好。所以没什么理由用更新的Quartus版本
我一般都是把新工具降级去支持老系统,在一个系统稳定的情况下,不会刻意为了升级而升级,升级带来了一系列非预期的环境变化,没有意义的事情,升级通常只会吃掉更多系统性能,而原厂希望客户升级,因为可能涉及到一些ip产权的变更,一些合作供应商的替换,原来集成在ide里面的供应商组建需要替换.但是对于最终用户,没有这种顾虑
@jiaowoxiaolu
因为控制字写在 ur_project.qsf文件中,这个文件其实也是一个脚本,会被af.exe调用
然而约束控制字都是altera的东西,你甚至可以在altera的工程目录下找到类似的.qsf文件,然后把需要约束的管脚配置字,摘抄过来
为什么agm不公开这些?因为这些东西是altera/intel的,quartus ii中用户不必关心.qsf文件,直接在assignment editor中有配置,配置完毕后会自动更新.qsf。而在agm中,是直接编辑这个.qsf文件。
我一开始也尝试去向供应商询问这些东西,但是基于某些原因,没有获得我需要的解答,因此都是自己慢慢啃生肉。当然,在此过程中已经了解为什么会不解答这些技术问题。因为这涉及到agm对altera的软硬件做了什么的问题,这些问题是不方便原厂自己公开释放的
那么,有什么办法防止从spi nand里读出rootfs呢?
总线xor加密,但是spi flash最好选qpi的,这样4bit data总线还能错乱一下并和一个固定字做xor,如果是标准spi,那么无法xor,除非在spi的协议上修改,做成私有协议
以下谈点个人对皮脚,加密的看法,所高级的加密就是让皮脚的人觉得他已经皮脚了出来。也就是说,不要完全封闭,不要让人dump出来一片空白,就是要能dump出来,ida pro后还是有意义的程序代码,这段代码还能开机,运行,测试短期内甚至跑起来还不错。但是,却不能让它长期稳定跑。
皮脚可能是找的第三方解密公司,他们不会给你做长期测试,也就2-3天内简单测试一下就交付了,好交付给某个老板,某个老板觉得已经dump出来了,于是开料投产,投产后顺利上市,然后出货后等个把月,就出现机器异常问题。这是最具有杀伤力的。简单完全封闭,皮脚的老板碰到钉子就觉得对方是和狠货,也就没有信心再皮脚了,就是要装做无辜小白,让对方觉得已经被拿捏住了,然后再来坑他一笔大的,叫他投资打水漂
agm的toolchain其实是属于外挂,对quartus ii做了一定程度的注入,migration以后产生的quartus ii的工程文件,然后就是利用quartus ii综合,此时需要运行agm的外挂脚本(af_quartus.tcl),脚本中把综合的约束条件自动注入综合器(它会覆盖原始quartus ii中的综合setting优化设置),产生网表
然后执行agm的fitter(af.exe)去布局布线,此时注入fitter的约束条件,同时根据.ve的pin脚分配产生bin。
在利用quartus ii做综合的的时候,一旦运行了agm的脚本,如果再次去修改ide的全局综合优化设置,就会改变外挂之前设置好的参数,所以,一旦运行脚本(af_quartus.tcl)后,就不建议去做其他setting修改,这会导致产生一些非预期的问题,唯一能做的就是点箭头start compilation
如果你在次过程中,不慎修改了setting,那么最好还是再次运行一下外挂脚本(af_quartus.tcl)
由于是外挂,因此步骤上是必须严格按照顺序的,点错了,或者中间修改了ide设置,都有可能破坏注入参数
fitter效率突破不了90%上限的问题,可能是无法解决的,我试图编辑.qsf文件的约束参数也没有什么优化,基本上原厂提供的配置就已经到达极限了。 也并非的工具的问题,我发现agm用的约束参数就是quartus ii兼容的(这里面很奥妙),cyclone 4架构或许就是需要剩余一部分面积才能布局布线走出来,而阉割到2K或许无法保证剩下的10%的面积连成一片,零散的10%的面积或许就是无法利用起来的,甚至无法插入一个锁存/触发模块
基于LUT结构的FPGA,Verilog代码需要写的尽量对称,所谓对称,就是if或者case语句内尽量具有相同的表达式结构,越对称,便于合并相同逻辑,综合的效率越高。同时尽量把case的所有分支都填充满,条件越详细,反而综合后分配的LUT越少。
虽然fitter的优化约束无法扣出资源,但是在综合这个步骤,通过改写代码,统一表达式结构,同样扣掉了几十个LUT出来,以前我做IC设计bring up时候的痛苦回忆又回来了,要跑通一个优化的配置,可能需要跑上百次verification. 通常效率最高的时候是在半夜,这个时候没有人和你争服务器job现程。而在白天,比如在一间科技公司,几百号人争夺代码服务器上的cpu资源,通常很难跑的快
int OSC calibration失败的原因已经解决,对Jlink-OB下载线的vcc 3.3v供电很敏感. 偏差0.5V都不行。
我因为通常习惯在jtag调试器对target板供电为了防止反向灌流加个二极管,由此导致了vcc的压降,造成校准失败。
虽然我已经让校准通过,但是我对校准精度不报大的期望,当然,这个内部晶体时钟我只用来对信号延迟计数用,并不涉及其他,请不要学我,我任何时候都是把器件用到很抠门的地步,能省一颗料则省。
最后还是希望agm在这里对内部晶体供电做一个补偿,是否考虑内部供电统一安排到2.5v vcc(vddio除外),以便当用户在使用欠压下载线的时候能够保证内部晶体的稳定
@echo
卖产品,是要直接跟客户对接的,客户对你有要求十分正常
我就想问,个人用户是直接找芯片厂家买的芯片吗?
有些你说要买人家还不卖,要你提供公司名字,营业执照,开户行账号等等,你总不能为了要点资料就自己注册个公司开个企业账户还存进去一笔钱吧?对,某些企业的财务还会找银行核查企业账户资金,还会做背景调查查你公司的信息(当然现在网上也能查到了),查你公司规模组织架构投资者关系,查股权变更信息查有无法律纠纷等等,这一论背景调查后,觉得ok的,来签个NDA
哦,有些签NDA还有附加条件的,就是必须购买一定数额的芯片,行业叫做入门费,可以交钱货暂时留存在原厂或代理商那里,等哪天提完这批数量的货了,入门费再从以后的提货芯片购买价中打折陆续返还。
这些都是对小客户以及终端散户的限制,原厂用这些方式来筛选出符合他们要求的所谓的“大客户”,对于大客户,可以甚至直接给他们出设计,包括硬件电路设计PCB LAYOUT以及软件配套开发。
所以其实行业就是这么肥事,有些东西真的不是靠技术,人家根本不看你公司里面有没有技术牛比的人,而是看你老板有没有马内,有马内了,原厂给你包工包料做好了给你,只要你有市场渠道卖的出去就好了
只要厂家提供文档,而不需要厂家技术支持。有问题,我更喜欢去社区寻求解决(而不是找原厂fae)
一个成熟的社区远比厂家fae更有作用。厂家只需要负责产品,文档提供。不需要对最终客户1对1的支持,真的不需要。厂家只要对top 10大客户自己支持就够,余下给到代理支持,至于个人玩家,diyer,学校的毕业设计的学生都不是厂家需要去技术支持的对象
但是对大客户支持不代表就拒绝小客户甚至终端开发者,如果这些人找原厂,应该指导他们寻求代理或者某些电商平台卖开发板的渠道寻求技术支持,当然这些代理或者开发板卖家都是原厂的下游客户,介绍了下游可能的生意,远比直接拒绝或者闷声不回复更有沟通技巧,更能获得用户支持。可能今天问你的这个人一穷二白,但是明天他可能就做起来了呢
以上我简单理解为:
1.板厂应该把打叉板(不良pcb)一起发给客户,如果客户有能力修复打叉板,那是客户的本事(或者打叉的断线不影响某个项目的实际功能,这部分段线本来就不贴料)。板厂留了客户的打叉板也没有意义,板厂即使保留也会用良品PCB做样品,打叉板没有必要保留。以上客户得利
2.但是,某些PCB即使是做坏的,也是有价值的(回收价值),例如沉金的不良PCB,因此板厂也可能不会把这些不良pcb发给客户。工厂卖给废品公司获得收益,以上两者都没有实质损失,客户没有少板,板厂也把做坏的板子卖钱了
3.板厂发的料不够,这必须是板厂责任,任何理由都不成立,客户损失,板厂损失更大(要二次生产,二次生产需要的成本比单次多生产更高),或许板厂也可以从即将报废的垃圾堆里面找到不良pcb,然后叫维修组线上rework把不良修复,但手工修复的会影响外观, 补线的地方要重新涂光固漆, 客户不一定会接受这种板.因此如出现这种情况,板厂肯定是大损失,后续客户也可能不会再找这个板厂合作!
个人考虑的国产FPGA选料设定原则:
1.价格是国外同类产品的50%以下(因为国产fpga设计IDE较弱,效率低于国外同行85%,造成研发成本和周期增加,如果只是物料价格低30%,最终不见得会省成本)
2.面向社区玩家(散户)可直接公开购买(都买不到料,我设计了你进来我难道是玩B站做科普培训视频来圈粉赚钱?)
3.一个产品从面世到EOF周期需10年以上(如果我设计了一个板子,过2年就买不到料了,同样造成重复开发,研发成本上升)
4.绝对不考虑一些只面向军工或者政府单位背景的国产FPGA公司(原因不方便说,我等小民不敢去碰红线)
好像筛选一下,合适的也没多少了.我只喜欢自下而上没有政府背景依靠自身技术独立做起的公司
也跟风做了一个,目前正在调试中(63mm*55mm)
https://whycan.com/files/members/3710/zynq.jpg
我喜欢你这个布局和走线
AGM虽然用了ALTERA的QUARTUS做综合,不过这里也不算完全侵权,综合器本来是大家都可以用的,很多IDE里面带的也是第三方综合器厂商的高效产品,比自己开发综合器编译效率更高的多。这里 QUARTUS做的非常好,各种优化选项设置一下综合出来网表基本上能扣出几十个SLICE粗来。或许AGM可以通过写SHELL脚本去调用,甚至抽出IDE里面的综合器出来,把约束设置文件也抽出来,不必要开QUARTUS界面来让用户感觉是在偷用A家开发软件。
倒是AGM的FITTER做的比较菜,这个时候,完全和QUARTUS的FITTER没的比,产生出来的最终LUT占用,效率低于A家IDE的15%(area/dencity优化下),很多altera的项目用到芯片资源99%的情况下,不得不扣代码砍掉部分以让agm最终布线通过
fpga还是有细分的,高端大规模fpga主要供应对象是芯片设计公司和国防军工单位,以及部分对算力需求大的特殊应用。这部分虽然量不多,但是利润非常大,fpga供应商不只是提供物料,更多的是提供技术服务,合作芯片开发,软硬件的一整套技术支持,甚至是为客户定制前端设计服务。这部分x厂a厂占据了绝对的江山。
中低端fpga其实才是商用/民用出货量大的地方,而低端fpga/cpld则利润已经很低。例如一些低于2美元的非易失性配置cpld,用量非常大,这部分lattice是占据了大头。中低端fpga使用灵活,价格合适,与专用asic相比价格也并非不可硬杠,依靠规模效应打击asic芯片。对于设计开发者,这种可编程器件节省了bom物料,简化了pcb布线成本,虽然提高了设计门槛,但也同时增加了产品利润空间和防盗门槛。这些还是很合适的。
如果不用cpld/fpga,一块板子能设计成巴掌大,四层,但是只需要一个io密集型的cpld,则就可以将板子走线简化到火柴盒大小的模块。
低端cpld/fpga的竞争对手,其实不是专用asic,而是另一个可怕的正在崛起的怪物,raspberry pico,其已经可以做到部分cpld能做的功能了,而且mcu内核又比某某32更强大。即使是带有硬mcu的融合型fpga,也碰到了一个强硬对手
诚然,确实有很多公司,里面不少工程师,出于对项目风险以及个人的职业安全度考量,在设计项目开端,叫原厂fae去check设计,并期望给于建议,这其实是一种职业型策略,因为项目是公司的,而个人在公司的职位晋升风险是自己的,所以多做保守的事情,把交代的事情都交代好,万一项目出现风险中途delay或者cancel也能尽最大可能让自己安全上岸,不至于为整个项目背锅。
但是,如果是个人社区玩家,他实行的是另一个策略,即我不会让你知道细节,但我只想要买你的片子。社区玩家里面部分是hacker,部分是从其他公司出来单干的,部分是从大公司退休的,他们出于更大的个人安全考虑(相对于在一家公司上班可能成为项目背锅侠而遭到老板开除,是更大的一种安全考虑,担心被某家公司告,又或者担心自己的项目被泄露而造成严重损失)。
所以,不同的开发人员,有不同的作业风格,传统的企业对企业接口需要前者策略,而个人开发者类似于象买春或者买毒一样,他不会少你的钱,但是销售不要多问,而且你不要给假货。
怎么说呢,感觉用国产FPGA厂家就象是相亲,本来是不一定想用的,抱着试试看的态度尝试一下,结果跑去,人家也不拒绝,但也不主动,很冷淡,有问题想问问原厂或者代理,他们回也不愿意回,一声不想的,问他怎么搞,开发环境搭建和开发过程基本都要自己主动吭生肉,甚至有些tool chain还很不完善,不得不自己重新写。
好像是他/她明明自身条件中等甚至中下,但也看不上你,时刻端着自己摆出一副姿态的样子,结果这样反复几次,很多人玩了半月就从憧憬到放弃了。
三大厂,对于个人玩家,就象是万人迷,而我们是他的粉丝,但是人家表现出来的却是大家闺秀的感觉,资料网站上非常详细,开发工具到app note很多,而且还有社区直接Q&A,也不需要什么公司备份资料再签NDA的流程,唯一就是不对你直接支持而已。但你可以强暴,什么都不要支持,自己就玩转起来,然后从流通市场购买,甚至从灰色市场购买(翻~新~片)
而国产FPGA厂家,就象是穷精致的女孩,自己条件一搬,所以喜欢拥抱大款,对吊丝个人开发者甩也不甩,你甚至连买片子的渠道都找不到,买个把片子可以,要多,就流程来了(好像是礼金一样)。甚至你有钱你也买不到。
摆脱,我有钱,我会找你穷精致的拜金女?拜金女最合适的出路就是给大款保养做备份,同样地,国产料基本就是给大公司做2nd source,平时不用你,在某个特殊的项目上用下你。
所以基本是这个情况,好像是还没有很好定位好
页次: 1