
FPGA从0到1
文章平均质量分 77
记录自己练习用的Verilog程序
PINKPIG2567
这个作者很懒,什么都没留下…
展开
-
【Vivado】生成网表文件
在vivado中执行综合后即可生成网表文件,简单来说网表文件是对电路设计逻辑结构的描述,如网表由单元(cell)、引脚(pin)、端口(port)和网络(Net)构成。综合之后Open Synthesis Design可以看到这样一个窗口,这就是记录了电路的网表信息。原创 2023-02-06 13:49:39 · 8881 阅读 · 0 评论 -
【Vivado】xdc约束文件编写
通过Clocking Wizard IP创建的时钟(MMCM或PLL),系统会自动生成约束。从布局布线后的结果来看时序勉强收敛,因此我想不修改MMCM输出时钟频率的同时,手动修改约束,验证一下时序设计裕量。源时钟是200MHz,这里想将输出时钟约束到150MHz,因此通过 -multiply_by 和 -devide_by 组合实现。在优化布局布线后的时序时发现,一些寄存器的扇出数过大。因此尝试通过约束限制特定端口的最大扇出。其中,IPs_match* 表示所有前缀为IPs_match的信号组。原创 2024-12-04 10:35:47 · 965 阅读 · 0 评论 -
【FPGA】BRAM使用细节
上图是实际综合的结果,其中,DP指真双端口BRAM,SP指单端口BRAM。对于单端口BRAM,18X1024大小只占用0.5块BRAM,而36X512同样占用0.5块BRAM,这实际上是使用一个18Kb的BRAM实现的,其中一半18X512使用其中一组读写端口,另一半18X512使用另一组读写端口。双端口36X512则占用完整的一块BRAM,因为双端口都被占用,因此无法像单端口一样灵活组合。原创 2024-07-15 23:13:06 · 742 阅读 · 0 评论 -
【Verilog】组合逻辑一些注意事项
这段话的意思是:在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。也就是说,综合出触发器的条件是,需要有时钟的沿触发。原创 2023-02-10 11:30:37 · 611 阅读 · 0 评论 -
【Verilog】手撕异步FIFO
在上一篇同步FIFO中已经介绍过,FIFO是一种先进先出的数据缓存器,它与普通存储器的区别是没有读写外部地址,这样使用起来非常简单,但缺点就是只能顺序写入数据。FIFO分为同步FIFO和异步FIFO两种,其中同步FIFO的输入与输出采用相同的时钟,而异步FIFO的读写时钟是互相独立的。原创 2022-10-09 17:15:47 · 8110 阅读 · 5 评论 -
【Verilog】手撕同步FIFO
FIFO是一种先进先出的数据缓存器,一般用在隔离两边读写带宽不一致,或者位宽不一样的地方。在FPGA设计中,使用FIFO一般有两个方法,第一个方法是直接调用官方的FIFO IP,第二个方法是自己设计FIFO控制逻辑。FIFO包括同步FIFO和异步FIFO两种,同步FIFO有一个时钟信号,读和写逻辑全部使用这一个时钟信号;异步FIFO有两个时钟信号,读和写逻辑使用各自的时钟。原创 2022-10-09 11:11:23 · 1771 阅读 · 0 评论