![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FPGA那些事
qq_37258582
这个作者很懒,什么都没留下…
展开
-
初学者浅谈FPGA的时序约束
接触FPGA已经差不多两年了,在学习的过程中总能偶尔听到FPGA需要时序约束。那个时候就是什么都不懂,不懂为什么要约束,以及约束的是什么东西,以及代码的风格对约束有什么影响。直到在后来的一次调试中踩了雷,才明白时序约束的重要性,如下verilog代码。/********************************************************************************************/reg [31:0]get_num;reg [7:0原创 2021-02-03 17:20:34 · 816 阅读 · 0 评论 -
cyclone iv e系列FPGA通过串口更新程序
cyclone iv e系列FPGA通过串口更新程序已经调试通过了(纯verilog)。1.烧写BOOT程序。(默认地址是0x0000-0x7ffff)2.在BOOT程序中通过ymodem协议下发RPD文件(512KB)。3.烧写RPD文件之前需要将标志位置0。4.通过ASMI ip核烧写RPD文件(APP文件)到0x80000-0x100000,烧写前需要擦除扇区。(0x0000-0x80000是装BOOT的,我用的是EP4CS16)。5.烧写完成后标志位置1。6.启动REMOTE原创 2020-12-10 17:46:00 · 1477 阅读 · 10 评论 -
将一个32bit的数据,颠倒过来,bit0与bit31交换,bit1与bit30交换,C语言实现与verilog实现。
将一个32bit的数据,颠倒过来,bit0与bit31交换,bit1与bit30交换。C语言实现void sw(uint val){ int i,valx=0; for(i=0;i<32;i++) { valx+=val<<(31-i); } return valx;}verilog 实现方案一:module sw(a,b);input wire [31:0]a;output w...原创 2020-11-05 19:52:11 · 2953 阅读 · 1 评论 -
FPGA开发与ARM(单片机)开发的区别
我是同时做过FPGA开发(verilog)与ARM(c)开发,有很多人说学了单片机再学习FPGA会比较好过度。理由是单片机的C语言与FPGA的verilog语言很像。我不太赞成这一个说法,理由是:单片机的C语言是串行执行的,FPGA的verilog是并行执行的。虽然两者看上去语法差不多,但是语言所代表的含义完全不同。C语言最终到芯片中后是二进制代码,verilog语言最终到芯片是电路。举个例子,同样实现两个led灯的闪烁,一个是10hz,一个是5hz。/*************************原创 2020-11-02 16:27:58 · 2896 阅读 · 0 评论 -
FPGA实现开根号,仿真通过,算一次需要34个时钟周期
/******************************************verilog开平方操作******************************************/module mysqrt(clk,//时钟indata,//输入待开平方数outdata,//输出开平方的结果flag_ok,);input wire clk;//时钟input wire [31:0]indata;//假设数据为32bitoutput reg [15:0]outdata=原创 2020-08-04 18:39:08 · 4925 阅读 · 0 评论 -
ALTERA系列的FPGA通过RS232串口在线升级
ARM系列的芯片(例如STM32系列)可以通过YMODEM协议实现在线升级,在芯片中写入BOOT程序、APP程序就可以实现。那FPGA可以这样做吗,答案是可以的。要想搞清楚流程就必须了解FPGA的启动过程。FPGA一般会外挂一个FLASH,FLASH中装的就是FPGA的配置信息。FPGA一上电首先会读取FLASH的配置信息,保存在RAM然后通过这些配置信息来运行逻辑,所以FPGA在运行过程中与外挂...原创 2020-03-31 18:20:51 · 2426 阅读 · 0 评论 -
FPGA 16位除法器
quartusii 中“/”是可以综合的,不过特别耗费资源。这时候在运算速度要求不是很高的前提下,自行实现除法器就是很有意义的事情了。 此除法器完成一次运算需要耗费18个时钟周期。赋值缓存一个时钟周期,移位减法16个时钟周期,输出一个时钟周期。为什么要缓存呢(a需要缓存到ax,b需要缓存到bx)?因为如果不做缓存,在运算期间a,b值改变会影响结果的正确性。 ...原创 2019-10-19 17:13:45 · 1939 阅读 · 0 评论