tag 标签: fpga初学

相关博文
  • 热度 30
    2016-5-25 18:13
    1207 次阅读|
    2 个评论
    想起自己第一次接触FPGA,我感觉我当时就是一脸懵圈的给自己挖了一个大坑,最后只能用自己填的坑!想到一句话形容...西湖的水都是我的泪(当然夸张了哈~~~) 说起我和FPGA的初恋,回到我们刚认识的时候...那还是15年炎热的夏季自己大二的时候,看小伙伴们在实验室通宵为了电赛努力奋斗的时候,被一喜欢的姑娘努力学习的精神感动了..,(我是单身汪哈~) 所以就有了想法嘛,各位懂的哦(好菇凉就是一切....作为一个宅男,拜倒裙下也很正常~~) 不过我很现实,真的,没颜值,我爸不是什么刚~又觉得我渣渣的水平(接触硬件比较晚,大一水了一年,从大二算我当时才学半年的51...)根本没可能的事.恩小宇宙就有种控制不住要爆发的感觉昂 我当时就想自己是学51,还是32(姑娘那时候不仅会软件编程还会硬件...像什么C,C++,51,32通吃,不得不佩服)去追随姑娘的步伐...上网差了大量的相关资料,前景啊,未来就业什么的,考虑的较多....我说过我很现实,我没钱,在网上搜资料的时候"硬件方向做什么前景比较好,工资高"我就按照这个搜的...so...茫茫资料库中,我就第一次认识了FPGA,看着网上关于fpga的介绍,前景辣么好,工资那么高,感觉高大上,又想到姑娘那时候没接触过FPGA,自己努力学成大神,是不是就可以去追姑娘了(我当时应该万万没想到看多了...)...所以,果断决定从事FPGA...因为对fpga了解的很少不知觉就给自己挖了一个大坑... 当天晚上和小伙伴一起吃饭的时候...我说我要从事fpga方向,把在百科上看到的fpga介绍说了一下,问有没有一起的(其实我当时心里多希望姑娘和我一起学,恩理想很丰满,现实很骨感...)...除了两个通信的大三学长,小伙伴们同样的一脸茫然...小伙伴们说我很6,不好好学51和32居然选择fpga做...当时很尴尬,感觉一个人,想放弃,但又想自己的目的(一切为了引起姑娘的注意...)我没有放弃,坚定下来学fpga...所以到现在我依然是我们专业唯一一个学FPGA的.... 作为专业第一个吃螃蟹的人,我没有一览众山小的感觉,我只感觉到"高""冷"... 因为什么都不了解,实验室没有从事fpga的学长指导,自己只能在网上看怎么开始学习fpga...用什么软件(网上说Quartus入门比赛琳斯简单...)...需要什么板卡...在淘宝看销量买了一块板卡(名就不说了,走进坑中,又被板卡坑了一下)... (我现在感觉当时我是幸运的,因为我学的是Quartus...用的是Verilog...我现在虽然摔在坑里,但我能站起来,虽然坑很深,但我能往上爬) 接下来收到板子就迫不及待的开始学习,,,学习,,,学习,,,然后我就知道我给自己挖了一个大坑,,,软件不会用,代码不会写,板卡历程直接用错误不会改,不知道什么是仿真,怎么下板....收到板卡后整整一周,,,我连一个LED都不会点亮....没人教,没人指导,更重要的事没有同伴,我当时想放弃,真的想放弃... 每当我不想学的时候,我就告诉自己我要为了菇凉,为了菇凉,我要继续学....就这样,很累很累一个人每天啥都不懂的坚持半年才学会软件怎么简单的使用,怎么写程序,出错怎么更改,怎么行为级仿真,怎么下板...我做到了,我很开心... 就这样坚持了下来,后来自己掌握的更多了,认识了一些学长...老师,朋友,真正做实训的时候很感谢小梅哥,感谢他的视频教程...让我少走了很多的弯路,节省了很多时间! 以上就是第一次接触FPGA的一些个人感想了,对于我来说,认识fpga要感谢我对姑娘的喜欢,同样我很感谢自己当时坚持了下来,要不然没有现在的进步...因为年轻,有所任性,所以有所追求,我不知道多少人能看到我这篇水文...同样不知道你为什么学习FPGA...我只想说,既然确定选择方向,坚持下去,为了自己,或者为了菇凉,或者为了以后有个好工作等等...努力吧
  • 热度 24
    2014-5-4 12:35
    1859 次阅读|
    5 个评论
    学习FPGA一个月了,复习了下数字电路基础,了解了verilog基本的语法,大致了解了FPGA的基本结构,快速翻看了几本书,几个视频。看过开发板上的实验教程,大概知道了verilog并行操作是怎么回事,虽然还不能像看单片机C顺序执行那么顺畅,毕竟看下来也没刚开始的那般不习惯。 但是总是在实践中才能更高效的学习,感觉过去走过很多弯路,瞎搞一气。学单片机的时候完全不知道在干什么,因为没有项目支撑,完全空对空的。喜欢下各种资料,但是很多没看,也没那么多的时间去看,也没必要面面俱到的去看,因为很多用不上;即便看了的那些,看过又忘了,因为没有总结,很多错误会一而再再而三的犯;另外一方面也因为没有项目支撑,对很多东西只能停留在书本概念层面,无法深入理解。总之,没有明白一个基本的道理:只有放到自己脑子里的东西才是自己的,只有能学以致用的知识才是有价值的。在现在的网络情况下,很多东西只需要检索,而不需要存储,学习的能力更重要。 又废话了不少,不说了。 那FPGA我拿它来干什么呢,基于现在实验室的恶劣环境(一言难尽的恶劣环境,只想吐槽还是吐槽 ),能干的东西实在不多,想了下,和自己的项目挂的上边的,大概就是数据采集与信号处理。FPGA的信号处理就不考虑了,功底不够,做不下去。信号采集翻了几篇论文,考虑成本、难度、现有条件,初步定了下信号采集的方案,采用FPGA进行控制外围的高速AD采样芯片TLC5510(采样率最高能达到20M,足够满足要求了;其实主要是便宜,缺点是只有8位,有点少),采集的信号存储在FPGA的FIFO中,然后外围通过USB数据采集芯片CY7C68013传输到上位机,FPGA进行整体控制。(不过上位机怎么搞还是个问题)。。。 初步就是这样,详细的还要具体查每一个模块的资料。FPGA初学,请各位看官多拍。。。
  • 热度 23
    2014-4-30 16:02
    1120 次阅读|
    4 个评论
    刚开始学习 FPGA 和 verilog 语言,从单片机过来,看着并行操作的语言确实很不习惯,翻了小段时间,看到本书《 FPGA 那些事》,讲的还好。 verilog 语言本质是并行操作的,因为有时钟节拍的驱动和模块之间的同步信号的驱动和控制,所以可以仿 C 的顺序操作,其实就是一个个状态机实现步奏控制,然后上层的大的状态机嵌套底层小的状态机,模块之间通过信号量 ( 功能模块的启动信号与功能模块的完成信号进行同步 ) 。建模的重点在于划分模块的功能与层次。 比起写成一团的单一文件方式,这种防顺序操作建模类似于写单片机程序的模块划分与软件分层思想,便于模块的维护 / 理解 / 移植。 稍作下总结,留做自己的框架。 1.1 自顶向下划分模块和接口: 模块分为:功能模块 / 控制模块 / 组织模块 1.2 仿顺序操作: 功能模块接口: clk/rst_n/start_sig( 启动信号 )/done_sig( 完成信号 )/ 以及其他的控制接口 ( 数据 data 的输入输出接口 ) 。   1.3.1   防顺序操作的格式:   // 输入输出变量的说明 input … output… inout…   // 参数定义 parameter T1MS = …; // 时钟发生模块 reg count1; always @ (posedge clk or negedge rst_n)     if(!rst_n) count1=16’d0;     else if(count1 == T1MS)        count1=16’d0;     else if(isCount)        count1=count1+1’b1;     else if(!isCount)        count1=16’d0;   // 在一个时钟的基础上产生其他时钟 reg count2; always @ (posedge clk or negedge rst_n)     if(!rst_n) count2=10’d0;     else if(count2 == T1S)        count2=10’d0;     else if(count1==T1MS)        count2=count2+1’b1;   // 通过时钟产生相应的同步信号 assign SS_sig=(count==T1MS)? 1’b1:1’b0;…   //---------------------------------------------- // 定义需要的中间寄存器 reg 或者 wire 变量 reg i;// 用于作为顺序操作的控制变量   always @ (posedge clk or negedge rst_n) begin     if(!rst_n) begin            // 信号初始化操作            i=4’d0;            isCount=1’b0;            isDone=1’b0;        end else if(start_sig) // 如果接收到启动信号            case(i)            4’d0:… i=i+1;… // 每个时间点下面的变量输出变化 if(count1== ??) …            4’d1:…            …            // 产生结束信号            4’d9: begin isDone=1’b1;i=i+1;end            4’d10:begin isDone=1’b0;i=4’d0;end            endcase        end end   // 如果有组合逻辑。。。 always @ (*) begin   end   // 中间定义的寄存器变量赋值输出 assign Data=rData;… assign Done_sig=isDone;   1.3.2  控制模块的建模     上层控制模块完成对下层功能模块的调度,实现起来仍然是采用防顺序操作的模式。所以这种建模有点自底而上的样子。     可以通过命令的方式对下层模块进行调度。命令可以放在 FIFO 里面进行顺序执行。     1.3.3 顶层模块的连接 1.3.4 模块接口